From: Timothy Arceri Date: Wed, 22 Feb 2017 03:16:04 +0000 (+1100) Subject: util/disk_cache: fix bug with deleting old cache dirs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d258055c8bcb1bd8438b4c28134813a4f0620f98;p=mesa.git util/disk_cache: fix bug with deleting old cache dirs If there was more than a single directory in the .cache/mesa dir then it would only remove one (or none) of the directories. Apparently Valgrind was also reporting: Conditional jump or move depends on uninitialised value Reviewed-by: Edward O'Callaghan --- diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 2f138dab19b..f5e114513e0 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -152,17 +152,19 @@ remove_old_cache_directories(void *mem_ctx, char *path, const char *timestamp) struct dirent* d_entry; while((d_entry = readdir(dir)) != NULL) { + char *full_path = + ralloc_asprintf(mem_ctx, "%s/%s", path, d_entry->d_name); + struct stat sb; - stat(d_entry->d_name, &sb); - if (S_ISDIR(sb.st_mode) && + if (stat(full_path, &sb) == 0 && S_ISDIR(sb.st_mode) && strcmp(d_entry->d_name, timestamp) != 0 && strcmp(d_entry->d_name, "..") != 0 && strcmp(d_entry->d_name, ".") != 0) { - char *full_path = - ralloc_asprintf(mem_ctx, "%s/%s", path, d_entry->d_name); nftw(full_path, remove_dir, 20, FTW_DEPTH); } } + + closedir(dir); } static char *