Пример #1
0
TEST(symlinks_are_not_resolved_in_tree_preview, IF(not_windows))
{
	int nlines;
	FILE *fp;
	char **lines;

	assert_success(os_mkdir(SANDBOX_PATH "/dir", 0777));

	/* symlink() is not available on Windows, but the rest of the code is fine. */
#ifndef _WIN32
	assert_success(symlink(".", SANDBOX_PATH "/dir/link"));
#endif

	fp = qv_view_dir(SANDBOX_PATH "/dir");
	lines = read_file_lines(fp, &nlines);

	assert_int_equal(4, nlines);
	assert_string_equal("dir/", lines[0]);
	assert_string_equal("`-- link/ -> .", lines[1]);
	assert_string_equal("", lines[2]);
	assert_string_equal("1 directory, 0 files", lines[3]);

	free_string_array(lines, nlines);
	fclose(fp);

	assert_success(unlink(SANDBOX_PATH "/dir/link"));
	assert_success(rmdir(SANDBOX_PATH "/dir"));
}
Пример #2
0
Файл: view.c Проект: lyuts/vifm
/* Reads data to be displayed handling error cases.  Returns zero on success, 1
 * if file is a directory, 2 on file reading error, 3 on issues with viewer or
 * 4 on empty input. */
static int
get_view_data(view_info_t *vi, const char file_to_view[])
{
	FILE *fp;

	const char *const viewer =
		get_viewer_for_file(get_last_path_component(file_to_view));

	if(is_null_or_empty(viewer))
	{
		if(is_dir(file_to_view))
		{
			return 1;
		}
		else if((fp = fopen(file_to_view, "rb")) == NULL)
		{
			return 2;
		}
	}
	else if((fp = use_info_prog(viewer)) == NULL)
	{
		return 3;
	}

	vi->lines = is_null_or_empty(viewer)
		? read_file_lines(fp, &vi->nlines)
		: read_stream_lines(fp, &vi->nlines);

	fclose(fp);

	if(vi->lines == NULL || vi->nlines == 0)
	{
		return 4;
	}

	return 0;
}
Пример #3
0
/* Reads data to be displayed handling error cases.  Returns zero on success, 1
 * if file is a directory, 2 on file reading error, 3 on issues with viewer or
 * 4 on empty input. */
static int
get_view_data(view_info_t *vi, const char file_to_view[])
{
	FILE *fp;
	const char *const viewer = gv_get_viewer(file_to_view);

	if(is_null_or_empty(viewer))
	{
		if(is_dir(file_to_view))
		{
			return 1;
		}

		fp = os_fopen(file_to_view, "rb");
		if(fp == NULL)
		{
			return 2;
		}

		vi->lines = read_file_lines(fp, &vi->nlines);
	}
	else
	{
		const int graphics = is_graphics_viewer(viewer);
		FileView *const curr = curr_view;
		curr_view = curr_stats.view ? curr_view
		          : (vi->view != NULL) ? vi->view : curr_view;
		curr_stats.preview_hint = vi->view;

		if(graphics)
		{
			/* Wait a bit to let terminal emulator do actual refresh (at least some
			 * of them need this). */
			usleep(50000);
		}
		fp = use_info_prog(viewer);

		curr_view = curr;
		curr_stats.preview_hint = NULL;

		if(fp == NULL)
		{
			return 3;
		}

		if(graphics)
		{
			vi->graphics = 1;
		}

		vi->lines = read_stream_lines(fp, &vi->nlines);
	}

	fclose(fp);

	if(vi->lines == NULL || vi->nlines == 0)
	{
		return 4;
	}

	return 0;
}