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);
 | 
			
		||||
  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);
 | 
			
		||||
    std::cout << "strerror:2: " << msg << std::endl;
 | 
			
		||||
    std::cout << "strerror: " << msg << std::endl;
 | 
			
		||||
    free(msg);
 | 
			
		||||
    exit(1);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,4 +53,5 @@ void check_ENOMEM(const char* msg);
 | 
			
		|||
 | 
			
		||||
static inline void breakpoint() { __builtin_trap(); }
 | 
			
		||||
 | 
			
		||||
#define AS_UTF8(ptr) ptr
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,4 +92,36 @@ inline static void breakpoint() { DebugBreak(); }
 | 
			
		|||
 | 
			
		||||
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