diff --git a/gfx/drivers_shader/glslang_util.cpp b/gfx/drivers_shader/glslang_util.cpp index 9d5c7d046e..19d8380e4b 100644 --- a/gfx/drivers_shader/glslang_util.cpp +++ b/gfx/drivers_shader/glslang_util.cpp @@ -46,15 +46,26 @@ bool glslang_read_shader_file(const char *path, vector *output, bool roo char *buf = nullptr; int64_t len = 0; const char *basename = path_basename(path); + size_t path_size = PATH_MAX_LENGTH * sizeof(char); + char *tmp_path = (char*)malloc(path_size); include_path[0] = tmp[0] = '\0'; - if (!filestream_read_file(path, (void**)&buf, &len)) + strlcpy(tmp_path, path, path_size); + path_resolve_realpath(tmp_path, path_size); + + if (!path_is_valid(tmp_path)) + strlcpy(tmp_path, path, path_size); + + if (!filestream_read_file(tmp_path, (void**)&buf, &len)) { - RARCH_ERR("Failed to open shader file: \"%s\".\n", path); + RARCH_ERR("Failed to open shader file: \"%s\".\n", tmp_path); + free(tmp_path); return false; } + free(tmp_path); + /* Remove Windows \r chars if we encounter them. * filestream_read_file() allocates one extra for 0 terminator. */ auto itr = remove_if(buf, buf + len + 1, [](char c) {