summaryrefslogtreecommitdiff
path: root/kernel/yosys.cc
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-10-17 15:51:33 +0200
committerClifford Wolf <clifford@clifford.at>2014-10-17 16:04:59 +0200
commitb3a6f8f53019d1984d4e319db459b11da0663aa3 (patch)
tree4f370d208bb86cfe681a0a054783ec7869c6ccf1 /kernel/yosys.cc
parent468ae923748a01b2763bafa3cf5fba883fe06479 (diff)
More win32 (mxe and vs) build fixes
Diffstat (limited to 'kernel/yosys.cc')
-rw-r--r--kernel/yosys.cc36
1 files changed, 28 insertions, 8 deletions
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index 26665e5b..7d1d273c 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -46,7 +46,7 @@
YOSYS_NAMESPACE_BEGIN
#if defined(_WIN32) && !defined(__MINGW32__)
-const char *yosys_version_str = "Windows";
+const char *yosys_version_str = "Yosys for Windows (Version Information Unavailable)";
#endif
int autoidx = 1;
@@ -210,9 +210,19 @@ std::string make_temp_file(std::string template_str)
{
#ifdef _WIN32
if (template_str.rfind("/tmp/", 0) == 0) {
- char path[MAX_PATH+1];
- GetTempPath(MAX_PATH+1, path);
- template_str = stringf("%s\\%s", path, template_str.c_str() + 5);
+# 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");
+ log_assert(sizeof(TCHAR) == sizeof(char));
+ template_str = stringf("%s\\%s", shortpath, template_str.c_str() + 5);
}
size_t pos = template_str.rfind("XXXXXX");
@@ -475,14 +485,24 @@ std::string proc_self_dirname()
#elif defined(_WIN32)
std::string proc_self_dirname()
{
- char longpath[MAX_PATH+1], shortpath[MAX_PATH+1];
+ int i = 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 (!GetModuleFileName(0, longpath, MAX_PATH+1))
log_error("GetModuleFileName() failed.\n");
if (!GetShortPathName(longpath, shortpath, MAX_PATH+1))
log_error("GetShortPathName() failed.\n");
- for (int i = strlen(shortpath)-1; i >= 0 && shortpath[i] != '/' && shortpath[i] != '\\' ; i--)
- shortpath[i] = 0;
- return std::string(shortpath);
+ while (shortpath[i] != 0)
+ i++;
+ while (i > 0 && shortpath[i-1] != '/' && shortpath[i-1] != '\\')
+ shortpath[--i] = 0;
+ log_assert(sizeof(TCHAR) == sizeof(char));
+ return std::string((char*)shortpath);
}
#elif defined(EMSCRIPTEN)
std::string proc_self_dirname()