diff options
-rw-r--r-- | src/slideshow.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/slideshow.c b/src/slideshow.c index b9d9494..42aaf2e 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -390,7 +390,7 @@ char *feh_printf(char *str, feh_file * file) ret[0] = '\0'; for (c = str; *c != '\0'; c++) { - if (*c == '%') { + if ((*c == '%') && (*(c+1) != '\0')) { c++; switch (*c) { case 'f': @@ -456,18 +456,22 @@ char *feh_printf(char *str, feh_file * file) + 1 : 0); strcat(ret, buf); break; + case '%': + strcat(ret, "%"); + break; default: - strncat(ret, c, 1); + weprintf("Unrecognized format specifier %%%c", *c); + strncat(ret, c - 1, 2); break; } - } else if (*c == '\\') { + } else if ((*c == '\\') && (*(c+1) != '\0')) { c++; switch (*c) { case 'n': strcat(ret, "\n"); break; default: - strncat(ret, c, 1); + strncat(ret, c - 1, 2); break; } } else |