diff src/eval.c @ 109308:3200fb11db9d

Make doprnt and related functions ANSI C compliant, with prototypes. * doprnt.c (doprnt): Take a va_list argument instead of count and pointer. * eval.c (error): Change to a standard-C variadic function. * xdisp.c (vmessage): Renamed from message, made static, and changed to take a va_list argument. (message): New variadic wrapper. (message_nolog): Now a variadic function, calling vmessage. * lisp.h: Include stdarg.h for va_list. (doprnt, error, message, message_nolog): Decls updated.
author Ken Raeburn <raeburn@raeburn.org>
date Sun, 11 Jul 2010 02:59:55 -0400
parents 8cfee7d2955f
children 988ceb510e6b
line wrap: on
line diff
--- a/src/eval.c	Sun Jul 11 09:39:00 2010 +0300
+++ b/src/eval.c	Sun Jul 11 02:59:55 2010 -0400
@@ -2003,9 +2003,7 @@
 
 /* VARARGS 1 */
 void
-error (m, a1, a2, a3)
-     char *m;
-     char *a1, *a2, *a3;
+error (char *m, ...)
 {
   char buf[200];
   int size = 200;
@@ -2015,15 +2013,18 @@
   int allocated = 0;
   Lisp_Object string;
 
-  args[0] = a1;
-  args[1] = a2;
-  args[2] = a3;
-
   mlen = strlen (m);
 
   while (1)
     {
-      int used = doprnt (buffer, size, m, m + mlen, 3, args);
+      va_list ap;
+      int used;
+
+      /* A va_list can't be reused if we have to go around the loop
+	 again; we need to "reinitialize" it each time.  */
+      va_start(ap, m);
+      used = doprnt (buffer, size, m, m + mlen, ap);
+      va_end(ap);
       if (used < size)
 	break;
       size *= 2;