Browse Source

Fix Mono path utils char types.

bruvzg 5 years ago
parent
commit
82cd97b675
1 changed files with 16 additions and 6 deletions
  1. 16 6
      modules/mono/utils/path_utils.cpp

+ 16 - 6
modules/mono/utils/path_utils.cpp

@@ -54,12 +54,16 @@ String cwd() {
 #ifdef WINDOWS_ENABLED
 	const DWORD expected_size = ::GetCurrentDirectoryW(0, nullptr);
 
-	String buffer;
+	Char16String buffer;
 	buffer.resize((int)expected_size);
-	if (::GetCurrentDirectoryW(expected_size, buffer.ptrw()) == 0)
+	if (::GetCurrentDirectoryW(expected_size, (wchar_t *)buffer.ptrw()) == 0)
 		return ".";
 
-	return buffer.simplify_path();
+	String result;
+	if (result.parse_utf16(buffer.ptr())) {
+		return ".";
+	}
+	return result.simplify_path();
 #else
 	char buffer[PATH_MAX];
 	if (::getcwd(buffer, sizeof(buffer)) == nullptr) {
@@ -100,12 +104,18 @@ String realpath(const String &p_path) {
 		return p_path;
 	}
 
-	String buffer;
+	Char16String buffer;
 	buffer.resize((int)expected_size);
-	::GetFinalPathNameByHandleW(hFile, buffer.ptrw(), expected_size, FILE_NAME_NORMALIZED);
+	::GetFinalPathNameByHandleW(hFile, (wchar_t *)buffer.ptrw(), expected_size, FILE_NAME_NORMALIZED);
 
 	::CloseHandle(hFile);
-	return buffer.simplify_path();
+
+	String result;
+	if (result.parse_utf16(buffer.ptr())) {
+		return p_path;
+	}
+
+	return result.simplify_path();
 #elif UNIX_ENABLED
 	char *resolved_path = ::realpath(p_path.utf8().get_data(), nullptr);