diff --git a/util/test/demos/linux/linux_platform.cpp b/util/test/demos/linux/linux_platform.cpp index 636c344d3..8c8367432 100644 --- a/util/test/demos/linux/linux_platform.cpp +++ b/util/test/demos/linux/linux_platform.cpp @@ -51,7 +51,10 @@ std::string GetEnvVar(const char *var) return ""; } -void tmpnam_via_mkstemp(char (&buf)[MAX_PATH]) +std::string GetExecutableFilename() { - snprintf(buf, MAX_PATH - 1, "/tmp/rdoc_tmp_%x", rand()); + char path[512] = {0}; + readlink("/proc/self/exe", path, 511); + + return path; } diff --git a/util/test/demos/linux/linux_platform.h b/util/test/demos/linux/linux_platform.h index c3529929a..9af5f6235 100644 --- a/util/test/demos/linux/linux_platform.h +++ b/util/test/demos/linux/linux_platform.h @@ -36,6 +36,4 @@ #define EXECUTABLE_SUFFIX "" -#define get_tmpnam tmpnam_via_mkstemp - -void tmpnam_via_mkstemp(char (&buf)[MAX_PATH]); +std::string GetExecutableName(); diff --git a/util/test/demos/test_common.cpp b/util/test/demos/test_common.cpp index c51b2124a..b5f04480c 100644 --- a/util/test/demos/test_common.cpp +++ b/util/test/demos/test_common.cpp @@ -348,10 +348,14 @@ std::vector CompileShaderToSpv(const std::string &source_text, SPIRVTa std::string command_line; - char infile[MAX_PATH] = {}; - char outfile[MAX_PATH] = {}; - get_tmpnam(infile); - get_tmpnam(outfile); + std::string path = GetExecutableName(); + path.erase(path.find_last_of("/\\")); + path += "/tmp"; + + mkdir(path.c_str()); + + std::string infile = path + "/input"; + std::string outfile = path + "/output"; if(externalCompiler == "glslc") { @@ -382,7 +386,7 @@ std::vector CompileShaderToSpv(const std::string &source_text, SPIRVTa } else { - strcat(infile, ".spvasm"); + infile += ".spvasm"; } if(target == SPIRVTarget::opengl) @@ -440,7 +444,7 @@ std::vector CompileShaderToSpv(const std::string &source_text, SPIRVTa command_line += infile; } - FILE *f = fopen(infile, "wb"); + FILE *f = fopen(infile.c_str(), "wb"); if(f) { fwrite(source_text.c_str(), 1, source_text.size(), f); @@ -465,7 +469,7 @@ std::vector CompileShaderToSpv(const std::string &source_text, SPIRVTa return ret; } - f = fopen(outfile, "rb"); + f = fopen(outfile.c_str(), "rb"); if(f) { fseek(f, 0, SEEK_END); @@ -475,8 +479,8 @@ std::vector CompileShaderToSpv(const std::string &source_text, SPIRVTa fclose(f); } - unlink(infile); - unlink(outfile); + unlink(infile.c_str()); + unlink(outfile.c_str()); return ret; } diff --git a/util/test/demos/win32/win32_platform.cpp b/util/test/demos/win32/win32_platform.cpp index 8f8f5abd7..8a3864675 100644 --- a/util/test/demos/win32/win32_platform.cpp +++ b/util/test/demos/win32/win32_platform.cpp @@ -100,3 +100,11 @@ std::string GetEnvVar(const char *var) return ""; } + +std::string GetExecutableName() +{ + wchar_t curFile[512] = {0}; + GetModuleFileNameW(NULL, curFile, 511); + + return Wide2UTF8(curFile); +} diff --git a/util/test/demos/win32/win32_platform.h b/util/test/demos/win32/win32_platform.h index 8d215b904..0badf04e3 100644 --- a/util/test/demos/win32/win32_platform.h +++ b/util/test/demos/win32/win32_platform.h @@ -34,6 +34,8 @@ std::string Wide2UTF8(const std::wstring &s); std::wstring UTF82Wide(const std::string &s); +std::string GetExecutableName(); + #define DEBUG_BREAK() \ do \ { \ @@ -44,10 +46,10 @@ std::wstring UTF82Wide(const std::string &s); #define popen _popen #define pclose _pclose -#define get_tmpnam tmpnam_s - #define msleep(time) Sleep(time) +#define mkdir(dir) CreateDirectoryA(dir, NULL) + #define WEXITSTATUS(code) code #define EXECUTABLE_SUFFIX ".exe"