3 /* Based on Wine Staging 1.7.37 - dlls/msvcrt/string.c */
5 /*********************************************************************
6 * _strtoi64_l (MSVCRT.@)
8 * FIXME: locale parameter is ignored
10 __int64 CDECL
strtoi64_l(const char *nptr
, char **endptr
, int base
, _locale_t locale
)
12 BOOL negative
= FALSE
;
16 TRACE("(%s %p %d %p)\n", debugstr_a(nptr
), endptr
, base
, locale
);
19 if (!MSVCRT_CHECK_PMT(nptr
!= NULL
)) return 0;
20 if (!MSVCRT_CHECK_PMT(base
== 0 || base
>= 2)) return 0;
21 if (!MSVCRT_CHECK_PMT(base
<= 36)) return 0;
23 while(isspace(*nptr
)) nptr
++;
28 } else if(*nptr
== '+')
31 if((base
==0 || base
==16) && *nptr
=='0' && tolower(*(nptr
+1))=='x') {
44 char cur
= tolower(*nptr
);
52 if(cur
<'a' || cur
>='a'+base
-10)
62 if(!negative
&& (ret
>_I64_MAX
/base
|| ret
*base
>_I64_MAX
-v
)) {
67 } else if(negative
&& (ret
<_I64_MIN
/base
|| ret
*base
<_I64_MIN
-v
)) {
77 *endptr
= (char*)nptr
;
82 /******************************************************************
83 * _strtoul_l (MSVCRT.@)
85 unsigned long CDECL
strtoul_l(const char* nptr
, char** end
, int base
, _locale_t locale
)
87 __int64 ret
= strtoi64_l(nptr
, end
, base
, locale
);
94 }else if(ret
< -(__int64
)ULONG_MAX
) {
104 /******************************************************************
107 unsigned long CDECL
strtoul(const char* nptr
, char** end
, int base
)
109 return strtoul_l(nptr
, end
, base
, NULL
);