diff options
-rw-r--r-- | thumbs.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -327,7 +327,8 @@ int tns_cache_enabled() { char* tns_cache_filename(const char *filename) { size_t len; - char *cfile, *abspath; + char *cfile = NULL; + const char *abspath; if (!cache_dir || !filename) return NULL; @@ -336,15 +337,17 @@ char* tns_cache_filename(const char *filename) { if (!(abspath = absolute_path(filename))) return NULL; } else { - abspath = (char*) s_malloc(strlen(filename) + 1); - strcpy(abspath, filename); + abspath = filename; } - len = strlen(cache_dir) + strlen(abspath) + 6; - cfile = (char*) s_malloc(len); - snprintf(cfile, len, "%s/%s.png", cache_dir, abspath + 1); + if (strncmp(abspath, cache_dir, strlen(cache_dir))) { + len = strlen(cache_dir) + strlen(abspath) + 6; + cfile = (char*) s_malloc(len); + snprintf(cfile, len, "%s/%s.png", cache_dir, abspath + 1); + } - free(abspath); + if (abspath != filename) + free((void*) abspath); return cfile; } |