Hi, On Thu, Jan 19, 2012 at 12:47:06PM +0000, Jonathan Wiltshire wrote: > On Fri, Jul 08, 2011 at 08:06:17PM +0200, Julien Cristau wrote: > > [...] > > ick. mkdtemp(3), please. > Any news on this?
the attached patches (created against the unpatched 1.3.4.dfsg.1-1 / 1.8-1 packages) use mkdtemp for the fix. I removed the --cache 0 wget argument because my system's wget does not support it anymore, if the wget in oldstable still has it it's safe to put that back in. --Daniel
diff --git a/src/imlib.c b/src/imlib.c index fc4dcf0..1d06628 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -263,7 +263,7 @@ feh_http_load_image(char *url) char *newurl = NULL; char randnum[20]; int rnum; - char *path = NULL; + static char *path = NULL; D_ENTER(4); @@ -274,11 +274,16 @@ feh_http_load_image(char *url) else path = ""; } - else - path = "/tmp/"; + else { + path = estrdup("/tmp/feh_XXXXXX"); + if (mkdtemp(path) == NULL) + eprintf("Failed to create temporary directory"); + path = estrjoin("", path, "/", NULL); + opt.tmp_path = path; + } basename = strrchr(url, '/') + 1; - tmpname = feh_unique_filename(path, basename); + tmpname = estrjoin("", path, basename, NULL); if (opt.wget_timestamp) { @@ -288,7 +293,7 @@ feh_http_load_image(char *url) ppid = getpid(); snprintf(cppid, sizeof(cppid), "%06ld", (long)ppid); tmpname_timestamper = - estrjoin("", "/tmp/feh_", cppid, "_", basename, NULL); + estrjoin("", path, cppid, "_", basename, NULL); } if (opt.wget_timestamp) @@ -548,7 +553,7 @@ feh_http_load_image(char *url) } else { - execlp("wget", "wget", "--cache", "0", newurl, "-O", tmpname, + execlp("wget", "wget", newurl, "-O", tmpname, quiet, (char*) NULL); } eprintf("url: exec failed: wget:"); diff --git a/src/main.c b/src/main.c index 745fdf9..4fbe600 100644 --- a/src/main.c +++ b/src/main.c @@ -215,5 +215,8 @@ feh_clean_exit(void) if (opt.filelistfile) feh_write_filelist(filelist, opt.filelistfile); + if (opt.tmp_path && !opt.keep_http) + rmdir(opt.tmp_path); + D_RETURN_(4); } diff --git a/src/options.c b/src/options.c index d9d803d..7fd46b0 100644 --- a/src/options.c +++ b/src/options.c @@ -55,6 +55,7 @@ init_parse_options(int argc, char **argv) opt.thumb_h = 60; opt.menu_font = estrdup(DEFAULT_MENU_FONT); opt.font = estrdup(DEFAULT_FONT); + opt.tmp_path = NULL; opt.menu_bg = estrdup(PREFIX "/share/feh/images/menubg_default.png"); opt.menu_style = estrdup(PREFIX "/share/feh/fonts/menu.style"); opt.menu_border = 4; diff --git a/src/options.h b/src/options.h index 0101885..f365da8 100644 --- a/src/options.h +++ b/src/options.h @@ -89,6 +89,8 @@ struct __fehoptions char *menu_style; char *caption_path; + char *tmp_path; + gib_style *menu_style_l; unsigned char next_button;
diff --git a/src/imlib.c b/src/imlib.c index 69c6e50..ea88754 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -232,15 +232,20 @@ char *feh_http_load_image(char *url) { char *tmpname; char *basename; - char *path = NULL; + static char *path = NULL; if (opt.keep_http) { if (opt.output_dir) path = opt.output_dir; else path = ""; - } else - path = "/tmp/"; + } else { + path = estrdup("/tmp/feh_XXXXXX"); + if (mkdtemp(path) == NULL) + eprintf("Failed to create temporary directory:"); + path = estrjoin(NULL, path, "/", NULL); + opt.tmp_path = path; + } basename = strrchr(url, '/') + 1; tmpname = feh_unique_filename(path, basename); diff --git a/src/main.c b/src/main.c index ce46879..9588863 100644 --- a/src/main.c +++ b/src/main.c @@ -190,5 +190,8 @@ void feh_clean_exit(void) if (opt.filelistfile) feh_write_filelist(filelist, opt.filelistfile); + if (opt.tmp_path && !opt.keep_http) + rmdir(opt.tmp_path); + return; } diff --git a/src/options.c b/src/options.c index 5962ca1..5f928ed 100644 --- a/src/options.c +++ b/src/options.c @@ -56,6 +56,7 @@ void init_parse_options(int argc, char **argv) opt.thumb_redraw = 10; opt.menu_font = estrdup(DEFAULT_MENU_FONT); opt.font = NULL; + opt.tmp_path = NULL; opt.image_bg = estrdup("default"); opt.menu_bg = estrdup(PREFIX "/share/feh/images/menubg_default.png"); opt.menu_style = estrdup(PREFIX "/share/feh/fonts/menu.style"); diff --git a/src/options.h b/src/options.h index be20687..2cb174e 100644 --- a/src/options.h +++ b/src/options.h @@ -88,6 +88,8 @@ struct __fehoptions { char *caption_path; char *start_list_at; + char *tmp_path; + gib_style *menu_style_l; unsigned char pan_button;
signature.asc
Description: Digital signature