summaryrefslogtreecommitdiff
path: root/src/imlib.c
diff options
context:
space:
mode:
authorDennis Real <github@tildepipe.org>2013-02-02 20:53:23 +0100
committerDennis Real <github@tildepipe.org>2013-02-02 20:53:23 +0100
commit353578ebc130f53547996ab87f5b3795c1360f3f (patch)
tree8a19969f7eb377f692892e24c24ba116940ba942 /src/imlib.c
parent38c3c37b5c45691211ed62e40a6c5f503b054335 (diff)
parent6ea43a3213bb264525e04c729c67204f82c7a2c8 (diff)
Merge branch 'master' of git://github.com/derf/feh
Diffstat (limited to 'src/imlib.c')
-rw-r--r--src/imlib.c40
1 files changed, 39 insertions, 1 deletions
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];