diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/filelist.c | 5 | ||||
| -rw-r--r-- | src/imlib.c | 40 | 
2 files changed, 44 insertions, 1 deletions
| diff --git a/src/filelist.c b/src/filelist.c index 8f3bfe9..3ea0928 100644 --- a/src/filelist.c +++ b/src/filelist.c @@ -185,6 +185,11 @@ void add_file_to_filelist_recursively(char *origpath, unsigned char level)  			/* We'll download it later... */  			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)); +			free(path); +			return;  		} else if (opt.filelistfile) {  			char *newpath = feh_absolute_path(path); diff --git a/src/imlib.c b/src/imlib.c index e9f92ad..bdf54ac 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -61,6 +61,7 @@ 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); @@ -209,7 +210,8 @@ 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 } image_source = SRC_IMLIB; +	enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK, SRC_STDIN } image_source = +		SRC_IMLIB;  	char *tmpname = NULL;  	char *real_filename = NULL; @@ -225,6 +227,10 @@ 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); @@ -269,6 +275,38 @@ 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]; | 
