Piotr Caban : msvcp90: Depend on compiler to handle returning struct in _Getctype.

Alexandre Julliard julliard at winehq.org
Thu May 20 16:09:06 CDT 2021


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu May 20 21:37:26 2021 +0200

msvcp90: Depend on compiler to handle returning struct in _Getctype.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcp100/msvcp100.spec         |  2 +-
 dlls/msvcp110/msvcp110.spec         |  2 +-
 dlls/msvcp120/msvcp120.spec         |  2 +-
 dlls/msvcp120_app/msvcp120_app.spec |  2 +-
 dlls/msvcp140/msvcp140.spec         |  2 +-
 dlls/msvcp60/msvcp60.spec           |  2 +-
 dlls/msvcp70/msvcp70.spec           |  2 +-
 dlls/msvcp71/msvcp71.spec           |  2 +-
 dlls/msvcp80/msvcp80.spec           |  2 +-
 dlls/msvcp90/locale.c               | 22 ++++++++++++----------
 dlls/msvcp90/msvcp90.spec           |  2 +-
 dlls/msvcp90/tests/misc.c           |  6 +++---
 12 files changed, 25 insertions(+), 23 deletions(-)

diff --git a/dlls/msvcp100/msvcp100.spec b/dlls/msvcp100/msvcp100.spec
index 1fc93b05438..c0a4910eb4b 100644
--- a/dlls/msvcp100/msvcp100.spec
+++ b/dlls/msvcp100/msvcp100.spec
@@ -2916,7 +2916,7 @@
 # extern _FXbig
 @ stub _GetLocaleForCP
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp110/msvcp110.spec b/dlls/msvcp110/msvcp110.spec
index aeab529d69a..33f93c9e8cf 100644
--- a/dlls/msvcp110/msvcp110.spec
+++ b/dlls/msvcp110/msvcp110.spec
@@ -3779,7 +3779,7 @@
 @ stub _FXp_subx
 # extern _FZero
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp120/msvcp120.spec b/dlls/msvcp120/msvcp120.spec
index 0b1cb92f8ce..9dfe0b186c5 100644
--- a/dlls/msvcp120/msvcp120.spec
+++ b/dlls/msvcp120/msvcp120.spec
@@ -3722,7 +3722,7 @@
 @ stub _FXp_subx
 # extern _FZero
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp120_app/msvcp120_app.spec b/dlls/msvcp120_app/msvcp120_app.spec
index eefb9762708..e9ff7256419 100644
--- a/dlls/msvcp120_app/msvcp120_app.spec
+++ b/dlls/msvcp120_app/msvcp120_app.spec
@@ -3722,7 +3722,7 @@
 @ stub _FXp_subx
 # extern _FZero
 @ cdecl -norelay _Getcoll() msvcp120._Getcoll
-@ cdecl _Getctype(ptr) msvcp120._Getctype
+@ cdecl -norelay _Getctype() msvcp120._Getctype
 @ cdecl -norelay _Getcvt() msvcp120._Getcvt
 @ cdecl _Getdateorder() msvcp120._Getdateorder
 @ cdecl _Getwctype(long ptr) msvcp120._Getwctype
diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec
index d2cb4dbed8c..343571ae401 100644
--- a/dlls/msvcp140/msvcp140.spec
+++ b/dlls/msvcp140/msvcp140.spec
@@ -3650,7 +3650,7 @@
 @ extern _FSnan
 @ cdecl _File_size(wstr)
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp60/msvcp60.spec b/dlls/msvcp60/msvcp60.spec
index de7aafa73b7..c616a10b4a4 100644
--- a/dlls/msvcp60/msvcp60.spec
+++ b/dlls/msvcp60/msvcp60.spec
@@ -4275,7 +4275,7 @@
 @ extern _FSnan _FSnan
 # extern _FXbig
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ extern _Hugeval _Hugeval
 @ extern _Inf _Inf
diff --git a/dlls/msvcp70/msvcp70.spec b/dlls/msvcp70/msvcp70.spec
index d1a152ff0e3..a35949e15fb 100644
--- a/dlls/msvcp70/msvcp70.spec
+++ b/dlls/msvcp70/msvcp70.spec
@@ -5062,7 +5062,7 @@
 # extern _FXbig
 # extern _FZero
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ extern _Hugeval
 @ extern _Inf
diff --git a/dlls/msvcp71/msvcp71.spec b/dlls/msvcp71/msvcp71.spec
index 6176c9be2df..41c8bb01a9c 100644
--- a/dlls/msvcp71/msvcp71.spec
+++ b/dlls/msvcp71/msvcp71.spec
@@ -5116,7 +5116,7 @@
 # extern _FXbig
 # extern _FZero
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getwctype(long ptr)
 @ cdecl _Getwctypes(ptr ptr ptr ptr)
diff --git a/dlls/msvcp80/msvcp80.spec b/dlls/msvcp80/msvcp80.spec
index f450286505a..020e8d26fc7 100644
--- a/dlls/msvcp80/msvcp80.spec
+++ b/dlls/msvcp80/msvcp80.spec
@@ -5725,7 +5725,7 @@
 @ extern _FSnan
 # extern _FXbig
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 2f6c103b2a2..ea0729cf4f9 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -698,8 +698,9 @@ _Collvec* __thiscall _Locinfo__Getcoll(const _Locinfo *this, _Collvec *ret)
 }
 
 /* _Getctype */
-_Ctypevec* __cdecl _Getctype(_Ctypevec *ret)
+_Ctypevec __cdecl _Getctype(void)
 {
+    _Ctypevec ret;
     short *table;
 #if _MSVCP_VER >= 110
     wchar_t *name;
@@ -708,24 +709,24 @@ _Ctypevec* __cdecl _Getctype(_Ctypevec *ret)
 
     TRACE("\n");
 
-    ret->page = ___lc_codepage_func();
+    ret.page = ___lc_codepage_func();
 #if _MSVCP_VER < 110
-    ret->handle = ___lc_handle_func()[LC_COLLATE];
+    ret.handle = ___lc_handle_func()[LC_COLLATE];
 #else
     if((name = ___lc_locale_name_func()[LC_COLLATE])) {
         size = wcslen(name)+1;
-        ret->name = malloc(size*sizeof(*name));
-        if(!ret->name) throw_exception(EXCEPTION_BAD_ALLOC, NULL);
-        memcpy(ret->name, name, size*sizeof(*name));
+        ret.name = malloc(size*sizeof(*name));
+        if(!ret.name) throw_exception(EXCEPTION_BAD_ALLOC, NULL);
+        memcpy(ret.name, name, size*sizeof(*name));
     } else {
-        ret->name = NULL;
+        ret.name = NULL;
     }
 #endif
-    ret->delfl = TRUE;
+    ret.delfl = TRUE;
     table = malloc(sizeof(short[256]));
     if(!table) throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     memcpy(table, __pctype_func(), sizeof(short[256]));
-    ret->table = table;
+    ret.table = table;
     return ret;
 }
 
@@ -734,7 +735,8 @@ _Ctypevec* __cdecl _Getctype(_Ctypevec *ret)
 DEFINE_THISCALL_WRAPPER(_Locinfo__Getctype, 8)
 _Ctypevec* __thiscall _Locinfo__Getctype(const _Locinfo *this, _Ctypevec *ret)
 {
-    return _Getctype(ret);
+    *ret = _Getctype();
+    return ret;
 }
 
 /* _Getcvt */
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 15b16ed7f12..1e79400e469 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -6501,7 +6501,7 @@
 @ extern _FSnan
 # extern _FXbig
 @ cdecl -norelay _Getcoll()
-@ cdecl _Getctype(ptr)
+@ cdecl -norelay _Getctype()
 @ cdecl -norelay _Getcvt()
 @ cdecl _Getdateorder()
 @ cdecl _Getwctype(long ptr)
diff --git a/dlls/msvcp90/tests/misc.c b/dlls/msvcp90/tests/misc.c
index 546f10f6858..40858bc5594 100644
--- a/dlls/msvcp90/tests/misc.c
+++ b/dlls/msvcp90/tests/misc.c
@@ -100,7 +100,7 @@ static BYTE (__cdecl *p_short_eq)(const void*, const void*);
 static char* (__cdecl *p_Copy_s)(char*, size_t, const char*, size_t);
 
 static unsigned short (__cdecl *p_wctype)(const char*);
-static MSVCP__Ctypevec* (__cdecl *p__Getctype)(MSVCP__Ctypevec*);
+static MSVCP__Ctypevec (__cdecl *p__Getctype)(void);
 static MSVCP__Collvec (__cdecl *p__Getcoll)(void);
 static wctrans_t (__cdecl *p_wctrans)(const char*);
 static wint_t (__cdecl *p_towctrans)(wint_t, wctrans_t);
@@ -584,7 +584,7 @@ static void test__Getctype(void)
     MSVCP__Ctypevec ret;
     _locale_t locale;
 
-    ok(p__Getctype(&ret) == &ret, "__Getctype returned incorrect pointer\n");
+    ret = p__Getctype();
     ok(ret.handle == 0, "ret.handle = %d\n", ret.handle);
     ok(ret.page == 0, "ret.page = %d\n", ret.page);
     ok(ret.delfl == 1, "ret.delfl = %d\n", ret.delfl);
@@ -594,7 +594,7 @@ static void test__Getctype(void)
     locale = p__get_current_locale();
     locale->locinfo->lc_handle[LC_COLLATE] = 0x1234567;
     p__free_locale(locale);
-    ok(p__Getctype(&ret) == &ret, "__Getctype returned incorrect pointer\n");
+    ret = p__Getctype();
     ok(ret.handle == 0x1234567, "ret.handle = %d\n", ret.handle);
     ok(ret.page == 0, "ret.page = %d\n", ret.page);
     ok(ret.delfl == 1, "ret.delfl = %d\n", ret.delfl);




More information about the wine-cvs mailing list