Piotr Caban : ucrtbase: Fix _Syserror_map behavior on unknown error.

Alexandre Julliard julliard at winehq.org
Tue Feb 2 15:52:09 CST 2021


Module: wine
Branch: master
Commit: b54ab691a7a484b7ce3d38b2d77088fb8f946257
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b54ab691a7a484b7ce3d38b2d77088fb8f946257

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Feb  2 18:13:11 2021 +0100

ucrtbase: Fix _Syserror_map behavior on unknown error.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50407
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcp120/tests/msvcp120.c | 14 ++++++++++++++
 dlls/msvcp140/tests/msvcp140.c | 15 +++++++++++++++
 dlls/msvcp90/misc.c            |  4 ++++
 3 files changed, 33 insertions(+)

diff --git a/dlls/msvcp120/tests/msvcp120.c b/dlls/msvcp120/tests/msvcp120.c
index 54d959b694c..35e90cfa29c 100644
--- a/dlls/msvcp120/tests/msvcp120.c
+++ b/dlls/msvcp120/tests/msvcp120.c
@@ -216,6 +216,7 @@ static void (CDECL *p__Do_call)(void *this);
 static short (__cdecl *p__Dtest)(double *d);
 static short (__cdecl *p__Dscale)(double *d, int exp);
 static short (__cdecl *p__FExp)(float *x, float y, int exp);
+static const char* (__cdecl *p__Syserror_map)(int err);
 
 /* filesystem */
 static ULONGLONG(__cdecl *p_tr2_sys__File_size)(char const*);
@@ -575,6 +576,8 @@ static BOOL init(void)
                 "?_Internal_reserve at _Concurrent_vector_base_v4@details at Concurrency@@IEAAX_K00 at Z");
         SET(p_vector_base_v4__Internal_resize,
                 "?_Internal_resize at _Concurrent_vector_base_v4@details at Concurrency@@IEAAX_K00P6AXPEAX0 at ZP6AX1PEBX0@Z3 at Z");
+        SET(p__Syserror_map,
+                "?_Syserror_map at std@@YAPEBDH at Z");
     } else {
         SET(p_tr2_sys__File_size,
                 "?_File_size at sys@tr2 at std@@YA_KPBD at Z");
@@ -648,6 +651,8 @@ static BOOL init(void)
                 "?_Mtx_unlock at threads@stdext@@YAXPAX at Z");
         SET(p_vector_base_v4__Segment_index_of,
                 "?_Segment_index_of at _Concurrent_vector_base_v4@details at Concurrency@@KAII at Z");
+        SET(p__Syserror_map,
+                "?_Syserror_map at std@@YAPBDH at Z");
 #ifdef __i386__
         SET(p_i386_Thrd_current,
                 "_Thrd_current");
@@ -1170,6 +1175,14 @@ static void test__FExp(void)
     ok(ret == FP_NORMAL, "ret = %x\n", ret);
 }
 
+static void test__Syserror_map(void)
+{
+    const char *r;
+
+    r = p__Syserror_map(0);
+    ok(!r, "_Syserror_map(0) returned %p\n", r);
+}
+
 static void test_tr2_sys__File_size(void)
 {
     ULONGLONG val;
@@ -3306,6 +3319,7 @@ START_TEST(msvcp120)
     test__Dtest();
     test__Dscale();
     test__FExp();
+    test__Syserror_map();
 
     test_tr2_sys__File_size();
     test_tr2_sys__Equivalent();
diff --git a/dlls/msvcp140/tests/msvcp140.c b/dlls/msvcp140/tests/msvcp140.c
index ae21feaf9e4..8a3771842a0 100644
--- a/dlls/msvcp140/tests/msvcp140.c
+++ b/dlls/msvcp140/tests/msvcp140.c
@@ -196,6 +196,7 @@ 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 int (__cdecl *p__Winerror_map)(int);
+static const char* (__cdecl *p__Syserror_map)(int err);
 
 static BOOLEAN (WINAPI *pCreateSymbolicLinkW)(const WCHAR *, const WCHAR *, DWORD);
 
@@ -234,6 +235,7 @@ static BOOL init(void)
         SET(p__Reschedule_chore, "?_Reschedule_chore at details@Concurrency@@YAHPEBU_Threadpool_chore at 12@@Z");
         SET(p__Release_chore, "?_Release_chore at details@Concurrency@@YAXPEAU_Threadpool_chore at 12@@Z");
         SET(p__Winerror_message, "?_Winerror_message at std@@YAKKPEADK at Z");
+        SET(p__Syserror_map, "?_Syserror_map at std@@YAPEBDH at Z");
     } else {
 #ifdef __arm__
         SET(p_task_continuation_context_ctor, "??0task_continuation_context at Concurrency@@AAA at XZ");
@@ -264,6 +266,7 @@ static BOOL init(void)
         SET(p__Reschedule_chore, "?_Reschedule_chore at details@Concurrency@@YAHPBU_Threadpool_chore at 12@@Z");
         SET(p__Release_chore, "?_Release_chore at details@Concurrency@@YAXPAU_Threadpool_chore at 12@@Z");
         SET(p__Winerror_message, "?_Winerror_message at std@@YAKKPADK at Z");
+        SET(p__Syserror_map, "?_Syserror_map at std@@YAPBDH at Z");
     }
 
     SET(p_Close_dir, "_Close_dir");
@@ -1314,6 +1317,17 @@ static void test__Winerror_map(void)
     }
 }
 
+static void test__Syserror_map(void)
+{
+    const char *r1, *r2;
+
+    r1 = p__Syserror_map(0);
+    ok(r1 != NULL, "_Syserror_map(0) returned NULL\n");
+    r2 = p__Syserror_map(1234);
+    ok(r2 != NULL, "_Syserror_map(1234) returned NULL\n");
+    ok(r1 == r2, "r1 = %p(%s), r2 = %p(%s)\n", r1, r1, r2, r2);
+}
+
 static void test_Equivalent(void)
 {
     int val, i;
@@ -1391,6 +1405,7 @@ START_TEST(msvcp140)
     test_Last_write_time();
     test__Winerror_message();
     test__Winerror_map();
+    test__Syserror_map();
     test_Equivalent();
     FreeLibrary(msvcp);
 }
diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c
index 76f730c2344..f70de9e5600 100644
--- a/dlls/msvcp90/misc.c
+++ b/dlls/msvcp90/misc.c
@@ -2864,7 +2864,11 @@ const char* __cdecl _Syserror_map(int err)
         if(syserror_map[i].err == err)
             return syserror_map[i].str;
     }
+#if _MSVCP_VER >= 140
+    return "unknown error";
+#else
     return NULL;
+#endif
 }
 #endif
 




More information about the wine-cvs mailing list