shithub: sox

Download patch

ref: 1c25000a6fd8b53ec0f894232a560392aeb94ee1
parent: 34756e8fb8c0f3899c048322a23441cb735de3b7
author: rrt <rrt>
date: Thu Jan 18 19:25:18 EST 2007

Try to work around va_list assignment problem.

--- a/src/sox.c
+++ b/src/sox.c
@@ -145,11 +145,11 @@
 static char *myname = NULL;
 
 
-static void sox_output_message(int level, st_output_message_t m)
+static void sox_output_message(int level, const char *filename, const char *fmt, va_list ap)
 {
   if (st_output_verbosity_level >= level) {
     fprintf(stderr, "%s ", myname);
-    st_output_message(stderr, m);
+    st_output_message(stderr, filename, fmt, ap);
     fprintf(stderr, "\n");
   }
 }
--- a/src/st_i.h
+++ b/src/st_i.h
@@ -143,12 +143,10 @@
 double st_swapd(double d);
 
 /* util.c */
-struct st_output_message_s;
-typedef struct st_output_message_s * st_output_message_t;
-typedef void (* st_output_message_handler_t)(int level, st_output_message_t);
+typedef void (*st_output_message_handler_t)(int level, const char *filename, const char *fmt, va_list ap);
 extern st_output_message_handler_t st_output_message_handler;
 extern int st_output_verbosity_level;
-void st_output_message(FILE * file, st_output_message_t);
+void st_output_message(FILE *file, const char *filename, const char *fmt, va_list ap);
 
 void st_fail(const char *, ...);
 void st_warn(const char *, ...);
--- a/src/util.c
+++ b/src/util.c
@@ -21,31 +21,24 @@
 #include <ctype.h>
 #include <stdarg.h>
 
-struct st_output_message_s
-{
-  char const * filename;
-  char const * fmt;
-  va_list      ap;
-};
-
 st_output_message_handler_t st_output_message_handler = NULL;
 int st_output_verbosity_level = 2;
 
-void st_output_message(FILE * file, st_output_message_t message)
+void st_output_message(FILE *file, const char *filename, const char *fmt, va_list ap)
 {
   char buffer[10];
   char const * drivername;
   char const * dot_pos;
  
-  drivername = strrchr(message->filename, '/');
+  drivername = strrchr(filename, '/');
   if (drivername != NULL) {
     ++drivername;
   } else {
-    drivername = strrchr(message->filename, '\\');
+    drivername = strrchr(filename, '\\');
     if (drivername != NULL)
       ++drivername;
     else
-      drivername = message->filename;
+      drivername = filename;
   }
 
   dot_pos = strrchr(drivername, '.');
@@ -56,7 +49,7 @@
   }
 
   fprintf(file, "%s: ", drivername);
-  vfprintf(file, message->fmt, message->ap);
+  vfprintf(file, fmt, ap);
 }
 
 
@@ -70,16 +63,10 @@
 
 
 
-static void st_emit_message(int level, char const * fmt, va_list ap)
+static void st_emit_message(int level, char const *fmt, va_list ap)
 {
   if (st_output_message_handler != NULL)
-  {
-    struct st_output_message_s m;
-    m.filename = st_message_filename;
-    m.fmt = fmt;
-    m.ap = ap;
-    (*st_output_message_handler)(level, &m);
-  }
+    (*st_output_message_handler)(level, st_message_filename, fmt, ap);
 }