diff options
author | Daniel Friesel <derf@derf.homelinux.org> | 2010-02-05 18:08:37 +0100 |
---|---|---|
committer | Daniel Friesel <derf@derf.homelinux.org> | 2010-02-05 18:08:37 +0100 |
commit | 4323b10ab754066f6e4e16b7338ad26e7479391d (patch) | |
tree | a67e8eeead92cd26f67c61274d9015fdd537d0fd /src | |
parent | a4d4d67498d168eefdfbba694b99616f60862d77 (diff) |
Apply 04_escape_filenamed.patch from Debian
Diffstat (limited to 'src')
-rw-r--r-- | src/options.c | 2 | ||||
-rw-r--r-- | src/support.c | 18 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/options.c b/src/options.c index 20f4ea6..bb9cf1c 100644 --- a/src/options.c +++ b/src/options.c @@ -985,7 +985,7 @@ show_usage(void) " Feh stores the commandline necessary to restore\n" " the background you chose in ~/.fehbg. So to have\n" " feh-set backgrounds restored when you restart X,\n" -" add the line \"eval `cat $HOME/.fehbg`\" to your\n" +" add the line \"`cat $HOME/.fehbg`\" to your\n" " X startup script (e.g. ~/.xsession). Note that\n" " you only need to do this for non E window\n" " managers.\n" diff --git a/src/support.c b/src/support.c index 0377e14..ee214cf 100644 --- a/src/support.c +++ b/src/support.c @@ -27,6 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "filelist.h" #include "options.h" #include "support.h" +#include <limits.h> Window ipc_win = None; Window my_ipc_win = None; Atom ipc_atom = None; @@ -162,7 +163,7 @@ feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled, /* string for sticking in ~/.fehbg */ char *fehbg = NULL; char *home; - char filbuf[4096]; + char filbuf[PATH_MAX]; /* local display to set closedownmode on */ Display *disp2; @@ -170,11 +171,22 @@ feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled, int depth2; XGCValues gcvalues; GC gc; - int w, h; + int in, out, w, h; D(3, ("Falling back to XSetRootWindowPixmap\n")); - snprintf(filbuf, sizeof(filbuf), "\"%s\"", fil); + /* Put the filename in filbuf between ' and escape ' in the filename */ + out = 0; + filbuf[out++] = '\''; + for (in = 0; fil[in] && out < (PATH_MAX-4); in++) { + if (fil[in] == '\'') { + filbuf[out++] = '\\'; + } + filbuf[out++] = fil[in]; + } + filbuf[out++] = '\''; + filbuf[out++] = 0; + if (scaled) { w = scr->width; h = scr->height; |