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);
}