Piotr Caban : msvcp140: Added _Winerror_message implementation.
Module: wine Branch: master Commit: c69eba9278597935a3a3eb75071a40e7a63fd7aa URL: https://source.winehq.org/git/wine.git/?a=commit;h=c69eba9278597935a3a3eb750... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Oct 3 18:49:43 2018 +0200 msvcp140: Added _Winerror_message implementation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp140/msvcp140.spec | 4 ++-- dlls/msvcp140/tests/msvcp140.c | 23 +++++++++++++++++++++++ dlls/msvcp90/misc.c | 12 ++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 29d0e19..296d06c 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -1670,8 +1670,8 @@ @ stub -arch=i386 ?_W_Gettnames(a)_Locinfo@std@@QBE?AV_Timevec(a)2@XZ @ stub -arch=win64 ?_W_Gettnames(a)_Locinfo@std@@QEBA?AV_Timevec(a)2@XZ @ stub ?_Winerror_map(a)std@@YAHH(a)Z -@ stub -arch=win32 ?_Winerror_message(a)std@@YAKKPADK(a)Z -@ stub -arch=win64 ?_Winerror_message(a)std@@YAKKPEADK(a)Z +@ cdecl -arch=win32 ?_Winerror_message(a)std@@YAKKPADK(a)Z(long ptr long) _Winerror_message +@ cdecl -arch=win64 ?_Winerror_message(a)std@@YAKKPEADK(a)Z(long ptr long) _Winerror_message @ stub ?_XGetLastError(a)std@@YAXXZ @ stub ?_XLgamma(a)std@@YAMM(a)Z @ stub ?_XLgamma(a)std@@YANN(a)Z diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c index 03350d3..a3f9211 100644 --- a/dlls/msvcp140/tests/msvcp140.c +++ b/dlls/msvcp140/tests/msvcp140.c @@ -191,6 +191,7 @@ static WCHAR* (__cdecl *p_Temp_get)(WCHAR *); static int (__cdecl *p_To_byte)(const WCHAR *src, char *dst); static int (__cdecl *p_To_wide)(const char *src, WCHAR *dst); static int (__cdecl *p_Unlink)(WCHAR const*); +static ULONG (__cdecl *p__Winerror_message)(ULONG, char*, ULONG); static BOOLEAN (WINAPI *pCreateSymbolicLinkW)(const WCHAR *, const WCHAR *, DWORD); @@ -227,6 +228,7 @@ static BOOL init(void) SET(p__Schedule_chore, "?_Schedule_chore(a)details@Concurrency@@YAHPEAU_Threadpool_chore(a)12@@Z"); SET(p__Reschedule_chore, "?_Reschedule_chore(a)details@Concurrency@@YAHPEBU_Threadpool_chore(a)12@@Z"); SET(p__Release_chore, "?_Release_chore(a)details@Concurrency@@YAXPEAU_Threadpool_chore(a)12@@Z"); + SET(p__Winerror_message, "?_Winerror_message(a)std@@YAKKPEADK(a)Z"); } else { #ifdef __arm__ SET(p_task_continuation_context_ctor, "??0task_continuation_context(a)Concurrency@@AAA(a)XZ"); @@ -256,6 +258,7 @@ static BOOL init(void) SET(p__Schedule_chore, "?_Schedule_chore(a)details@Concurrency@@YAHPAU_Threadpool_chore(a)12@@Z"); SET(p__Reschedule_chore, "?_Reschedule_chore(a)details@Concurrency@@YAHPBU_Threadpool_chore(a)12@@Z"); SET(p__Release_chore, "?_Release_chore(a)details@Concurrency@@YAXPAU_Threadpool_chore(a)12@@Z"); + SET(p__Winerror_message, "?_Winerror_message(a)std@@YAKKPADK(a)Z"); } SET(p_Close_dir, "_Close_dir"); @@ -1281,6 +1284,25 @@ static void test_Last_write_time(void) ok(SetCurrentDirectoryW(origin_path), "SetCurrentDirectoryW to origin_path failed\n"); } +static void test__Winerror_message(void) +{ + char buf[256], buf_fm[256]; + ULONG ret, ret_fm; + + ret_fm = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, 0, 0, buf_fm, sizeof(buf_fm), NULL); + + memset(buf, 'a', sizeof(buf)); + ret = p__Winerror_message(0, buf, sizeof(buf)); + ok(ret == ret_fm, "ret = %u, expected %u\n", ret, ret_fm); + ok(!strcmp(buf, buf_fm), "buf = %s, expected %s\n", buf, buf_fm); + + memset(buf, 'a', sizeof(buf)); + ret = p__Winerror_message(0, buf, 2); + ok(!ret, "ret = %u\n", ret); + ok(buf[0] == 'a', "buf = %s\n", buf); +} + START_TEST(msvcp140) { if(!init()) return; @@ -1302,5 +1324,6 @@ START_TEST(msvcp140) test_Temp_get(); test_Rename(); test_Last_write_time(); + test__Winerror_message(); FreeLibrary(msvcp); } diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index ef02129..ae7a129 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -2790,3 +2790,15 @@ const char* __cdecl _Syserror_map(int err) return NULL; } #endif + +#if _MSVCP_VER >= 140 +/* ?_Winerror_message(a)std@@YAKKPADK(a)Z */ +/* ?_Winerror_message(a)std@@YAKKPEADK(a)Z */ +ULONG __cdecl _Winerror_message(ULONG err, char *buf, ULONG size) +{ + TRACE("(%u %p %u)\n", err, buf, size); + + return FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, err, 0, buf, size, NULL); +} +#endif
participants (1)
-
Alexandre Julliard