/programs/develop/libraries/menuetlibc/src/libc/compat/stdlib/itoa.c |
---|
0,0 → 1,46 |
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ |
#include <errno.h> |
#include <stdlib.h> |
char * |
itoa(int value, char *string, int radix) |
{ |
char tmp[33]; |
char *tp = tmp; |
int i; |
unsigned v; |
int sign; |
char *sp; |
if (radix > 36 || radix <= 1) |
{ |
errno = EDOM; |
return 0; |
} |
sign = (radix == 10 && value < 0); |
if (sign) |
v = -value; |
else |
v = (unsigned)value; |
while (v || tp == tmp) |
{ |
i = v % radix; |
v = v / radix; |
if (i < 10) |
*tp++ = i+'0'; |
else |
*tp++ = i + 'a' - 10; |
} |
if (string == 0) |
string = (char *)malloc((tp-tmp)+sign+1); |
sp = string; |
if (sign) |
*sp++ = '-'; |
while (tp > tmp) |
*sp++ = *--tp; |
*sp = 0; |
return string; |
} |