diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2014-12-16 10:55:17 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2014-12-16 10:55:17 +0000 |
commit | 32c96ddd14acadc82e7fccf110367ec3c8320c85 (patch) | |
tree | fdaf1181e21438f85ab0991cd246d6fa513cfc32 /newlib/libc/stdlib/itoa.c | |
parent | 21f22726c77917d98d9cbe01f05843fdd7189df9 (diff) | |
download | cygnal-32c96ddd14acadc82e7fccf110367ec3c8320c85.tar.gz cygnal-32c96ddd14acadc82e7fccf110367ec3c8320c85.tar.bz2 cygnal-32c96ddd14acadc82e7fccf110367ec3c8320c85.zip |
* libc/include/stdlib.h (__itoa): Declare prototype.
(__utoa): Ditto.
(itoa): Ditto, non-strict-ANSI only.
(utoa): Ditto.
* libc/stdlib/Makefile.am: Add itoa.c and utoa.c.
* libc/stdlib/Makefile.in: Regenerate.
* libc/stdlib/itoa.c: New file.
* libc/stdlib/utoa.c: New file.
Diffstat (limited to 'newlib/libc/stdlib/itoa.c')
-rw-r--r-- | newlib/libc/stdlib/itoa.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/newlib/libc/stdlib/itoa.c b/newlib/libc/stdlib/itoa.c new file mode 100644 index 000000000..c7c9b8871 --- /dev/null +++ b/newlib/libc/stdlib/itoa.c @@ -0,0 +1,69 @@ +/* +FUNCTION +<<itoa>>---integer to string + +INDEX + itoa + +ANSI_SYNOPSIS + #include <stdlib.h> + char *itoa(int <[value]>, char *<[str]>, int <[base]>); + char *__itoa(int <[value]>, char *<[str]>, int <[base]>); + +DESCRIPTION +<<itoa>> converts the integer [<value>] to a null-terminated string +using the specified base, which must be between 2 and 36, inclusive. +If <[base]> is 10, <[value]> is treated as signed and the string will be +prefixed with '-' if negative. For all other bases, <[value]> is treated as +unsigned. <[str]> should be an array long enough to contain the converted +value, which in the worst case is sizeof(int)*8+1 bytes. + +RETURNS +A pointer to the string, <[str]>, or NULL if <[base]> is invalid. + +PORTABILITY +<<itoa>> is non-ANSI. + +No supporting OS subroutine calls are required. +*/ + +#include <stdlib.h> + +char * +_DEFUN (__itoa, (value, str, base), + int value _AND + char *str _AND + int base) +{ + unsigned uvalue; + int i = 0; + + /* Check base is supported. */ + if ((base < 2) || (base > 36)) + { + str[0] = '\0'; + return NULL; + } + + /* Negative numbers are only supported for decimal. + * Cast to unsigned to avoid overflow for maximum negative value. */ + if ((base == 10) && (value < 0)) + { + str[i++] = '-'; + uvalue = (unsigned)-value; + } + else + uvalue = (unsigned)value; + + __utoa (uvalue, &str[i], base); + return str; +} + +char * +_DEFUN (itoa, (value, str, base), + int value _AND + char *str _AND + int base) +{ + return __itoa (value, str, base); +} |