1 /* Copyright (c) 2014 Corinna Vinschen <corinna@vinschen.de> */
2 /*
3 FUNCTION
4 <<itoa>>---integer to string
5 
6 INDEX
7 	itoa
8 
9 SYNOPSIS
10 	#include <stdlib.h>
11 	char *itoa(int <[value]>, char *<[str]>, int <[base]>);
12 	char *__itoa(int <[value]>, char *<[str]>, int <[base]>);
13 
14 DESCRIPTION
15 <<itoa>> converts the integer <[value]> to a null-terminated string
16 using the specified base, which must be between 2 and 36, inclusive.
17 If <[base]> is 10, <[value]> is treated as signed and the string will be
18 prefixed with '-' if negative. For all other bases, <[value]> is treated as
19 unsigned. <[str]> should be an array long enough to contain the converted
20 value, which in the worst case is sizeof(int)*8+1 bytes.
21 
22 RETURNS
23 A pointer to the string, <[str]>, or NULL if <[base]> is invalid.
24 
25 PORTABILITY
26 <<itoa>> is non-ANSI.
27 
28 No supporting OS subroutine calls are required.
29 */
30 
31 #include <stdlib.h>
32 
33 char *
__itoa(int value,char * str,int base)34 __itoa (int value,
35         char *str,
36         int base)
37 {
38   unsigned uvalue;
39   int i = 0;
40 
41   /* Check base is supported. */
42   if ((base < 2) || (base > 36))
43     {
44       str[0] = '\0';
45       return NULL;
46     }
47 
48   /* Negative numbers are only supported for decimal.
49    * Cast to unsigned to avoid overflow for maximum negative value.  */
50   if ((base == 10) && (value < 0))
51     {
52       str[i++] = '-';
53       uvalue = (unsigned)-value;
54     }
55   else
56     uvalue = (unsigned)value;
57 
58   __utoa (uvalue, &str[i], base);
59   return str;
60 }
61 
62 char *
itoa(int value,char * str,int base)63 itoa (int value,
64         char *str,
65         int base)
66 {
67   return __itoa (value, str, base);
68 }
69