Prevent segfault when trying to print an error message.
authorGeorge Koehler <xkernigh@netscape.net>
Wed, 24 Oct 2012 17:44:50 +0000 (13:44 -0400)
committerNick Downing <nick@ndcode.org>
Wed, 17 Apr 2019 14:20:38 +0000 (00:20 +1000)
Use <stdarg.h> to pass arguments correctly, as ack/util/util.c
already uses <stdarg.h> the same way.

util/led/error.c

index a534ce4..f8990f2 100644 (file)
@@ -6,12 +6,13 @@
 static char rcsid[] = "$Id$";
 #endif
 
+#include <stdarg.h>
 #include <stdio.h>
 #include <out.h>
 #include "const.h"
 
 static short   nerrors = 0;
-static         diag();
+static void    diag(char *, char *, va_list);
 
 stop()
 {
@@ -27,40 +28,49 @@ stop()
 }
 
 /* VARARGS1 */
-fatal(format, a1, a2, a3, a4)
-       char    *format;
+void
+fatal(char *format, ...)
 {
+       va_list ap;
+       va_start(ap, format);
        nerrors++;
-       diag("fatal", format, a1, a2, a3, a4);
+       diag("fatal", format, ap);
        stop();
 }
 
 /* VARARGS1 */
-warning(format, a1, a2, a3, a4)
-       char    *format;
+void
+warning(char *format, ...)
 {
-       diag("warning", format, a1, a2, a3, a4);
+       va_list ap;
+       va_start(ap, format);
+       diag("warning", format, ap);
+       va_end(ap);
 }
 
 /* VARARGS1 */
-error(format, a1, a2, a3, a4)
-       char    *format;
+void
+error(char *format, ...)
 {
+       va_list ap;
+       va_start(ap, format);
        nerrors++;
-       diag("error", format, a1, a2, a3, a4);
+       diag("error", format, ap);
+       va_end(ap);
 }
 
 /* VARARGS1 */
-do_verbose(format, a1, a2, a3, a4)
-       char    *format;
+void
+do_verbose(char *format, ...)
 {
-       diag((char *) 0, format, a1, a2, a3, a4);
+       va_list ap;
+       va_start(ap, format);
+       diag((char *) 0, format, ap);
+       va_end(ap);
 }
 
-static
-diag(tail, format, a1, a2, a3, a4)
-       char    *tail;
-       char    *format;
+static void
+diag(char *tail, char *format, va_list ap)
 {
        extern char     *progname, *archname, *modulname; 
 
@@ -71,7 +81,7 @@ diag(tail, format, a1, a2, a3, a4)
                fprintf(stderr, "%s: ", archname);
        else if (modulname)
                fprintf(stderr, "%s: ", modulname);
-       fprintf(stderr, format, a1, a2, a3, a4);
+       vfprintf(stderr, format, ap);
        if (tail) fprintf(stderr, " (%s)\n", tail);
        else putc('\n', stderr);
 }