:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / lib / crtdll / wchar / wcstol.c
1 #include <crtdll/wchar.h>
2
3
4 long wcstol(const wchar_t *cp,wchar_t **endp,int base)
5 {
6         long result = 0,value;
7         int sign = 1;
8
9         if ( *cp == L'-' ) {
10                 sign = -1;
11                 cp++;
12         }
13
14         if (!base) {
15                 base = 10;
16                 if (*cp == L'0') {
17                         base = 8;
18                         cp++;
19                         if ((*cp == L'x') && iswxdigit(cp[1])) {
20                                 cp++;
21                                 base = 16;
22                         }
23                 }
24         }
25         while (iswxdigit(*cp) && (value = iswdigit(*cp) ? *cp-L'0' : (iswlower(*cp)
26             ? towupper(*cp) : *cp)-L'A'+10) < base) {
27                 result = result*base + value;
28                 cp++;
29         }
30         if (endp)
31                 *endp = (wchar_t *)cp;
32         return result * sign;
33 }
34
35
36 unsigned long wcstoul(const wchar_t *cp,wchar_t **endp,int base)
37 {
38         unsigned long result = 0,value;
39
40         if (!base) {
41                 base = 10;
42                 if (*cp == L'0') {
43                         base = 8;
44                         cp++;
45                         if ((*cp == L'x') && iswxdigit(cp[1])) {
46                                 cp++;
47                                 base = 16;
48                         }
49                 }
50         }
51         while (iswxdigit(*cp) && (value = iswdigit(*cp) ? *cp-L'0' : (iswlower(*cp)
52             ? towupper(*cp) : *cp)-L'A'+10) < base) {
53                 result = result*base + value;
54                 cp++;
55         }
56         if (endp)
57                 *endp = (wchar_t *)cp;
58         return result;
59 }
60