vm: Add AS_UTF and use it to print wchar_t in Windows terminal.
There may be more places to add AS_UTF8 calls--anywhere that prints a wchar_t string in the Windows vm. Fixes #992.master
parent
34029cf1e4
commit
fe83a4a164
|
@ -232,9 +232,9 @@ void factor_vm::load_image(vm_parameters* p) {
|
||||||
|
|
||||||
FILE* file = OPEN_READ(p->image_path);
|
FILE* file = OPEN_READ(p->image_path);
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
std::cout << "Cannot open image file: " << p->image_path << std::endl;
|
std::cout << "Cannot open image file: " << AS_UTF8(p->image_path) << std::endl;
|
||||||
char *msg = threadsafe_strerror(errno);
|
char *msg = threadsafe_strerror(errno);
|
||||||
std::cout << "strerror:2: " << msg << std::endl;
|
std::cout << "strerror: " << msg << std::endl;
|
||||||
free(msg);
|
free(msg);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,4 +53,5 @@ void check_ENOMEM(const char* msg);
|
||||||
|
|
||||||
static inline void breakpoint() { __builtin_trap(); }
|
static inline void breakpoint() { __builtin_trap(); }
|
||||||
|
|
||||||
|
#define AS_UTF8(ptr) ptr
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,4 +92,36 @@ inline static void breakpoint() { DebugBreak(); }
|
||||||
|
|
||||||
extern HANDLE boot_thread;
|
extern HANDLE boot_thread;
|
||||||
|
|
||||||
|
inline static std::string to_utf8(const wchar_t* buffer, int len) {
|
||||||
|
int nChars = ::WideCharToMultiByte(
|
||||||
|
CP_UTF8,
|
||||||
|
0,
|
||||||
|
buffer,
|
||||||
|
len,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
if (nChars == 0) return "";
|
||||||
|
|
||||||
|
std::string newbuffer;
|
||||||
|
newbuffer.resize(nChars) ;
|
||||||
|
::WideCharToMultiByte(
|
||||||
|
CP_UTF8,
|
||||||
|
0,
|
||||||
|
buffer,
|
||||||
|
len,
|
||||||
|
const_cast<char*>(newbuffer.c_str()),
|
||||||
|
nChars,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
|
return newbuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static std::string to_utf8(const std::wstring& str) {
|
||||||
|
return to_utf8(str.c_str(), (int)str.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
#define AS_UTF8(ptr) to_utf8(ptr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue