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