ReactOS 0.4.16-dev-2300-g249be9e
wtoi64.c File Reference
#include <precomp.h>
Include dependency graph for wtoi64.c:

Go to the source code of this file.

Functions

__int64 CDECL _wtoi64_l (const wchar_t *str, _locale_t locale)
 
__int64 CDECL _wtoi64 (const wchar_t *str)
 
__int64 CDECL _wcstoi64_l (const wchar_t *nptr, wchar_t **endptr, int base, _locale_t locale)
 
__int64 CDECL _wcstoi64 (const wchar_t *nptr, wchar_t **endptr, int base)
 
unsigned __int64 CDECL _wcstoui64_l (const wchar_t *nptr, wchar_t **endptr, int base, _locale_t locale)
 
unsigned __int64 CDECL _wcstoui64 (const wchar_t *nptr, wchar_t **endptr, int base)
 

Function Documentation

◆ _wcstoi64()

__int64 CDECL _wcstoi64 ( const wchar_t nptr,
wchar_t **  endptr,
int  base 
)

Definition at line 120 of file wtoi64.c.

122{
123 return _wcstoi64_l(nptr, endptr, base, NULL);
124}
#define NULL
Definition: types.h:112
__int64 CDECL _wcstoi64_l(const wchar_t *nptr, wchar_t **endptr, int base, _locale_t locale)
Definition: wtoi64.c:44

◆ _wcstoi64_l()

__int64 CDECL _wcstoi64_l ( const wchar_t nptr,
wchar_t **  endptr,
int  base,
_locale_t  locale 
)

Definition at line 44 of file wtoi64.c.

46{
47 BOOL negative = FALSE;
48 __int64 ret = 0;
49
50#ifndef _LIBCNT_
51 TRACE("(%s %p %d %p)\n", debugstr_w(nptr), endptr, base, locale);
52#endif
53
54 if (!MSVCRT_CHECK_PMT(nptr != NULL)) return 0;
55 if (!MSVCRT_CHECK_PMT(base == 0 || base >= 2)) return 0;
56 if (!MSVCRT_CHECK_PMT(base <= 36)) return 0;
57
58 while (iswctype((int)*nptr, _SPACE)) nptr++;
59
60 if(*nptr == '-') {
61 negative = TRUE;
62 nptr++;
63 } else if(*nptr == '+')
64 nptr++;
65
66 if((base==0 || base==16) && *nptr=='0' && towlower(*(nptr+1))=='x') {
67 base = 16;
68 nptr += 2;
69 }
70
71 if(base == 0) {
72 if(*nptr=='0')
73 base = 8;
74 else
75 base = 10;
76 }
77
78 while(*nptr) {
79 wchar_t cur = towlower(*nptr);
80 int v;
81
82 if(cur>='0' && cur<='9') {
83 if(cur >= '0'+base)
84 break;
85 v = cur-'0';
86 } else {
87 if(cur<'a' || cur>='a'+base-10)
88 break;
89 v = cur-'a'+10;
90 }
91
92 if(negative)
93 v = -v;
94
95 nptr++;
96
97 if(!negative && (ret>_I64_MAX/base || ret*base>_I64_MAX-v)) {
98 ret = _I64_MAX;
99#ifndef _LIBCNT_
100 *_errno() = ERANGE;
101#endif
102 } else if(negative && (ret<_I64_MIN/base || ret*base<_I64_MIN-v)) {
103 ret = _I64_MIN;
104#ifndef _LIBCNT_
105 *_errno() = ERANGE;
106#endif
107 } else
108 ret = ret*base + v;
109 }
110
111 if(endptr)
112 *endptr = (wchar_t*)nptr;
113
114 return ret;
115}
Definition: _locale.h:75
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
int *CDECL _errno(void)
Definition: errno.c:215
#define __int64
Definition: corecrt.h:72
#define _SPACE
#define ERANGE
Definition: errno.h:55
#define _I64_MAX
Definition: limits.h:37
#define _I64_MIN
Definition: limits.h:38
#define MSVCRT_CHECK_PMT(x)
Definition: msvcrt.h:378
return ret
Definition: mutex.c:146
unsigned int BOOL
Definition: ntddk_ex.h:94
int __cdecl iswctype(wint_t wc, wctype_t wctypeFlags)
Definition: freeldr.c:165
FxCollectionEntry * cur
const GLdouble * v
Definition: gl.h:2040
#define debugstr_w
Definition: kernel32.h:32
#define towlower(c)
Definition: wctype.h:97
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by _wcstoi64().

◆ _wcstoui64()

unsigned __int64 CDECL _wcstoui64 ( const wchar_t nptr,
wchar_t **  endptr,
int  base 
)

Definition at line 199 of file wtoi64.c.

201{
202 return _wcstoui64_l(nptr, endptr, base, NULL);
203}
unsigned __int64 CDECL _wcstoui64_l(const wchar_t *nptr, wchar_t **endptr, int base, _locale_t locale)
Definition: wtoi64.c:131

◆ _wcstoui64_l()

unsigned __int64 CDECL _wcstoui64_l ( const wchar_t nptr,
wchar_t **  endptr,
int  base,
_locale_t  locale 
)

Definition at line 131 of file wtoi64.c.

133{
134 BOOL negative = FALSE;
135 unsigned __int64 ret = 0;
136
137#ifndef _LIBCNT_
138 TRACE("(%s %p %d %p)\n", debugstr_w(nptr), endptr, base, locale);
139#endif
140
141 if (!MSVCRT_CHECK_PMT(nptr != NULL)) return 0;
142 if (!MSVCRT_CHECK_PMT(base == 0 || base >= 2)) return 0;
143 if (!MSVCRT_CHECK_PMT(base <= 36)) return 0;
144
145 while (iswctype((int)*nptr, _SPACE)) nptr++;
146
147 if(*nptr == '-') {
148 negative = TRUE;
149 nptr++;
150 } else if(*nptr == '+')
151 nptr++;
152
153 if((base==0 || base==16) && *nptr=='0' && towlower(*(nptr+1))=='x') {
154 base = 16;
155 nptr += 2;
156 }
157
158 if(base == 0) {
159 if(*nptr=='0')
160 base = 8;
161 else
162 base = 10;
163 }
164
165 while(*nptr) {
166 wchar_t cur = towlower(*nptr);
167 int v;
168
169 if(cur>='0' && cur<='9') {
170 if(cur >= '0'+base)
171 break;
172 v = *nptr-'0';
173 } else {
174 if(cur<'a' || cur>='a'+base-10)
175 break;
176 v = cur-'a'+10;
177 }
178
179 nptr++;
180
182 ret = _UI64_MAX;
183#ifndef _LIBCNT_
184 *_errno() = ERANGE;
185#endif
186 } else
187 ret = ret*base + v;
188 }
189
190 if(endptr)
191 *endptr = (wchar_t*)nptr;
192
193 return negative ? -(__int64)ret : ret;
194}
#define _UI64_MAX
Definition: limits.h:39

Referenced by _wcstoui64().

◆ _wtoi64()

__int64 CDECL _wtoi64 ( const wchar_t str)

Definition at line 33 of file wtoi64.c.

34{
35 return _wtoi64_l(str, NULL);
36}
const WCHAR * str
__int64 CDECL _wtoi64_l(const wchar_t *str, _locale_t locale)
Definition: wtoi64.c:6

◆ _wtoi64_l()

__int64 CDECL _wtoi64_l ( const wchar_t str,
_locale_t  locale 
)

Definition at line 6 of file wtoi64.c.

7{
8 LONGLONG RunningTotal = 0;
9 BOOL bMinus = FALSE;
10
11 while (iswctype((int)*str, _SPACE)) {
12 str++;
13 } /* while */
14
15 if (*str == '+') {
16 str++;
17 } else if (*str == '-') {
18 bMinus = TRUE;
19 str++;
20 } /* if */
21
22 while (*str >= '0' && *str <= '9') {
23 RunningTotal = RunningTotal * 10 + *str - '0';
24 str++;
25 } /* while */
26
27 return bMinus ? -RunningTotal : RunningTotal;
28}
int64_t LONGLONG
Definition: typedefs.h:68

Referenced by _wtoi64().