diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2022-05-27 16:13:55 +0200 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2022-05-27 16:13:55 +0200 |
commit | 08275a1569af7d925ff28ff0288d9779057d27a9 (patch) | |
tree | cdae3e1dd76938e6c318aa0a16354306756cfec6 /kernel | |
parent | 1822be8792865e3f6f0765693f93b8e85fcb279f (diff) | |
download | yosys-08275a1569af7d925ff28ff0288d9779057d27a9.tar.gz yosys-08275a1569af7d925ff28ff0288d9779057d27a9.tar.bz2 yosys-08275a1569af7d925ff28ff0288d9779057d27a9.zip |
Cleanup, and fix windows
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/yosys.cc | 61 |
1 files changed, 24 insertions, 37 deletions
diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 7f395761b..64d2b4def 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -376,64 +376,54 @@ int run_command(const std::string &command, std::function<void(const std::string } #endif -// POSIX defines `TMPDIR` as the pathname of the directory -// where programs can create temporary files. On most systems, -// it points to '/tmp'. However, on some systems it can be a different -// location -// Source: https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03 std::string get_base_tmpdir() { - // We cache the directory name in a static variable here - // for faster calls later static std::string tmpdir; if (!tmpdir.empty()) { return tmpdir; } +#if defined(_WIN32) +# ifdef __MINGW32__ + char longpath[MAX_PATH + 1]; + char shortpath[MAX_PATH + 1]; +# else + WCHAR longpath[MAX_PATH + 1]; + TCHAR shortpath[MAX_PATH + 1]; +# endif + if (!GetTempPath(MAX_PATH+1, longpath)) + log_error("GetTempPath() failed.\n"); + if (!GetShortPathName(longpath, shortpath, MAX_PATH + 1)) + log_error("GetShortPathName() failed.\n"); + for (int i = 0; shortpath[i]; i++) + tmpdir += char(shortpath[i]); +#else char * var = std::getenv("TMPDIR"); - if (NULL == var) { - // if the variable is not set, then use '/tmp' - tmpdir.assign("/tmp"); - } else { + if (var && strlen(var)!=0) { tmpdir.assign(var); // We return the directory name without the trailing '/' - if (tmpdir.back() == '/') { + while (!tmpdir.empty() && (tmpdir.back() == '/')) { tmpdir.pop_back(); } + } else { + tmpdir.assign("/tmp"); } +#endif return tmpdir; } std::string make_temp_file(std::string template_str) { -#if defined(__wasm) size_t pos = template_str.rfind("XXXXXX"); log_assert(pos != std::string::npos); +#if defined(__wasm) static size_t index = 0; template_str.replace(pos, 6, stringf("%06zu", index++)); #elif defined(_WIN32) - if (template_str.rfind(get_base_tmpdir() + "/", 0) == 0) { -# ifdef __MINGW32__ - char longpath[MAX_PATH + 1]; - char shortpath[MAX_PATH + 1]; -# else - WCHAR longpath[MAX_PATH + 1]; - TCHAR shortpath[MAX_PATH + 1]; -# endif - if (!GetTempPath(MAX_PATH+1, longpath)) - log_error("GetTempPath() failed.\n"); - if (!GetShortPathName(longpath, shortpath, MAX_PATH + 1)) - log_error("GetShortPathName() failed.\n"); - std::string path; - for (int i = 0; shortpath[i]; i++) - path += char(shortpath[i]); - template_str = stringf("%s\\%s", path.c_str(), template_str.c_str() + 5); - } - - size_t pos = template_str.rfind("XXXXXX"); - log_assert(pos != std::string::npos); - +#ifndef YOSYS_WIN32_UNIX_DIR + std::replace(template_str.begin(), template_str.end(), '/', '\\'); +#endif while (1) { for (int i = 0; i < 6; i++) { static std::string y = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -445,9 +435,6 @@ std::string make_temp_file(std::string template_str) break; } #else - size_t pos = template_str.rfind("XXXXXX"); - log_assert(pos != std::string::npos); - int suffixlen = GetSize(template_str) - pos - 6; char *p = strdup(template_str.c_str()); |