Commit 9fe89939 authored by unknown's avatar unknown
Browse files

basestring_vsnprintf fix for size==0

parent 3048dc0f
Loading
Loading
Loading
Loading
+24 −6
Original line number Diff line number Diff line
@@ -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, ...)
{
@@ -46,10 +50,23 @@ static char basestring_vsnprintf_buf[16*1024];
#endif
int
basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
  if (size == 0)
  {
#ifdef SNPRINTF_RETURN_TRUNC
    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) {
    if (ret == size-1 || ret == -1)
    {
      ret= BASESTRING_VSNPRINTF_FUNC(basestring_vsnprintf_buf,
				     sizeof(basestring_vsnprintf_buf),
				     format, ap);
@@ -57,3 +74,4 @@ basestring_vsnprintf(char *str, size_t size, const char *format, va_list ap)
#endif
    return ret;
  }
}