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