d2cb3ecb9471beb5753444d6b6c49f544f58743d
[reactos.git] / reactos / lib / sdk / crt / string / 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 by Ariadne
11 * 2000: derived from ./itoa.c by ea
12 */
13 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
14
15 #include <precomp.h>
16
17 /*
18 * @implemented
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 /*
61 * @implemented
62 */
63 wchar_t* _ui64tow(unsigned __int64 value, wchar_t* string, int radix)
64 {
65 wchar_t tmp[65];
66 wchar_t* tp = tmp;
67 long i;
68 unsigned long v = value;
69 wchar_t* sp;
70
71 if (radix > 36 || radix <= 1) {
72 _set_errno(EDOM);
73 return 0;
74 }
75
76 while (v || tp == tmp) {
77 i = v % radix;
78 v = v / radix;
79 if (i < 10)
80 *tp++ = i+L'0';
81 else
82 *tp++ = i + L'a' - 10;
83 }
84
85 if (string == 0)
86 string = (wchar_t*)malloc(((tp-tmp)+1)*sizeof(wchar_t));
87 sp = string;
88
89 while (tp > tmp)
90 *sp++ = *--tp;
91 *sp = 0;
92 return string;
93 }