} END_TEST START_TEST(test_file_valid_extension_null) { fail_unless(file_valid_extension(NULL, NULL) == false, NULL); fail_unless(file_valid_extension((void*) 0xDEAD, NULL) == false, NULL); fail_unless(file_valid_extension(NULL, "pdf") == false, NULL); } END_TEST
static girara_list_t* list_files(zathura_t* zathura, const char* current_path, const char* current_file, unsigned int current_file_length, bool is_dir, bool check_file_ext) { if (zathura == NULL || zathura->ui.session == NULL || current_path == NULL) { return NULL; } /* read directory */ GDir* dir = g_dir_open(current_path, 0, NULL); if (dir == NULL) { return NULL; } girara_list_t* res = girara_sorted_list_new2((girara_compare_function_t)compare_case_insensitive, (girara_free_function_t)g_free); bool show_hidden = false; girara_setting_get(zathura->ui.session, "show-hidden", &show_hidden); bool show_directories = true; girara_setting_get(zathura->ui.session, "show-directories", &show_directories); /* read files */ char* name = NULL; while ((name = (char*) g_dir_read_name(dir)) != NULL) { char* e_name = g_filename_display_name(name); if (e_name == NULL) { goto error_free; } size_t e_length = strlen(e_name); if (show_hidden == false && e_name[0] == '.') { g_free(e_name); continue; } if ((current_file_length > e_length) || strncmp(current_file, e_name, current_file_length)) { g_free(e_name); continue; } char* tmp = "/"; if (is_dir == true || g_strcmp0(current_path, "/") == 0) { tmp = ""; }; char* full_path = g_strdup_printf("%s%s%s", current_path, tmp, e_name); if (g_file_test(full_path, G_FILE_TEST_IS_DIR) == true) { if (show_directories == false) { g_free(e_name); g_free(full_path); continue; } girara_list_append(res, full_path); } else if (check_file_ext == false || file_valid_extension(zathura, full_path) == true) { girara_list_append(res, full_path); } else { g_free(full_path); } g_free(e_name); } g_dir_close(dir); if (girara_list_size(res) == 1) { char* path = girara_list_nth(res, 0); if (g_file_test(path, G_FILE_TEST_IS_DIR) == true) { char* newpath = g_strdup_printf("%s/", path); girara_list_clear(res); girara_list_append(res, newpath); } } return res; error_free: girara_list_free(res); return NULL; }