update for HEAD-2003021201
[reactos.git] / lib / msvcrt / stdlib / witow.c
1 /* $Id$
2  *
3  * COPYRIGHT:   See COPYING in the top level directory
4  * PROJECT:     ReactOS system libraries
5  * FILE:        lib/msvcrt/stdlib/itow.c
6  * PURPOSE:     converts a integer to wchar_t
7  * PROGRAMER:   
8  * UPDATE HISTORY:
9  *              1995: Created
10  *              1998: Added ltoa Boudewijn Dekker
11  *              2000: derived from ./itoa.c by ea
12  */
13 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
14
15 #include <msvcrt/errno.h>
16 #include <msvcrt/stdlib.h>
17 #include <msvcrt/internal/file.h>
18
19
20 wchar_t* _i64tow(__int64 value, wchar_t* string, int radix)
21 {
22   wchar_t tmp[65];
23   wchar_t* tp = tmp;
24   int i;
25   unsigned v;
26   int sign;
27   wchar_t* sp;
28
29   if (radix > 36 || radix <= 1) {
30     __set_errno(EDOM);
31     return 0;
32   }
33
34   sign = (radix == 10 && value < 0);
35   if (sign)
36     v = -value;
37   else
38     v = (unsigned)value;
39   while (v || tp == tmp) {
40     i = v % radix;
41     v = v / radix;
42     if (i < 10)
43       *tp++ = i+L'0';
44     else
45       *tp++ = i + L'a' - 10;
46   }
47
48   if (string == 0)
49     string = (wchar_t*)malloc(((tp-tmp)+sign+1)*sizeof(wchar_t));
50   sp = string;
51
52   if (sign)
53     *sp++ = L'-';
54   while (tp > tmp)
55     *sp++ = *--tp;
56   *sp = 0;
57   return string;
58 }
59
60 wchar_t* _ui64tow(unsigned __int64 value, wchar_t* string, int radix)
61 {
62   wchar_t tmp[65];
63   wchar_t* tp = tmp;
64   long i;
65   unsigned long v = value;
66   wchar_t* sp;
67
68   if (radix > 36 || radix <= 1) {
69     __set_errno(EDOM);
70     return 0;
71   }
72
73   while (v || tp == tmp) {
74     i = v % radix;
75     v = v / radix;
76     if (i < 10)
77       *tp++ = i+L'0';
78     else
79       *tp++ = i + L'a' - 10;
80   }
81
82   if (string == 0)
83     string = (wchar_t*)malloc(((tp-tmp)+1)*sizeof(wchar_t));
84   sp = string;
85
86   while (tp > tmp)
87     *sp++ = *--tp;
88   *sp = 0;
89   return string;
90 }