]> granicus.if.org Git - graphviz/commitdiff
change errorv calling convention to explicitly take a format string
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 8 Aug 2020 00:04:04 +0000 (17:04 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 13 Aug 2020 14:38:13 +0000 (07:38 -0700)
This function implicitly assumed its variable arguments contained a format
string as the first argument. This change pushes the assumption into the calling
convention, making it visible to the compiler.

lib/ast/error.c
lib/ast/error.h
lib/gvpr/gvpr.c

index 8d98682ef39effb6660115e298ce4539fc5f2030..983938255dcdd62c814f1a60ed8646e628823f08 100644 (file)
@@ -40,9 +40,8 @@ void setErrorErrors (int errors) { error_info.errors = errors; }
 int  getErrorErrors () { return error_info.errors; }
 void setTraceLevel (int i) { error_info.trace = i; }
 
-void errorv(const char *id, int level, va_list ap)
+void errorv(const char *id, int level, const char *s, va_list ap)
 {
-    const char *s;
     int flags;
 
     if (level < error_info.trace) return;
@@ -80,7 +79,6 @@ void errorv(const char *id, int level, va_list ap)
            sfprintf(sfstderr, "line %d: ", error_info.line);
        }
     }
-    s = va_arg(ap, char *);
     sfvprintf(sfstderr, s, ap);
     if (flags & ERROR_SYSTEM)
        sfprintf(sfstderr, "\n%s", strerror(errno));
@@ -92,18 +90,22 @@ void errorv(const char *id, int level, va_list ap)
 void error(int level, ...)
 {
     va_list ap;
+    const char *s;
 
     va_start(ap, level);
-    errorv(NiL, level, ap);
+    s = va_arg(ap, char *);
+    errorv(NiL, level, s, ap);
     va_end(ap);
 }
 
 void errorf(void *handle, void *discipline, int level, ...)
 {
     va_list ap;
+    const char *s;
 
     va_start(ap, level);
+    s = va_arg(ap, char *);
     errorv((discipline
-           && handle) ? *((char **) handle) : (char *) handle, level, ap);
+           && handle) ? *((char **) handle) : (char *) handle, level, s, ap);
     va_end(ap);
 }
index 58106b07e75ab960778160568a4f8e29d9441505..47b0a681c92c7d6a8f8d87eef8f2dce6faf368e5 100644 (file)
@@ -64,7 +64,7 @@ extern "C" {
 
     extern void error(int, ...);
     extern void errorf(void *, void *, int, ...);
-    extern void errorv(const char *, int, va_list);
+    extern void errorv(const char *, int, const char *, va_list);
 
 #endif
 
index d3e08b0cbae82dc300b7ae9755553c48f53a23a8..ce8c26f0a0ce598a172953c178c73f1a88670fa1 100644 (file)
@@ -906,10 +906,12 @@ static int
 gverrorf (Expr_t *handle, Exdisc_t *discipline, int level, ...)
 {
     va_list ap;
+    const char *s;
 
     va_start(ap, level);
+    s = va_arg(ap, char *);
     errorv((discipline
-           && handle) ? *((char **) handle) : (char *) handle, level, ap);
+           && handle) ? *((char **) handle) : (char *) handle, level, s, ap);
     va_end(ap);
 
     if (level >= ERROR_ERROR) {