radv: use different builtin shader cache for 32bit
authorGrazvydas Ignotas <notasas@gmail.com>
Mon, 20 Aug 2018 21:21:57 +0000 (00:21 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Wed, 22 Aug 2018 21:34:32 +0000 (00:34 +0300)
Currently if 64bit and 32bit programs are used interchangeably, radv
will keep overwriting the cache. Use separate cache files to avoid
that.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_meta.c

index b8d0a7cfc705b563c64ac5b5f1c96b5e66d5f958..1ec8896afa26d64a1641d5fb6609cfecc1fa2e3b 100644 (file)
@@ -234,15 +234,12 @@ radv_builtin_cache_path(char *path)
        const char *suffix2 = "/.cache/radv_builtin_shaders";
        struct passwd pwd, *result;
        char path2[PATH_MAX + 1]; /* PATH_MAX is not a real max,but suffices here. */
+       int ret;
 
        if (xdg_cache_home) {
-
-               if (strlen(xdg_cache_home) + strlen(suffix) > PATH_MAX)
-                       return false;
-
-               strcpy(path, xdg_cache_home);
-               strcat(path, suffix);
-               return true;
+               ret = snprintf(path, PATH_MAX + 1, "%s%s%zd",
+                              xdg_cache_home, suffix, sizeof(void *) * 8);
+               return ret > 0 && ret < PATH_MAX + 1;
        }
 
        getpwuid_r(getuid(), &pwd, path2, PATH_MAX - strlen(suffix2), &result);
@@ -253,8 +250,9 @@ radv_builtin_cache_path(char *path)
        strcat(path, "/.cache");
        mkdir(path, 0755);
 
-       strcat(path, suffix);
-       return true;
+       ret = snprintf(path, PATH_MAX + 1, "%s%s%zd",
+                      pwd.pw_dir, suffix2, sizeof(void *) * 8);
+       return ret > 0 && ret < PATH_MAX + 1;
 }
 
 static bool