X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/84d85ea7b7bba78431600369cf1717166e156cd0..d07db7c15d6cf9d6c0fd07ea29cca77a89b02a79:/lunaix-os/libs/libc/stdlib/itoa.c diff --git a/lunaix-os/libs/libc/stdlib/itoa.c b/lunaix-os/libs/libc/stdlib/itoa.c index 3d0699e..affc2f5 100644 --- a/lunaix-os/libs/libc/stdlib/itoa.c +++ b/lunaix-os/libs/libc/stdlib/itoa.c @@ -1,4 +1,5 @@ #define __LUNAIX_LIBC +#include #include char base_char[] = "0123456789abcdefghijklmnopqrstuvwxyz"; @@ -7,22 +8,16 @@ char* __uitoa_internal(unsigned int value, char* str, int base, unsigned int* size) { unsigned int ptr = 0; - if (value == 0) { - str[0] = '0'; + do { + str[ptr] = base_char[value % base]; + value = value / base; ptr++; - } else { - while (value) { - str[ptr] = base_char[value % base]; - value = value / base; - ptr++; - } - - for (unsigned int i = 0; i < (ptr >> 1); i++) { - char c = str[i]; - str[i] = str[ptr - i - 1]; - str[ptr - i - 1] = c; - } + } while (value); + for (unsigned int i = 0; i < (ptr >> 1); i++) { + char c = str[i]; + str[i] = str[ptr - i - 1]; + str[ptr - i - 1] = c; } str[ptr] = '\0'; if (size) { @@ -35,10 +30,8 @@ char* __itoa_internal(int value, char* str, int base, unsigned int* size) { if (value < 0 && base == 10) { - unsigned int msk = value >> 31; - // evil bit level hack for abs() - unsigned int _v = (unsigned int)((value + msk) ^ msk); str[0] = '-'; + unsigned int _v = (unsigned int)(-value); __uitoa_internal(_v, str + 1, base, size); } else { __uitoa_internal(value, str, base, size); @@ -50,5 +43,5 @@ __itoa_internal(int value, char* str, int base, unsigned int* size) char* itoa(int value, char* str, int base) { - return __itoa_internal(value, str, base, (void*)0); + return __itoa_internal(value, str, base, NULL); } \ No newline at end of file