summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2004-11-11 15:53:33 +0000
committerunknown <tomas@poseidon.ndb.mysql.com>2004-11-11 15:53:33 +0000
commit9fe89939d07837c84e3874a4fc97b444560f4575 (patch)
tree80103b1841280ff1f5e2d516bea19e2b239625ed /ndb
parent3048dc0fa263ee1654d94753cf048212d565d7b4 (diff)
downloadmariadb-git-9fe89939d07837c84e3874a4fc97b444560f4575.tar.gz
basestring_vsnprintf fix for size==0
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/common/util/basestring_vsnprintf.c30
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;
+ }
}