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));
+}