diff src/utils.cc @ 10257:cd550069240e

assume vsnprintf from gnulib; use sstream instead of snprintf
author John W. Eaton <jwe@octave.org>
date Wed, 03 Feb 2010 06:34:29 -0500
parents 2d47356a7a1a
children 57a59eae83cc
line wrap: on
line diff
--- a/src/utils.cc	Wed Feb 03 05:31:47 2010 -0500
+++ b/src/utils.cc	Wed Feb 03 06:34:29 2010 -0500
@@ -1225,11 +1225,7 @@
 
   static char *buf = 0;
 
-#if defined (HAVE_C99_VSNPRINTF)
-  size_t nchars = 0;
-#else
   int nchars = 0;
-#endif
 
   if (! buf)
     buf = new char [size];
@@ -1237,43 +1233,6 @@
   if (! buf)
     return 0;
 
-#if defined (HAVE_C99_VSNPRINTF)
-
-  // Note that the caller is responsible for calling va_end on args.
-  // We will do it for saved_args.
-
-  va_list saved_args;
-
-  SAVE_ARGS (saved_args, args);
-
-  BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE_FOR_VSNPRINTF;
-
-  nchars = octave_raw_vsnprintf (buf, size, fmt, args);
-
-  END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-
-  if (nchars >= size)
-    {
-      size = nchars + 1;
-
-      delete [] buf;
-
-      buf = new char [size];
-
-      if (buf)
-	{
-	  BEGIN_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE_FOR_VSNPRINTF;
-
-	  octave_raw_vsnprintf (buf, size, fmt, saved_args);
-
-	  END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
-	}
-    }
-
-  va_end (saved_args);
-
-#else
-
   while (1)
     {
       va_list saved_args;
@@ -1288,23 +1247,21 @@
 
       END_INTERRUPT_IMMEDIATELY_IN_FOREIGN_CODE;
 
-      if (nchars > -1 && nchars < size-1)
-       return buf;
+      if (nchars > -1 && nchars < size)
+        break;
       else
-       {
-	 delete [] buf;
-
-         size *= 2;
+        {
+          delete [] buf;
 
-	 buf = new char [size];
+          size = nchars + 1;;
+
+          buf = new char [size];
 
-         if (! buf)
-           return 0;
-       }
+          if (! buf)
+            return 0;
+        }
     }
 
-#endif
-
   return buf;
 }