summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2013-02-08 18:04:21 +0100
committerDaniel Friesel <derf@finalrewind.org>2013-02-08 18:04:21 +0100
commit0084d755618c8a5a55f36bbdd2c17952dfae68f0 (patch)
tree1ae5d91a86752c17b03bdd70692f5e52abdb282b
parent6ea43a3213bb264525e04c729c67204f82c7a2c8 (diff)
downloadfeh-0084d755618c8a5a55f36bbdd2c17952dfae68f0.zip
handle stdin when loading filelist so it also works with --list, rotation, etc.
-rw-r--r--src/filelist.c38
-rw-r--r--src/imlib.c39
2 files changed, 37 insertions, 40 deletions
diff --git a/src/filelist.c b/src/filelist.c
index 3ea0928..0aafa64 100644
--- a/src/filelist.c
+++ b/src/filelist.c
@@ -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) {
diff --git a/src/imlib.c b/src/imlib.c
index bdf54ac..98a91be 100644
--- a/src/imlib.c
+++ b/src/imlib.c
@@ -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];