Alexandre Julliard : msvcrt: Use the msvcrt atoi() function internally.

Alexandre Julliard julliard at winehq.org
Wed Nov 18 15:48:01 CST 2020


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Nov 18 16:04:09 2020 +0100

msvcrt: Use the msvcrt atoi() function internally.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/locale.c  | 52 +++++++++++++++++++++++++--------------------------
 dlls/msvcrt/msvcrt.h  |  1 +
 dlls/msvcrt/string.c  |  2 +-
 dlls/msvcrt/undname.c |  4 ++--
 4 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c
index 37c4afcf786..32f2c9b4624 100644
--- a/dlls/msvcrt/locale.c
+++ b/dlls/msvcrt/locale.c
@@ -357,7 +357,7 @@ LCID MSVCRT_locale_to_LCID(const char *locale, unsigned short *codepage, BOOL *s
         locale_cp = CP_UTF8;
 #endif
     } else {
-        locale_cp = atoi(cp + 1);
+        locale_cp = MSVCRT_atoi(cp + 1);
     }
     if (!IsValidCodePage(locale_cp))
         return -1;
@@ -1118,7 +1118,7 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
     LCID lcid[6] = { 0 };
     unsigned short cp[6] = { 0 };
     const char *locale_name[6] = { 0 };
-    int locale_len[6] = { 0 };
+    int val, locale_len[6] = { 0 };
     char buf[256];
     BOOL sname;
 #if _MSVCR_VER >= 100
@@ -1437,65 +1437,65 @@ static MSVCRT_pthreadlocinfo create_locinfo(int category,
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IINTLCURRDIGITS
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->int_frac_digits = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_IINTLCURRDIGITS
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->int_frac_digits = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_ICURRDIGITS
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->frac_digits = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_ICURRDIGITS
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->frac_digits = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSYMPRECEDES
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->p_cs_precedes = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSYMPRECEDES
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->p_cs_precedes = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSEPBYSPACE
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->p_sep_by_space = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSEPBYSPACE
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->p_sep_by_space = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSYMPRECEDES
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->n_cs_precedes = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSYMPRECEDES
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->n_cs_precedes = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSEPBYSPACE
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->n_sep_by_space = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSEPBYSPACE
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->n_sep_by_space = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSIGNPOSN
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->p_sign_posn = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_IPOSSIGNPOSN
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->p_sign_posn = val;
         else {
             free_locinfo(locinfo);
             return NULL;
         }
 
-        if(GetLocaleInfoA(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSIGNPOSN
-                    |LOCALE_NOUSEROVERRIDE, buf, 256))
-            locinfo->lconv->n_sign_posn = atoi(buf);
+        if(GetLocaleInfoW(lcid[MSVCRT_LC_MONETARY], LOCALE_INEGSIGNPOSN
+                          |LOCALE_NOUSEROVERRIDE|LOCALE_RETURN_NUMBER, (WCHAR *)&val, 2))
+            locinfo->lconv->n_sign_posn = val;
         else {
             free_locinfo(locinfo);
             return NULL;
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index ab5b4c13f85..7c9e3137e14 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -1072,6 +1072,7 @@ void* __cdecl    MSVCRT_malloc(MSVCRT_size_t);
 void* __cdecl    MSVCRT_calloc(MSVCRT_size_t,MSVCRT_size_t);
 void* __cdecl    MSVCRT_realloc(void*,MSVCRT_size_t);
 
+int __cdecl      MSVCRT_atoi(const char *str);
 int __cdecl      MSVCRT_isalpha(int c);
 int __cdecl      MSVCRT_isdigit(int c);
 int __cdecl      MSVCRT_isspace(int c);
diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index 5a11eb1312b..d08687244b4 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -2441,7 +2441,7 @@ int CDECL MSVCRT_I10_OUTPUT(MSVCRT__LDOUBLE ld80, int prec, int flag, struct _I1
     MSVCRT_sprintf(buf, format, d);
 
     buf[1] = buf[0];
-    data->pos = atoi(buf+prec+3);
+    data->pos = MSVCRT_atoi(buf+prec+3);
     if(buf[1] != '0')
         data->pos++;
 
diff --git a/dlls/msvcrt/undname.c b/dlls/msvcrt/undname.c
index 23317f49605..8f8557dcea5 100644
--- a/dlls/msvcrt/undname.c
+++ b/dlls/msvcrt/undname.c
@@ -469,7 +469,7 @@ static BOOL get_modified_type(struct datatype_t *ct, struct parsed_symbol* sym,
 
             sym->current++;
             if (!(n1 = get_number(sym))) return FALSE;
-            num = atoi(n1);
+            num = MSVCRT_atoi(n1);
 
             if (str_modif[0] == ' ' && !modifier)
                 str_modif++;
@@ -1007,7 +1007,7 @@ static BOOL demangle_datatype(struct parsed_symbol* sym, struct datatype_t* ct,
 
                     sym->current++;
                     if (!(n1 = get_number(sym))) goto done;
-                    num = atoi(n1);
+                    num = MSVCRT_atoi(n1);
 
                     while (num--)
                         arr = str_printf(sym, "%s[%s]", arr, get_number(sym));




More information about the wine-cvs mailing list