Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdlib/utoa.c')
-rw-r--r--newlib/libc/stdlib/utoa.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/newlib/libc/stdlib/utoa.c b/newlib/libc/stdlib/utoa.c
new file mode 100644
index 000000000..7738c2321
--- /dev/null
+++ b/newlib/libc/stdlib/utoa.c
@@ -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);
+}