aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--thumbs.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/thumbs.c b/thumbs.c
index 820fd4b..7c895c1 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -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;
}