diff options
author | unknown <tomas@poseidon.ndb.mysql.com> | 2004-11-11 15:53:33 +0000 |
---|---|---|
committer | unknown <tomas@poseidon.ndb.mysql.com> | 2004-11-11 15:53:33 +0000 |
commit | 9fe89939d07837c84e3874a4fc97b444560f4575 (patch) | |
tree | 80103b1841280ff1f5e2d516bea19e2b239625ed /ndb | |
parent | 3048dc0fa263ee1654d94753cf048212d565d7b4 (diff) | |
download | mariadb-git-9fe89939d07837c84e3874a4fc97b444560f4575.tar.gz |
basestring_vsnprintf fix for size==0
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/common/util/basestring_vsnprintf.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/ndb/src/common/util/basestring_vsnprintf.c b/ndb/src/common/util/basestring_vsnprintf.c index 1b4d88679c1..8a58ca0fe5c 100644 --- a/ndb/src/common/util/basestring_vsnprintf.c +++ b/ndb/src/common/util/basestring_vsnprintf.c @@ -20,6 +20,10 @@ #include <basestring_vsnprintf.h> #include <my_config.h> + +/* + #define SNPRINTF_RETURN_TRUNC +*/ int basestring_snprintf(char *str, size_t size, const char *format, ...) { @@ -47,13 +51,27 @@ static char basestring_vsnprintf_buf[16*1024]; int basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap) { - int ret= BASESTRING_VSNPRINTF_FUNC(str, size, format, ap); + if (size == 0) + { #ifdef SNPRINTF_RETURN_TRUNC - if (ret == size-1 || ret == -1) { - ret= BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf, - sizeof(basestring_vsnprintf_buf), - format, ap); + return BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf, + sizeof(basestring_vsnprintf_buf), + format, ap); +#else + char buf[1]; + return BASESTRING_VSNPRINTF_FUNC(buf, 1, format, ap); +#endif } + { + int ret= BASESTRING_VSNPRINTF_FUNC(str, size, format, ap); +#ifdef SNPRINTF_RETURN_TRUNC + if (ret == size-1 || ret == -1) + { + ret= BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf, + sizeof(basestring_vsnprintf_buf), + format, ap); + } #endif - return ret; + return ret; + } } |