update for HEAD-2003091401
[reactos.git] / lib / msvcrt / stdlib / wcstol.c
1 #include <msvcrt/stdlib.h>
2
3
4 /*
5  * @implemented
6  */
7 long wcstol(const wchar_t *cp,wchar_t **endp,int base)
8 {
9         long result = 0,value;
10         int sign = 1;
11
12         if ( *cp == L'-' ) {
13                 sign = -1;
14                 cp++;
15         }
16
17         if (!base) {
18                 base = 10;
19                 if (*cp == L'0') {
20                         base = 8;
21                         cp++;
22                         if ((*cp == L'x') && iswxdigit(cp[1])) {
23                                 cp++;
24                                 base = 16;
25                         }
26                 }
27         }
28         while (iswxdigit(*cp) && (value = iswdigit(*cp) ? *cp-L'0' : (iswlower(*cp)
29             ? towupper(*cp) : *cp)-L'A'+10) < base) {
30                 result = result*base + value;
31                 cp++;
32         }
33         if (endp)
34                 *endp = (wchar_t *)cp;
35         return result * sign;
36 }