[PATCH 2/3] msvcp: Implement the wchar version of _Read_dir.
Stefan Dösinger
stefan at codeweavers.com
Thu May 18 06:33:42 CDT 2017
Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
---
dlls/msvcp110/msvcp110.spec | 4 ++--
dlls/msvcp120/msvcp120.spec | 4 ++--
dlls/msvcp140/msvcp140.spec | 2 +-
dlls/msvcp90/ios.c | 28 +++++++++++++++++++++-------
4 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec
index 0627aed61f..4001b68190 100644
--- a/dlls/msvcp110/msvcp110.spec
+++ b/dlls/msvcp110/msvcp110.spec
@@ -1713,8 +1713,8 @@
@ cdecl ?_Random_device at std@@YAIXZ() _Random_device
@ cdecl -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPADPADPAXAAW4file_type at 123@@Z(ptr ptr ptr) tr2_sys__Read_dir
@ cdecl -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEADPEADPEAXAEAW4file_type at 123@@Z(ptr ptr ptr) tr2_sys__Read_dir
-@ stub -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPA_WPA_WPAXAAW4file_type at 123@@Z
-@ stub -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEA_WPEA_WPEAXAEAW4file_type at 123@@Z
+@ cdecl -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPA_WPA_WPAXAAW4file_type at 123@@Z(ptr ptr ptr) tr2_sys__Read_dir_wchar
+@ cdecl -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEA_WPEA_WPEAXAEAW4file_type at 123@@Z(ptr ptr ptr) tr2_sys__Read_dir_wchar
@ cdecl -arch=arm ?_Release at _Pad@std@@QAAXXZ(ptr) _Pad__Release
@ thiscall -arch=i386 ?_Release at _Pad@std@@QAEXXZ(ptr) _Pad__Release
@ cdecl -arch=win64 ?_Release at _Pad@std@@QEAAXXZ(ptr) _Pad__Release
diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec
index a2b82cbc25..7cd3514df2 100644
--- a/dlls/msvcp120/msvcp120.spec
+++ b/dlls/msvcp120/msvcp120.spec
@@ -1674,8 +1674,8 @@
@ cdecl ?_Random_device at std@@YAIXZ() _Random_device
@ cdecl -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPADAAY0BAE at DPAXAAW4file_type@123@@Z(ptr ptr ptr) tr2_sys__Read_dir
@ cdecl -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEADAEAY0BAE at DPEAXAEAW4file_type@123@@Z(ptr ptr ptr) tr2_sys__Read_dir
-@ stub -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPA_WAAY0BAE at _WPAXAAW4file_type@123@@Z
-@ stub -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEA_WAEAY0BAE at _WPEAXAEAW4file_type@123@@Z
+@ cdecl -arch=win32 ?_Read_dir at sys@tr2 at std@@YAPA_WAAY0BAE at _WPAXAAW4file_type@123@@Z(ptr ptr ptr) tr2_sys__Read_dir_wchar
+@ cdecl -arch=win64 ?_Read_dir at sys@tr2 at std@@YAPEA_WAEAY0BAE at _WPEAXAEAW4file_type@123@@Z(ptr ptr ptr) tr2_sys__Read_dir_wchar
@ cdecl -arch=arm ?_Release at _Pad@std@@QAAXXZ(ptr) _Pad__Release
@ thiscall -arch=i386 ?_Release at _Pad@std@@QAEXXZ(ptr) _Pad__Release
@ cdecl -arch=win64 ?_Release at _Pad@std@@QEAAXXZ(ptr) _Pad__Release
diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec
index faf0578de9..d5cedf9cbd 100644
--- a/dlls/msvcp140/msvcp140.spec
+++ b/dlls/msvcp140/msvcp140.spec
@@ -3692,7 +3692,7 @@
@ cdecl _Open_dir(ptr wstr long long) tr2_sys__Open_dir_wchar
@ cdecl -ret64 _Query_perf_counter()
@ cdecl -ret64 _Query_perf_frequency()
-@ stub _Read_dir
+@ cdecl _Read_dir(ptr ptr ptr) tr2_sys__Read_dir_wchar
@ stub _Remove_dir
@ stub _Rename
@ stub _Resize
diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c
index f78618c294..a14306ed80 100644
--- a/dlls/msvcp90/ios.c
+++ b/dlls/msvcp90/ios.c
@@ -14968,23 +14968,25 @@ void* __cdecl tr2_sys__Open_dir(char* target, char const* dest, int* err_code, e
return handle;
}
-/* ?_Read_dir at sys@tr2 at std@@YAPADAAY0BAE at DPAXAAW4file_type@123@@Z */
-/* ?_Read_dir at sys@tr2 at std@@YAPEADAEAY0BAE at DPEAXAEAW4file_type@123@@Z */
-char* __cdecl tr2_sys__Read_dir(char* target, void* handle, enum file_type* type)
+/* ??_Read_dir at sys@tr2 at std@@YAPA_WPA_WPAXAAW4file_type at 123@@Z */
+/* ??_Read_dir at sys@tr2 at std@@YAPEA_WPEA_WPEAXAEAW4file_type at 123@@Z */
+wchar_t* __cdecl tr2_sys__Read_dir_wchar(wchar_t* target, void* handle, enum file_type* type)
{
- WIN32_FIND_DATAA data;
+ WIN32_FIND_DATAW data;
+ static const wchar_t dot[] = {'.', 0};
+ static const wchar_t dotdot[] = {'.', '.', 0};
TRACE("(%p %p %p)\n", target, handle, type);
do {
- if(!FindNextFileA(handle, &data)) {
+ if(!FindNextFileW(handle, &data)) {
*type = status_unknown;
*target = '\0';
return target;
}
- } while(!strcmp(data.cFileName, ".") || !strcmp(data.cFileName, ".."));
+ } while(!wcscmp(data.cFileName, dot) || !wcscmp(data.cFileName, dotdot));
- strcpy(target, data.cFileName);
+ wcscpy(target, data.cFileName);
if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
*type = directory_file;
else
@@ -14992,6 +14994,18 @@ char* __cdecl tr2_sys__Read_dir(char* target, void* handle, enum file_type* type
return target;
}
+/* ?_Read_dir at sys@tr2 at std@@YAPADAAY0BAE at DPAXAAW4file_type@123@@Z */
+/* ?_Read_dir at sys@tr2 at std@@YAPEADAEAY0BAE at DPEAXAEAW4file_type@123@@Z */
+char* __cdecl tr2_sys__Read_dir(char* target, void* handle, enum file_type* type)
+{
+ wchar_t target_w[MAX_PATH];
+
+ tr2_sys__Read_dir_wchar(target_w, handle, type);
+ WideCharToMultiByte(CP_ACP, 0, target_w, -1, target, wcslen(target_w) + 1, NULL, NULL);
+
+ return target;
+}
+
/* ?_Close_dir at sys@tr2 at std@@YAXPAX at Z */
/* ?_Close_dir at sys@tr2 at std@@YAXPEAX at Z */
void __cdecl tr2_sys__Close_dir(void* handle)
--
2.13.0
More information about the wine-patches
mailing list