diff --git a/src/shared/string.c b/src/shared/string.c index af3d313..56a6824 100644 --- a/src/shared/string.c +++ b/src/shared/string.c @@ -83,55 +83,25 @@ void itoa64(i64 value, char *buffer) { } void uitoa64(u64 value, char *buffer) { - char *p = buffer; + char tmp[20]; + int i = 0; if (value == 0) { - *p++ = '0'; - *p = '\0'; + buffer[0] = '0'; + buffer[1] = '\0'; return; } - static const u64 powers[] = { - 10000000000000000000ULL, - 1000000000000000000ULL, - 100000000000000000ULL, - 10000000000000000ULL, - 1000000000000000ULL, - 100000000000000ULL, - 10000000000000ULL, - 1000000000000ULL, - 100000000000ULL, - 10000000000ULL, - 1000000000ULL, - 100000000ULL, - 10000000ULL, - 1000000ULL, - 100000ULL, - 10000ULL, - 1000ULL, - 100ULL, - 10ULL, - 1ULL - }; - - bool started = false; - - for (int i = 0; i < 20; i++) { - u64 power = powers[i]; - u32 digit = 0; - - while (value >= power) { - value -= power; - digit++; - } - - if (digit || started) { - *p++ = '0' + digit; - started = true; - } + while (value > 0) { + tmp[i++] = '0' + (value % 10); + value /= 10; } - *p = '\0'; + for (int j = 0; j < i; j++) { + buffer[j] = tmp[i - j - 1]; + } + + buffer[i] = '\0'; } void uitoa64_hex(u64 value, char *buffer) {