* 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.
This commit is contained in:
parent
21f22726c7
commit
32c96ddd14
|
@ -1,3 +1,14 @@
|
||||||
|
2014-12-16 Jon Beniston <jon@beniston.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2014-12-15 Jonathan Roelofs <jonathan@codesourcery.com>
|
2014-12-15 Jonathan Roelofs <jonathan@codesourcery.com>
|
||||||
|
|
||||||
* libc/include/math.h: Add log2l,logbl,nexttowardf,
|
* libc/include/math.h: Add log2l,logbl,nexttowardf,
|
||||||
|
|
|
@ -176,6 +176,12 @@ char * _EXFUN(ecvtbuf,(double, int, int*, int*, char *));
|
||||||
char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *));
|
char * _EXFUN(fcvtbuf,(double, int, int*, int*, char *));
|
||||||
char * _EXFUN(ecvtf,(float,int,int *,int *));
|
char * _EXFUN(ecvtf,(float,int,int *,int *));
|
||||||
char * _EXFUN(dtoa,(double, int, int, int *, int*, char**));
|
char * _EXFUN(dtoa,(double, int, int, int *, int*, char**));
|
||||||
|
#endif
|
||||||
|
char * _EXFUN(__itoa,(int, char *, int));
|
||||||
|
char * _EXFUN(__utoa,(unsigned, char *, int));
|
||||||
|
#ifndef __STRICT_ANSI__
|
||||||
|
char * _EXFUN(itoa,(int, char *, int));
|
||||||
|
char * _EXFUN(utoa,(unsigned, char *, int));
|
||||||
int _EXFUN(rand_r,(unsigned *__seed));
|
int _EXFUN(rand_r,(unsigned *__seed));
|
||||||
|
|
||||||
double _EXFUN(drand48,(_VOID));
|
double _EXFUN(drand48,(_VOID));
|
||||||
|
|
|
@ -31,6 +31,7 @@ GENERAL_SOURCES = \
|
||||||
gdtoa-hexnan.c \
|
gdtoa-hexnan.c \
|
||||||
getenv.c \
|
getenv.c \
|
||||||
getenv_r.c \
|
getenv_r.c \
|
||||||
|
itoa.c \
|
||||||
labs.c \
|
labs.c \
|
||||||
ldiv.c \
|
ldiv.c \
|
||||||
ldtoa.c \
|
ldtoa.c \
|
||||||
|
@ -52,6 +53,7 @@ GENERAL_SOURCES = \
|
||||||
strtod.c \
|
strtod.c \
|
||||||
strtol.c \
|
strtol.c \
|
||||||
strtoul.c \
|
strtoul.c \
|
||||||
|
utoa.c \
|
||||||
wcstod.c \
|
wcstod.c \
|
||||||
wcstol.c \
|
wcstol.c \
|
||||||
wcstoul.c \
|
wcstoul.c \
|
||||||
|
@ -257,6 +259,7 @@ CHEWOUT_FILES= \
|
||||||
envlock.def \
|
envlock.def \
|
||||||
exit.def \
|
exit.def \
|
||||||
getenv.def \
|
getenv.def \
|
||||||
|
itoa.def \
|
||||||
labs.def \
|
labs.def \
|
||||||
ldiv.def \
|
ldiv.def \
|
||||||
llabs.def \
|
llabs.def \
|
||||||
|
@ -277,6 +280,7 @@ CHEWOUT_FILES= \
|
||||||
strtoll.def \
|
strtoll.def \
|
||||||
strtoul.def \
|
strtoul.def \
|
||||||
strtoull.def \
|
strtoull.def \
|
||||||
|
utoa.def \
|
||||||
wcsnrtombs.def \
|
wcsnrtombs.def \
|
||||||
wcstod.def \
|
wcstod.def \
|
||||||
wcstol.def \
|
wcstol.def \
|
||||||
|
|
|
@ -94,17 +94,18 @@ am__objects_2 = lib_a-__adjust.$(OBJEXT) lib_a-__atexit.$(OBJEXT) \
|
||||||
lib_a-eprintf.$(OBJEXT) lib_a-exit.$(OBJEXT) \
|
lib_a-eprintf.$(OBJEXT) lib_a-exit.$(OBJEXT) \
|
||||||
lib_a-gdtoa-gethex.$(OBJEXT) lib_a-gdtoa-hexnan.$(OBJEXT) \
|
lib_a-gdtoa-gethex.$(OBJEXT) lib_a-gdtoa-hexnan.$(OBJEXT) \
|
||||||
lib_a-getenv.$(OBJEXT) lib_a-getenv_r.$(OBJEXT) \
|
lib_a-getenv.$(OBJEXT) lib_a-getenv_r.$(OBJEXT) \
|
||||||
lib_a-labs.$(OBJEXT) lib_a-ldiv.$(OBJEXT) \
|
lib_a-itoa.$(OBJEXT) lib_a-labs.$(OBJEXT) \
|
||||||
lib_a-ldtoa.$(OBJEXT) lib_a-malloc.$(OBJEXT) \
|
lib_a-ldiv.$(OBJEXT) lib_a-ldtoa.$(OBJEXT) \
|
||||||
lib_a-mblen.$(OBJEXT) lib_a-mblen_r.$(OBJEXT) \
|
lib_a-malloc.$(OBJEXT) lib_a-mblen.$(OBJEXT) \
|
||||||
lib_a-mbstowcs.$(OBJEXT) lib_a-mbstowcs_r.$(OBJEXT) \
|
lib_a-mblen_r.$(OBJEXT) lib_a-mbstowcs.$(OBJEXT) \
|
||||||
lib_a-mbtowc.$(OBJEXT) lib_a-mbtowc_r.$(OBJEXT) \
|
lib_a-mbstowcs_r.$(OBJEXT) lib_a-mbtowc.$(OBJEXT) \
|
||||||
lib_a-mlock.$(OBJEXT) lib_a-mprec.$(OBJEXT) \
|
lib_a-mbtowc_r.$(OBJEXT) lib_a-mlock.$(OBJEXT) \
|
||||||
lib_a-mstats.$(OBJEXT) lib_a-rand.$(OBJEXT) \
|
lib_a-mprec.$(OBJEXT) lib_a-mstats.$(OBJEXT) \
|
||||||
lib_a-rand_r.$(OBJEXT) lib_a-realloc.$(OBJEXT) \
|
lib_a-rand.$(OBJEXT) lib_a-rand_r.$(OBJEXT) \
|
||||||
lib_a-reallocf.$(OBJEXT) lib_a-sb_charsets.$(OBJEXT) \
|
lib_a-realloc.$(OBJEXT) lib_a-reallocf.$(OBJEXT) \
|
||||||
lib_a-strtod.$(OBJEXT) lib_a-strtol.$(OBJEXT) \
|
lib_a-sb_charsets.$(OBJEXT) lib_a-strtod.$(OBJEXT) \
|
||||||
lib_a-strtoul.$(OBJEXT) lib_a-wcstod.$(OBJEXT) \
|
lib_a-strtol.$(OBJEXT) lib_a-strtoul.$(OBJEXT) \
|
||||||
|
lib_a-utoa.$(OBJEXT) lib_a-wcstod.$(OBJEXT) \
|
||||||
lib_a-wcstol.$(OBJEXT) lib_a-wcstoul.$(OBJEXT) \
|
lib_a-wcstol.$(OBJEXT) lib_a-wcstoul.$(OBJEXT) \
|
||||||
lib_a-wcstombs.$(OBJEXT) lib_a-wcstombs_r.$(OBJEXT) \
|
lib_a-wcstombs.$(OBJEXT) lib_a-wcstombs_r.$(OBJEXT) \
|
||||||
lib_a-wctomb.$(OBJEXT) lib_a-wctomb_r.$(OBJEXT) \
|
lib_a-wctomb.$(OBJEXT) lib_a-wctomb_r.$(OBJEXT) \
|
||||||
|
@ -151,13 +152,13 @@ am__objects_9 = __adjust.lo __atexit.lo __call_atexit.lo __exp10.lo \
|
||||||
__ten_mu.lo _Exit.lo abort.lo abs.lo assert.lo atexit.lo \
|
__ten_mu.lo _Exit.lo abort.lo abs.lo assert.lo atexit.lo \
|
||||||
atof.lo atoff.lo atoi.lo atol.lo calloc.lo div.lo dtoa.lo \
|
atof.lo atoff.lo atoi.lo atol.lo calloc.lo div.lo dtoa.lo \
|
||||||
dtoastub.lo environ.lo envlock.lo eprintf.lo exit.lo \
|
dtoastub.lo environ.lo envlock.lo eprintf.lo exit.lo \
|
||||||
gdtoa-gethex.lo gdtoa-hexnan.lo getenv.lo getenv_r.lo labs.lo \
|
gdtoa-gethex.lo gdtoa-hexnan.lo getenv.lo getenv_r.lo itoa.lo \
|
||||||
ldiv.lo ldtoa.lo malloc.lo mblen.lo mblen_r.lo mbstowcs.lo \
|
labs.lo ldiv.lo ldtoa.lo malloc.lo mblen.lo mblen_r.lo \
|
||||||
mbstowcs_r.lo mbtowc.lo mbtowc_r.lo mlock.lo mprec.lo \
|
mbstowcs.lo mbstowcs_r.lo mbtowc.lo mbtowc_r.lo mlock.lo \
|
||||||
mstats.lo rand.lo rand_r.lo realloc.lo reallocf.lo \
|
mprec.lo mstats.lo rand.lo rand_r.lo realloc.lo reallocf.lo \
|
||||||
sb_charsets.lo strtod.lo strtol.lo strtoul.lo wcstod.lo \
|
sb_charsets.lo strtod.lo strtol.lo strtoul.lo utoa.lo \
|
||||||
wcstol.lo wcstoul.lo wcstombs.lo wcstombs_r.lo wctomb.lo \
|
wcstod.lo wcstol.lo wcstoul.lo wcstombs.lo wcstombs_r.lo \
|
||||||
wctomb_r.lo $(am__objects_8)
|
wctomb.lo wctomb_r.lo $(am__objects_8)
|
||||||
am__objects_10 = cxa_atexit.lo cxa_finalize.lo drand48.lo ecvtbuf.lo \
|
am__objects_10 = cxa_atexit.lo cxa_finalize.lo drand48.lo ecvtbuf.lo \
|
||||||
efgcvt.lo erand48.lo jrand48.lo lcong48.lo lrand48.lo \
|
efgcvt.lo erand48.lo jrand48.lo lcong48.lo lrand48.lo \
|
||||||
mrand48.lo msize.lo mtrim.lo nrand48.lo rand48.lo seed48.lo \
|
mrand48.lo msize.lo mtrim.lo nrand48.lo rand48.lo seed48.lo \
|
||||||
|
@ -355,12 +356,12 @@ GENERAL_SOURCES = __adjust.c __atexit.c __call_atexit.c __exp10.c \
|
||||||
__ten_mu.c _Exit.c abort.c abs.c assert.c atexit.c atof.c \
|
__ten_mu.c _Exit.c abort.c abs.c assert.c atexit.c atof.c \
|
||||||
atoff.c atoi.c atol.c calloc.c div.c dtoa.c dtoastub.c \
|
atoff.c atoi.c atol.c calloc.c div.c dtoa.c dtoastub.c \
|
||||||
environ.c envlock.c eprintf.c exit.c gdtoa-gethex.c \
|
environ.c envlock.c eprintf.c exit.c gdtoa-gethex.c \
|
||||||
gdtoa-hexnan.c getenv.c getenv_r.c labs.c ldiv.c ldtoa.c \
|
gdtoa-hexnan.c getenv.c getenv_r.c itoa.o labs.c ldiv.c ldtoa.c \
|
||||||
malloc.c mblen.c mblen_r.c mbstowcs.c mbstowcs_r.c mbtowc.c \
|
malloc.c mblen.c mblen_r.c mbstowcs.c mbstowcs_r.c mbtowc.c \
|
||||||
mbtowc_r.c mlock.c mprec.c mstats.c rand.c rand_r.c realloc.c \
|
mbtowc_r.c mlock.c mprec.c mstats.c rand.c rand_r.c realloc.c \
|
||||||
reallocf.c sb_charsets.c strtod.c strtol.c strtoul.c wcstod.c \
|
reallocf.c sb_charsets.c strtod.c strtol.c strtoul.c utoa.c \
|
||||||
wcstol.c wcstoul.c wcstombs.c wcstombs_r.c wctomb.c wctomb_r.c \
|
wcstod.c wcstol.c wcstoul.c wcstombs.c wcstombs_r.c wctomb.c \
|
||||||
$(am__append_1)
|
wctomb_r.c $(am__append_1)
|
||||||
@NEWLIB_NANO_MALLOC_FALSE@MALIGNR = malignr
|
@NEWLIB_NANO_MALLOC_FALSE@MALIGNR = malignr
|
||||||
@NEWLIB_NANO_MALLOC_TRUE@MALIGNR = nano-malignr
|
@NEWLIB_NANO_MALLOC_TRUE@MALIGNR = nano-malignr
|
||||||
@NEWLIB_NANO_MALLOC_FALSE@MALLOPTR = malloptr
|
@NEWLIB_NANO_MALLOC_FALSE@MALLOPTR = malloptr
|
||||||
|
@ -495,6 +496,7 @@ CHEWOUT_FILES = \
|
||||||
envlock.def \
|
envlock.def \
|
||||||
exit.def \
|
exit.def \
|
||||||
getenv.def \
|
getenv.def \
|
||||||
|
itoa.def \
|
||||||
labs.def \
|
labs.def \
|
||||||
ldiv.def \
|
ldiv.def \
|
||||||
llabs.def \
|
llabs.def \
|
||||||
|
@ -515,6 +517,7 @@ CHEWOUT_FILES = \
|
||||||
strtoll.def \
|
strtoll.def \
|
||||||
strtoul.def \
|
strtoul.def \
|
||||||
strtoull.def \
|
strtoull.def \
|
||||||
|
utoa.def \
|
||||||
wcsnrtombs.def \
|
wcsnrtombs.def \
|
||||||
wcstod.def \
|
wcstod.def \
|
||||||
wcstol.def \
|
wcstol.def \
|
||||||
|
@ -754,6 +757,12 @@ lib_a-getenv_r.o: getenv_r.c
|
||||||
lib_a-getenv_r.obj: getenv_r.c
|
lib_a-getenv_r.obj: getenv_r.c
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-getenv_r.obj `if test -f 'getenv_r.c'; then $(CYGPATH_W) 'getenv_r.c'; else $(CYGPATH_W) '$(srcdir)/getenv_r.c'; fi`
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-getenv_r.obj `if test -f 'getenv_r.c'; then $(CYGPATH_W) 'getenv_r.c'; else $(CYGPATH_W) '$(srcdir)/getenv_r.c'; fi`
|
||||||
|
|
||||||
|
lib_a-itoa.o: itoa.c
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-itoa.o `test -f 'itoa.c' || echo '$(srcdir)/'`itoa.c
|
||||||
|
|
||||||
|
lib_a-itoa.obj: itoa.c
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-itoa.obj `if test -f 'itoa.c'; then $(CYGPATH_W) 'itoa.c'; else $(CYGPATH_W) '$(srcdir)/itoa.c'; fi`
|
||||||
|
|
||||||
lib_a-labs.o: labs.c
|
lib_a-labs.o: labs.c
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-labs.o `test -f 'labs.c' || echo '$(srcdir)/'`labs.c
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-labs.o `test -f 'labs.c' || echo '$(srcdir)/'`labs.c
|
||||||
|
|
||||||
|
@ -880,6 +889,12 @@ lib_a-strtoul.o: strtoul.c
|
||||||
lib_a-strtoul.obj: strtoul.c
|
lib_a-strtoul.obj: strtoul.c
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strtoul.obj `if test -f 'strtoul.c'; then $(CYGPATH_W) 'strtoul.c'; else $(CYGPATH_W) '$(srcdir)/strtoul.c'; fi`
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-strtoul.obj `if test -f 'strtoul.c'; then $(CYGPATH_W) 'strtoul.c'; else $(CYGPATH_W) '$(srcdir)/strtoul.c'; fi`
|
||||||
|
|
||||||
|
lib_a-utoa.o: utoa.c
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-utoa.o `test -f 'utoa.c' || echo '$(srcdir)/'`utoa.c
|
||||||
|
|
||||||
|
lib_a-utoa.obj: utoa.c
|
||||||
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-utoa.obj `if test -f 'utoa.c'; then $(CYGPATH_W) 'utoa.c'; else $(CYGPATH_W) '$(srcdir)/utoa.c'; fi`
|
||||||
|
|
||||||
lib_a-wcstod.o: wcstod.c
|
lib_a-wcstod.o: wcstod.c
|
||||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-wcstod.o `test -f 'wcstod.c' || echo '$(srcdir)/'`wcstod.c
|
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-wcstod.o `test -f 'wcstod.c' || echo '$(srcdir)/'`wcstod.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);
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
<<utoa>>---unsigned integer to string
|
||||||
|
|
||||||
|
INDEX
|
||||||
|
utoa
|
||||||
|
|
||||||
|
ANSI_SYNOPSIS
|
||||||
|
#include <stdlib.h>
|
||||||
|
char *utoa(unsigned <[value]>, char *<[str]>, int <[base]>);
|
||||||
|
char *__utoa(unsigned <[value]>, char *<[str]>, int <[base]>);
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
<<utoa>> converts the unsigned integer [<value>] to a null-terminated string
|
||||||
|
using the specified base, which must be between 2 and 36, inclusive.
|
||||||
|
<[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
|
||||||
|
<<utoa>> is non-ANSI.
|
||||||
|
|
||||||
|
No supporting OS subroutine calls are required.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
char *
|
||||||
|
_DEFUN (__utoa, (value, str, base),
|
||||||
|
unsigned value _AND
|
||||||
|
char *str _AND
|
||||||
|
int base)
|
||||||
|
{
|
||||||
|
const char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
|
||||||
|
int i, j;
|
||||||
|
unsigned remainder;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
/* Check base is supported. */
|
||||||
|
if ((base < 2) || (base > 36))
|
||||||
|
{
|
||||||
|
str[0] = '\0';
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert to string. Digits are in reverse order. */
|
||||||
|
i = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
remainder = value % base;
|
||||||
|
str[i++] = digits[remainder];
|
||||||
|
value = value / base;
|
||||||
|
} while (value != 0);
|
||||||
|
str[i] = '\0';
|
||||||
|
|
||||||
|
/* Reverse string. */
|
||||||
|
for (j = 0, i--; j < i; j++, i--)
|
||||||
|
{
|
||||||
|
c = str[j];
|
||||||
|
str[j] = str[i];
|
||||||
|
str[i] = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
_DEFUN (utoa, (value, str, base),
|
||||||
|
unsigned value _AND
|
||||||
|
char *str _AND
|
||||||
|
int base)
|
||||||
|
{
|
||||||
|
return __utoa (value, str, base);
|
||||||
|
}
|
Loading…
Reference in New Issue