Commit 0084d755 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

handle stdin when loading filelist so it also works with --list, rotation, etc.

parent 6ea43a32
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -155,6 +155,40 @@ static void feh_print_stat_error(char *path)
	}
}

static void add_stdin_to_filelist()
{
	char buf[1024];
	size_t readsize;
	char *sfn = estrjoin("_", "/tmp/feh_stdin", "XXXXXX", NULL);
	int fd = mkstemp(sfn);
	FILE *outfile;

	if (fd == -1) {
		free(sfn);
		weprintf("cannot read from stdin: mktemp:");
		return;
	}

	outfile = fdopen(fd, "w");

	if (outfile == NULL) {
		free(sfn);
		weprintf("cannot read from stdin: fdopen:");
		return;
	}

	while ((readsize = fread(buf, sizeof(char), sizeof(buf), stdin)) > 0) {
		if (fwrite(buf, sizeof(char), readsize, outfile) < readsize) {
			free(sfn);
			return;
		}
	}
	fclose(outfile);

	filelist = gib_list_add_front(filelist, feh_file_new(sfn));
	free(sfn);
}


/* Recursive */
void add_file_to_filelist_recursively(char *origpath, unsigned char level)
@@ -186,8 +220,8 @@ void add_file_to_filelist_recursively(char *origpath, unsigned char level)
			free(path);
			return;
		} else if ((len == 1) && (path[0] == '-')) {
			D(("Addig stdin (-) to filelist\n"));
			filelist = gib_list_add_front(filelist, feh_file_new(path));
			D(("Adding temporary file for stdin (-) to filelist\n"));
			add_stdin_to_filelist();
			free(path);
			return;
		} else if (opt.filelistfile) {
+1 −38
Original line number Diff line number Diff line
@@ -61,7 +61,6 @@ int num_xinerama_screens;

int childpid = 0;

static char *feh_stdin_load_image();
static char *feh_http_load_image(char *url);
static char *feh_magick_load_image(char *filename);

@@ -210,7 +209,7 @@ void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err)
int feh_load_image(Imlib_Image * im, feh_file * file)
{
	Imlib_Load_Error err;
	enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK, SRC_STDIN } image_source =
	enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK } image_source =
		SRC_IMLIB;
	char *tmpname = NULL;
	char *real_filename = NULL;
@@ -227,10 +226,6 @@ int feh_load_image(Imlib_Image * im, feh_file * file)

		tmpname = feh_http_load_image(file->filename);
	}
	if ((strlen(file->filename) == 1) && (file->filename[0] == '-')) {
		image_source = SRC_STDIN;
		tmpname = feh_stdin_load_image();
	}
	else
		*im = imlib_load_image_with_error_return(file->filename, &err);

@@ -275,38 +270,6 @@ int feh_load_image(Imlib_Image * im, feh_file * file)
	return(1);
}

static char *feh_stdin_load_image()
{
	char buf[1024];
	size_t readsize;
	char *sfn = estrjoin("_", "/tmp/feh_stdin", "XXXXXX", NULL);
	int fd = mkstemp(sfn);
	FILE *outfile;

	if (fd == -1) {
		free(sfn);
		return NULL;
	}

	outfile = fdopen(fd, "w");

	if (outfile == NULL) {
		free(sfn);
		return NULL;
	}

	while ((readsize = fread(buf, sizeof(char), sizeof(buf), stdin)) > 0) {
		if (fwrite(buf, sizeof(char), readsize, outfile) < readsize) {
			free(sfn);
			return NULL;
		}
	}

	fclose(outfile);

	return sfn;
}

static char *feh_magick_load_image(char *filename)
{
	char argv_fd[12];