From 0a5cb7dd4756e563f7af92b51397faa8de28278b Mon Sep 17 00:00:00 2001
From: Martin Stjernholm <mast@lysator.liu.se>
Date: Sat, 19 Mar 2011 20:44:30 +0100
Subject: [PATCH] Did away with duplicate function Pike_vsnprintf.

string_builder_vsprintf is more capable.
---
 .gitattributes   |   1 -
 src/cpp.c        |  12 ++---
 src/error.c      | 111 -----------------------------------------------
 src/pike_error.h |   1 -
 4 files changed, 7 insertions(+), 118 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index ad31564ef9..aca7d19215 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -274,7 +274,6 @@ testfont binary
 /src/compilation.h foreign_ident
 /src/constants.c foreign_ident
 /src/constants.h foreign_ident
-/src/cpp.c foreign_ident
 /src/cpp.h foreign_ident
 /src/crypt.c foreign_ident
 /src/cyclic.c foreign_ident
diff --git a/src/cpp.c b/src/cpp.c
index 1606004a13..776d34e19d 100644
--- a/src/cpp.c
+++ b/src/cpp.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: cpp.c,v 1.179 2010/09/18 11:56:50 marcus Exp $
+|| $Id$
 */
 
 #include "global.h"
@@ -241,18 +241,19 @@ static void cpp_handle_exception(struct cpp *this,
 
 static void cpp_warning(struct cpp *this, const char *cpp_warn_fmt, ...)
 {
-  char msg[8192];
+  struct string_builder sb;
   va_list args;
 
+  init_string_builder (&sb, 0);
   va_start(args, cpp_warn_fmt);
-  Pike_vsnprintf(msg, sizeof(msg), cpp_warn_fmt, args);
+  string_builder_vsprintf (&sb, cpp_warn_fmt, args);
   va_end(args);
 
   if((this->handler && this->handler->prog) || get_master())
   {
     ref_push_string(this->current_file);
     push_int(this->current_line);
-    push_text(msg);
+    push_string (finish_string_builder (&sb));
     low_safe_apply_handler("compile_warning", this->handler,
 			   this->compat_handler, 3);
     pop_stack();
@@ -260,8 +261,9 @@ static void cpp_warning(struct cpp *this, const char *cpp_warn_fmt, ...)
     (void)fprintf(stderr, "%s:%ld: %s\n",
 		  this->current_file->str,
 		  (long)this->current_line,
-		  msg);
+		  sb.s->str);
     fflush(stderr);
+    free_string_builder (&sb);
   }
 }
 
diff --git a/src/error.c b/src/error.c
index 46b26667f3..9925f1a0cd 100644
--- a/src/error.c
+++ b/src/error.c
@@ -251,117 +251,6 @@ PMOD_EXPORT DECLSPEC(noreturn) void low_error(const char *buf) ATTRIBUTE((noretu
   pike_throw();  /* Hope someone is catching, or we will be out of balls. */
 }
 
-PMOD_EXPORT void Pike_vsnprintf(char *str, size_t size,
-				const char *fmt, va_list args)
-{
-  size--;
-
-  do {
-    if(fmt[0]=='%') {
-
-      fmt++;
-
-      switch( fmt++[0] ) {
-
-      case 'O':
-	{
-	  dynamic_buffer buf;
-	  dynbuf_string s;
-	  char *ostr;
-	  struct svalue t = va_arg(args, struct svalue);
-	  init_buf(&buf);
-	  describe_svalue(&t,0,0);
-	  s=complex_free_buf(&buf);
-	  ostr=s.str;
-
-	  while( --size>0 && (s.len--)>0 )
-	    str++[0]=s.str++[0];
-
-	  free(ostr);
-	}
-	break;
-
-      case 'S':
-	{
-	  dynamic_buffer buf;
-	  dynbuf_string s;
-	  char *ostr;
-	  struct svalue t;
-
-	  t.type = PIKE_T_STRING;
-	  t.u.string = va_arg(args, struct pike_string *);
-
-	  init_buf(&buf);
-	  describe_svalue(&t,0,0);
-	  s=complex_free_buf(&buf);
-	  ostr=s.str;
-
-	  while( --size>0 && (s.len--)>0 )
-	    str++[0]=s.str++[0];
-
-	  free(ostr);
-	}
-	break;
-
-      case 's':
-	{
-	  char *from = va_arg(args, char *);
-	  while( --size>0 && from[0]!=0 )
-	    str++[0]=from++[0];
-	}
-	break;
-
-      case 'c':
-	{
-	  int c = (char)va_arg(args, int);
-	  sprintf(str, "%c", c);
-	  str++;
-	  size--;
-	}
-	break;
-
-      case 'd':
-	{
-	  char buf[12];
-	  int pos=0;
-	  sprintf(buf, "%d", va_arg(args, int));
-	  while( --size>0 && buf[pos]!=0 )
-	    str++[0]=buf[pos++];
-	}
-	break;
-
-      case 'x':
-	{
-	  char buf[12];
-	  int pos=0;
-	  sprintf(buf, "%x", va_arg(args, int));
-	  while( --size>0 && buf[pos]!=0 )
-	    str++[0]=buf[pos++];
-	}
-	break;
-
-      case '%':
-	str++[0]='%';
-	size--;
-	break;
-
-      default:
-	Pike_fatal("Unknown Pike_vsnprintf formatting char '%c'.\n",
-		   (fmt-1)[0]);
-      }
-    }
-    else {
-      str++[0]=fmt++[0];
-      size--;
-    }
-
-  } while(fmt[0] && size>0);
-
-  str[0]=0;
-  va_end(args);
-}
-
-
 PMOD_EXPORT void va_make_error (const char *fmt, va_list args)
 {
   struct string_builder s;
diff --git a/src/pike_error.h b/src/pike_error.h
index adf606d202..5461c6065f 100644
--- a/src/pike_error.h
+++ b/src/pike_error.h
@@ -254,7 +254,6 @@ PMOD_EXPORT JMP_BUF *init_recovery(JMP_BUF *r, size_t stack_pop_levels DEBUG_INI
 PMOD_EXPORT DECLSPEC(noreturn) void pike_throw(void) ATTRIBUTE((noreturn));
 PMOD_EXPORT void push_error(const char *description);
 PMOD_EXPORT DECLSPEC(noreturn) void low_error(const char *buf) ATTRIBUTE((noreturn));
-PMOD_EXPORT void Pike_vsnprintf(char *str, size_t size, const char *fmt, va_list ap);
 PMOD_EXPORT void va_make_error (const char *fmt, va_list args);
 PMOD_EXPORT void DECLSPEC(noreturn) va_error(const char *fmt, va_list args) ATTRIBUTE((noreturn));
 PMOD_EXPORT void make_error (const char *fmt, ...);
-- 
GitLab