From 9177074524f0b5a2b55726ec43ee64a14c4446d5 Mon Sep 17 00:00:00 2001 From: Grazvydas Ignotas Date: Tue, 21 Aug 2018 00:21:57 +0300 Subject: [PATCH] radv: use different builtin shader cache for 32bit 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 --- src/amd/vulkan/radv_meta.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c index b8d0a7cfc70..1ec8896afa2 100644 --- a/src/amd/vulkan/radv_meta.c +++ b/src/amd/vulkan/radv_meta.c @@ -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 -- 2.30.2