TEST(reload_does_not_remove_broken_symlinks, IF(not_windows)) { char test_file[PATH_MAX]; assert_non_null(os_realpath(TEST_DATA_PATH "/existing-files/a", test_file)); assert_success(chdir(SANDBOX_PATH)); /* symlink() is not available on Windows, but other code is fine. */ #ifndef _WIN32 assert_success(symlink("/wrong/path", "broken-link")); #endif assert_false(flist_custom_active(&lwin)); flist_custom_start(&lwin, "test"); flist_custom_add(&lwin, test_file); flist_custom_add(&lwin, "./broken-link"); assert_true(flist_custom_finish(&lwin, 0) == 0); assert_int_equal(2, lwin.list_rows); load_dir_list(&lwin, 1); assert_int_equal(2, lwin.list_rows); assert_success(remove("broken-link")); }
TEST(symlinks_to_dirs_are_recognized_as_dirs, IF(not_windows)) { char test_dir[PATH_MAX]; assert_non_null(os_realpath(TEST_DATA_PATH "/existing-files", test_dir)); assert_success(chdir(SANDBOX_PATH)); /* symlink() is not available on Windows, but other code is fine. */ #ifndef _WIN32 assert_success(symlink(test_dir, "dir-link")); #endif (void)test_dir; assert_false(flist_custom_active(&lwin)); flist_custom_start(&lwin, "test"); flist_custom_add(&lwin, "./dir-link"); assert_true(flist_custom_finish(&lwin, 0) == 0); assert_int_equal(1, lwin.list_rows); assert_true(is_directory_entry(&lwin.dir_entry[0])); assert_success(remove("dir-link")); }
static void setup_custom_view(FileView *view) { assert_false(flist_custom_active(view)); snprintf(view->curr_dir, sizeof(view->curr_dir), "%s/existing-files", test_data); flist_custom_start(view, "test"); flist_custom_add(view, TEST_DATA_PATH "/existing-files/a"); assert_true(flist_custom_finish(view, 0) == 0); }
int menu_to_custom_view(menu_state_t *m, FileView *view, int very) { int i; char *current = NULL; const char *const rel_base = get_relative_path_base(m->d, view); flist_custom_start(view, m->d->title); for(i = 0; i < m->d->len; ++i) { char *path; int line_num; /* Skip empty lines. */ if(skip_whitespace(m->d->items[i])[0] == '\0') { continue; } path = parse_file_spec(m->d->items[i], &line_num, rel_base); if(path == NULL) { continue; } flist_custom_add(view, path); /* Use either exact position or the next path. */ if(i == m->d->pos || (current == NULL && i > m->d->pos)) { current = path; continue; } free(path); } /* If current line and none of the lines below didn't contain valid path, try * to use file above cursor position. */ if(current == NULL && view->custom.entry_count != 0) { char full_path[PATH_MAX]; get_full_path_of(&view->custom.entries[view->custom.entry_count - 1], sizeof(full_path), full_path); current = strdup(full_path); } if(flist_custom_finish(view, very ? CV_VERY : CV_REGULAR, 0) != 0) { free(current); return 1; } if(current != NULL) { flist_goto_by_path(view, current); free(current); } return 0; }