From 8365278cbf48d8ef69992e61d8b0d89c9ed4ee61 Mon Sep 17 00:00:00 2001 From: Tilka Date: Thu, 10 May 2012 23:24:42 +0200 Subject: [PATCH] fix uhub_itoa() and uhub_ulltoa() --- src/system.h | 1 + src/util/misc.c | 36 ++++-------------------------------- src/util/misc.h | 6 +++++- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/src/system.h b/src/system.h index baf089b..d47b48c 100644 --- a/src/system.h +++ b/src/system.h @@ -73,6 +73,7 @@ #include #if !defined(WIN32) +#include #include #include #include diff --git a/src/util/misc.c b/src/util/misc.c index 3d6992c..ff5dfc6 100644 --- a/src/util/misc.c +++ b/src/util/misc.c @@ -303,47 +303,19 @@ int is_number(const char* value, int* num) } -/* - * FIXME: -INTMIN is wrong! - */ const char* uhub_itoa(int val) { - size_t i; - int value; static char buf[22]; - memset(buf, 0, sizeof(buf)); - if (!val) - { - buf[0] = '0'; - buf[1] = '\0'; - return buf; - } - i = sizeof(buf) - 1; - for (value = abs(val); value && i > 0; value /= 10) - buf[--i] = "0123456789"[value % 10]; - if (val < 0 && i > 0) - buf[--i] = '-'; - return buf+i; + return snprintf(buf, sizeof(buf), "%d", val) < 0 ? NULL : buf; } const char* uhub_ulltoa(uint64_t val) { - size_t i; - static char buf[22] = { 0, }; - memset(buf, 0, sizeof(buf)); - - if (!val) - { - buf[0] = '0'; - buf[1] = '\0'; - return buf; - } - i = sizeof(buf) - 1; - for (; val && i > 0; val /= 10) - buf[--i] = "0123456789"[val % 10]; - return buf+i; + static char buf[22]; + + return snprintf(buf, sizeof(buf), "%"PRIu64, val) < 0 ? NULL : buf; } diff --git a/src/util/misc.h b/src/util/misc.h index 4994b68..9526d0d 100644 --- a/src/util/misc.h +++ b/src/util/misc.h @@ -53,7 +53,11 @@ extern int file_read_lines(const char* file, void* data, file_line_handler_t han */ extern int string_to_boolean(const char* str, int* boolean); - +/** + * Convert number to string. + * Note: these functions are neither thread-safe nor reentrant. + * @return pointer to the resulting string, NULL on error + */ extern const char* uhub_itoa(int val); extern const char* uhub_ulltoa(uint64_t val);