From 4b64de0db9dcad0ebd0b35ea4137a3aade260dda Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 23 Nov 2018 14:03:02 +0100 Subject: [PATCH] When available, use MSVC built-in itoa function. --- src/util/strings.c | 27 +++++++++++++++++++++++---- src/util/strings.h | 1 + 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/util/strings.c b/src/util/strings.c index 682d92139..4eac7856e 100644 --- a/src/util/strings.c +++ b/src/util/strings.c @@ -18,6 +18,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #ifdef _MSC_VER #include +#define HAVE__ITOA #endif #include "strings.h" @@ -34,10 +35,28 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #endif -const char *str_itoa(int n) { - static char buf[12]; - snprintf(buf, sizeof(buf), "%d", n); - return buf; +const char* str_itoab(int val, int base) +{ + static char buf[32] = { 0 }; +#ifdef HAVE__ITOAB + return _itoa(val, buf, base); +#else + int i = 30; + for (; val && i; --i, val /= base) { + buf[i] = "0123456789abcdefghijklmnopqrstuvwxyz"[val % base]; + } + return &buf[i + 1]; +#endif +} + +const char *str_itoa(int n) +{ +#ifdef HAVE__ITOA + static char buf[32] = { 0 }; + return _itoa(n, buf, 10); +#else + return str_itoab(n, 10); +#endif } size_t str_strlcpy(char *dst, const char *src, size_t len) diff --git a/src/util/strings.h b/src/util/strings.h index 205cf6b52..bf6299332 100644 --- a/src/util/strings.h +++ b/src/util/strings.h @@ -29,6 +29,7 @@ extern "C" { void str_replace(char *buffer, size_t size, const char *tmpl, const char *var, const char *value); int str_hash(const char *s); const char *str_itoa(int i); + const char *str_itoab(int i, int base); size_t str_slprintf(char * dst, size_t size, const char * format, ...); size_t str_strlcpy(char *dst, const char *src, size_t len); size_t str_strlcat(char *dst, const char *src, size_t len);