YongHao Hu : msvcp110: Add tr2_sys__File_size_wchar implementation and test.
Module: wine Branch: master Commit: 589a54bb8488b80f517168503d3c5d0ecd033445 URL: http://source.winehq.org/git/wine.git/?a=commit;h=589a54bb8488b80f517168503d... Author: YongHao Hu <christopherwuy(a)gmail.com> Date: Mon Aug 10 14:37:25 2015 +0800 msvcp110: Add tr2_sys__File_size_wchar implementation and test. --- dlls/msvcp110/msvcp110.spec | 4 ++-- dlls/msvcp120/msvcp120.spec | 4 ++-- dlls/msvcp120/tests/msvcp120.c | 14 +++++++++++--- dlls/msvcp120_app/msvcp120_app.spec | 4 ++-- dlls/msvcp90/ios.c | 17 ++++++++++++++++- 5 files changed, 33 insertions(+), 10 deletions(-) diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec index c5d438a..858af32 100644 --- a/dlls/msvcp110/msvcp110.spec +++ b/dlls/msvcp110/msvcp110.spec @@ -1208,8 +1208,8 @@ @ cdecl -arch=win64 ?_Ffmt@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@AEBAPEADPEADDH(a)Z(ptr ptr long long) num_put_wchar__Ffmt @ cdecl -ret64 -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z(str) tr2_sys__File_size @ cdecl -ret64 -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z(str) tr2_sys__File_size -@ stub -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z -@ stub -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z +@ cdecl -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z(wstr) tr2_sys__File_size_wchar +@ cdecl -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z(wstr) tr2_sys__File_size_wchar @ cdecl -arch=arm ?_Findarr(a)ios_base@std@@AAAAAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr @ thiscall -arch=i386 ?_Findarr(a)ios_base@std@@AAEAAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr @ cdecl -arch=win64 ?_Findarr(a)ios_base@std@@AEAAAEAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec index e9a7217..430690c 100644 --- a/dlls/msvcp120/msvcp120.spec +++ b/dlls/msvcp120/msvcp120.spec @@ -1173,8 +1173,8 @@ @ cdecl -arch=win64 ?_Ffmt@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@AEBAPEADPEADDH(a)Z(ptr ptr long long) num_put_wchar__Ffmt @ cdecl -ret64 -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z(str) tr2_sys__File_size @ cdecl -ret64 -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z(str) tr2_sys__File_size -@ stub -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z -@ stub -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z +@ cdecl -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z(wstr) tr2_sys__File_size_wchar +@ cdecl -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z(wstr) tr2_sys__File_size_wchar @ cdecl -arch=arm ?_Findarr(a)ios_base@std@@AAAAAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr @ thiscall -arch=i386 ?_Findarr(a)ios_base@std@@AAEAAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr @ cdecl -arch=win64 ?_Findarr(a)ios_base@std@@AEAAAEAU_Iosarray(a)12@H(a)Z(ptr long) ios_base_Findarr diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c index 1a53bee..f2fdd92 100644 --- a/dlls/msvcp120/tests/msvcp120.c +++ b/dlls/msvcp120/tests/msvcp120.c @@ -73,6 +73,7 @@ static void (CDECL *p__Do_call)(void *this); /* filesystem */ static ULONGLONG(__cdecl *p_tr2_sys__File_size)(char const*); +static ULONGLONG(__cdecl *p_tr2_sys__File_size_wchar)(WCHAR const*); static int (__cdecl *p_tr2_sys__Equivalent)(char const*, char const*); static char* (__cdecl *p_tr2_sys__Current_get)(char *); static MSVCP_bool (__cdecl *p_tr2_sys__Current_set)(char const*); @@ -113,6 +114,8 @@ static BOOL init(void) if(sizeof(void*) == 8) { /* 64-bit initialization */ SET(p_tr2_sys__File_size, "?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z"); + SET(p_tr2_sys__File_size_wchar, + "?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z"); SET(p_tr2_sys__Equivalent, "?_Equivalent(a)sys@tr2(a)std@@YAHPEBD0(a)Z"); SET(p_tr2_sys__Current_get, @@ -136,6 +139,8 @@ static BOOL init(void) } else { SET(p_tr2_sys__File_size, "?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z"); + SET(p_tr2_sys__File_size_wchar, + "?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z"); SET(p_tr2_sys__Equivalent, "?_Equivalent(a)sys@tr2(a)std@@YAHPBD0(a)Z"); SET(p_tr2_sys__Current_get, @@ -367,6 +372,7 @@ static void test_tr2_sys__File_size(void) ULONGLONG val; HANDLE file; LARGE_INTEGER file_size; + WCHAR testW[] = {'t','r','2','_','t','e','s','t','_','d','i','r','/','f','1',0}; CreateDirectoryA("tr2_test_dir", NULL); file = CreateFileA("tr2_test_dir/f1", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); @@ -377,6 +383,8 @@ static void test_tr2_sys__File_size(void) CloseHandle(file); val = p_tr2_sys__File_size("tr2_test_dir/f1"); ok(val == 7, "file_size is %s\n", debugstr_longlong(val)); + val = p_tr2_sys__File_size_wchar(testW); + ok(val == 7, "file_size is %s\n", debugstr_longlong(val)); file = CreateFileA("tr2_test_dir/f2", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); ok(file != INVALID_HANDLE_VALUE, "create file failed: INVALID_HANDLE_VALUE\n"); @@ -397,9 +405,9 @@ static void test_tr2_sys__File_size(void) ok(val == 0, "file_size is %s\n", debugstr_longlong(val)); ok(errno == 0xdeadbeef, "errno = %d\n", errno); - ok(DeleteFileA("tr2_test_dir/f1"), "Expected tr2_test_dir/f1 to exist\n"); - ok(DeleteFileA("tr2_test_dir/f2"), "Expected tr2_test_dir/f2 to exist\n"); - ok(RemoveDirectoryA("tr2_test_dir"), "Expected tr2_test_dir to exist\n"); + ok(DeleteFileA("tr2_test_dir/f1"), "expect tr2_test_dir/f1 to exist\n"); + ok(DeleteFileA("tr2_test_dir/f2"), "expect tr2_test_dir/f2 to exist\n"); + ok(RemoveDirectoryA("tr2_test_dir"), "expect tr2_test_dir to exist\n"); } static void test_tr2_sys__Equivalent(void) diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec index 53dd548..04585c1 100644 --- a/dlls/msvcp120_app/msvcp120_app.spec +++ b/dlls/msvcp120_app/msvcp120_app.spec @@ -1173,8 +1173,8 @@ @ cdecl -arch=win64 ?_Ffmt@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@AEBAPEADPEADDH(a)Z(ptr ptr long long) msvcp120.?_Ffmt@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@AEBAPEADPEADDH(a)Z @ cdecl -ret64 -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z(str) msvcp120.?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z @ cdecl -ret64 -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z(str) msvcp120.?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z -@ stub -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z -@ stub -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z +@ cdecl -arch=win32 ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z(wstr) msvcp120.?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z +@ cdecl -arch=win64 ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z(wstr) msvcp120.?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z @ cdecl -arch=arm ?_Findarr(a)ios_base@std@@AAAAAU_Iosarray(a)12@H(a)Z(ptr long) msvcp120.?_Findarr(a)ios_base@std@@AAAAAU_Iosarray(a)12@H(a)Z @ thiscall -arch=i386 ?_Findarr(a)ios_base@std@@AAEAAU_Iosarray(a)12@H(a)Z(ptr long) msvcp120.?_Findarr(a)ios_base@std@@AAEAAU_Iosarray(a)12@H(a)Z @ cdecl -arch=win64 ?_Findarr(a)ios_base@std@@AEAAAEAU_Iosarray(a)12@H(a)Z(ptr long) msvcp120.?_Findarr(a)ios_base@std@@AEAAAEAU_Iosarray(a)12@H(a)Z diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 006b787..49a3e4b 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -14204,7 +14204,7 @@ basic_ostream_char* __cdecl basic_ostream_char_print_complex_ldouble(basic_ostre /* ?_File_size(a)sys@tr2(a)std@@YA_KPBD(a)Z */ /* ?_File_size(a)sys@tr2(a)std@@YA_KPEBD(a)Z */ -ULONGLONG __cdecl tr2_sys__File_size(const char* path) +ULONGLONG __cdecl tr2_sys__File_size(char const* path) { WIN32_FILE_ATTRIBUTE_DATA fad; @@ -14739,6 +14739,21 @@ void* __thiscall _Winit_ctor(void *this) return this; } +/* ?_File_size(a)sys@tr2(a)std@@YA_KPB_W(a)Z */ +/* ?_File_size(a)sys@tr2(a)std@@YA_KPEB_W(a)Z */ +ULONGLONG __cdecl tr2_sys__File_size_wchar(WCHAR const* path) +{ + WIN32_FILE_ATTRIBUTE_DATA fad; + + TRACE("(%s)\n", debugstr_w(path)); + if(!GetFileAttributesExW(path, GetFileExInfoStandard, &fad)) + return 0; + if(fad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + return 0; + + return ((ULONGLONG)(fad.nFileSizeHigh) << 32) + fad.nFileSizeLow; +} + /* ??1_Winit(a)std@@QAE(a)XZ */ /* ??1_Winit(a)std@@QAE(a)XZ */ DEFINE_THISCALL_WRAPPER(_Winit_dtor, 4)
participants (1)
-
Alexandre Julliard