From 949c4d27efdace391df50c274a1df439b6b32bb7 Mon Sep 17 00:00:00 2001 From: kice Date: Wed, 25 Dec 2019 16:42:03 -0500 Subject: [PATCH] Some Windows and MSVC fixes (#4569) * fix python exception creation in Windows * better string conversion for msvc * fix cpp style issue --- python/tvm/_ffi/base.py | 9 +++++++-- src/runtime/c_runtime_api.cc | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/python/tvm/_ffi/base.py b/python/tvm/_ffi/base.py index 6e7c8f9f3824..716091e96ed0 100644 --- a/python/tvm/_ffi/base.py +++ b/python/tvm/_ffi/base.py @@ -35,8 +35,13 @@ # this function is needed for python3 # to convert ctypes.char_p .value back to python str if sys.platform == "win32": - encoding = 'cp' + str(ctypes.cdll.kernel32.GetACP()) - py_str = lambda x: x.decode(encoding) + def _py_str(x): + try: + return x.decode('utf-8') + except UnicodeDecodeError: + encoding = 'cp' + str(ctypes.cdll.kernel32.GetACP()) + return x.decode(encoding) + py_str = _py_str else: py_str = lambda x: x.decode('utf-8') else: diff --git a/src/runtime/c_runtime_api.cc b/src/runtime/c_runtime_api.cc index 3608fcea4aa1..f1d543537e19 100644 --- a/src/runtime/c_runtime_api.cc +++ b/src/runtime/c_runtime_api.cc @@ -235,7 +235,14 @@ std::string NormalizeError(std::string err_msg) { if (!(is >> line)) return false; // get filename while (is.peek() == ' ') is.get(); +#ifdef _MSC_VER // handle volume separator ":" in Windows path + std::string drive; + if (!getline(is, drive, ':')) return false; if (!getline(is, file_name, ':')) return false; + file_name = drive + ":" + file_name; +#else + if (!getline(is, file_name, ':')) return false; +#endif // get line number if (!(is >> line_number)) return false; // get rest of the message.