From 277c84e2b12233624bdcc8f904bf86bbf9512e8e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 21 Oct 2004 16:26:53 +0000 Subject: [PATCH] some platforms provide posix snprintf via special defined, these defines however cause problems elsewhere so this is a way to only have to do this define in one file --- ndb/include/util/BaseString.hpp | 6 +++++ ndb/src/common/util/BaseString.cpp | 28 ++++++++++++++++++---- ndb/src/common/util/Makefile.am | 2 +- ndb/src/common/util/basestring_vsnprintf.c | 9 +++++++ 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 ndb/src/common/util/basestring_vsnprintf.c diff --git a/ndb/include/util/BaseString.hpp b/ndb/include/util/BaseString.hpp index a1bb91ea9c5..066a24f294e 100644 --- a/ndb/include/util/BaseString.hpp +++ b/ndb/include/util/BaseString.hpp @@ -177,6 +177,12 @@ public: * Trim string from delim */ static char* trim(char * src, const char * delim); + + /** + * snprintf on some platforms need special treatment + */ + static int snprintf(char *str, size_t size, const char *format, ...); + static int vsnprintf(char *str, size_t size, const char *format, va_list ap); private: char* m_chr; unsigned m_len; diff --git a/ndb/src/common/util/BaseString.cpp b/ndb/src/common/util/BaseString.cpp index 8b7df485f77..ac6038ffcfd 100644 --- a/ndb/src/common/util/BaseString.cpp +++ b/ndb/src/common/util/BaseString.cpp @@ -18,6 +18,10 @@ #include #include +extern "C" +int +basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap); + BaseString::BaseString() { m_chr = new char[1]; @@ -127,14 +131,14 @@ BaseString::assfmt(const char *fmt, ...) * when called as vsnprintf(NULL, 0, ...). */ va_start(ap, fmt); - l = vsnprintf(buf, sizeof(buf), fmt, ap) + 1; + l = basestring_vsnprintf(buf, sizeof(buf), fmt, ap) + 1; va_end(ap); if(l > (int)m_len) { delete[] m_chr; m_chr = new char[l]; } va_start(ap, fmt); - vsnprintf(m_chr, l, fmt, ap); + basestring_vsnprintf(m_chr, l, fmt, ap); va_end(ap); m_len = strlen(m_chr); return *this; @@ -152,11 +156,11 @@ BaseString::appfmt(const char *fmt, ...) * when called as vsnprintf(NULL, 0, ...). */ va_start(ap, fmt); - l = vsnprintf(buf, sizeof(buf), fmt, ap) + 1; + l = basestring_vsnprintf(buf, sizeof(buf), fmt, ap) + 1; va_end(ap); char *tmp = new char[l]; va_start(ap, fmt); - vsnprintf(tmp, l, fmt, ap); + basestring_vsnprintf(tmp, l, fmt, ap); va_end(ap); append(tmp); delete[] tmp; @@ -335,6 +339,22 @@ BaseString::trim(char * str, const char * delim){ return str; } +int +BaseString::vsnprintf(char *str, size_t size, const char *format, va_list ap) +{ + return(basestring_vsnprintf(str, size, format, ap)); +} + +int +BaseString::snprintf(char *str, size_t size, const char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret= basestring_vsnprintf(str, size, format, ap); + va_end(ap); + return(ret); +} + #ifdef TEST_BASE_STRING diff --git a/ndb/src/common/util/Makefile.am b/ndb/src/common/util/Makefile.am index efb249dd330..0235adae7c9 100644 --- a/ndb/src/common/util/Makefile.am +++ b/ndb/src/common/util/Makefile.am @@ -9,7 +9,7 @@ libgeneral_la_SOURCES = \ NdbSqlUtil.cpp new.cpp \ uucode.c random.c getarg.c version.c \ strdup.c strlcat.c strlcpy.c \ - ConfigValues.cpp ndb_init.c + ConfigValues.cpp ndb_init.c basestring_vsnprintf.c include $(top_srcdir)/ndb/config/common.mk.am include $(top_srcdir)/ndb/config/type_util.mk.am diff --git a/ndb/src/common/util/basestring_vsnprintf.c b/ndb/src/common/util/basestring_vsnprintf.c new file mode 100644 index 00000000000..65a92f6fa4b --- /dev/null +++ b/ndb/src/common/util/basestring_vsnprintf.c @@ -0,0 +1,9 @@ +// define on IRIX to get posix complian vsnprintf +#define _XOPEN_SOURCE 500 +#include + +int +basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap) +{ + return(vsnprintf(str, size, format, ap)); +}