summaryrefslogtreecommitdiff
path: root/usage.c
diff options
context:
space:
mode:
Diffstat (limited to 'usage.c')
-rw-r--r--usage.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/usage.c b/usage.c
index c488f3a..79856a2 100644
--- a/usage.c
+++ b/usage.c
@@ -7,14 +7,14 @@
static void report(const char *prefix, const char *err, va_list params)
{
- char msg[1024];
+ char msg[4096];
vsnprintf(msg, sizeof(msg), err, params);
fprintf(stderr, "%s%s\n", prefix, msg);
}
-static NORETURN void usage_builtin(const char *err)
+static NORETURN void usage_builtin(const char *err, va_list params)
{
- fprintf(stderr, "usage: %s\n", err);
+ report("usage: ", err, params);
exit(129);
}
@@ -36,7 +36,7 @@ static void warn_builtin(const char *warn, va_list params)
/* If we are in a dlopen()ed .so write to a global variable would segfault
* (ugh), so keep things static. */
-static NORETURN_PTR void (*usage_routine)(const char *err) = usage_builtin;
+static NORETURN_PTR void (*usage_routine)(const char *err, va_list params) = usage_builtin;
static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;
static void (*error_routine)(const char *err, va_list params) = error_builtin;
static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
@@ -46,9 +46,18 @@ void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list param
die_routine = routine;
}
+void usagef(const char *err, ...)
+{
+ va_list params;
+
+ va_start(params, err);
+ usage_routine(err, params);
+ va_end(params);
+}
+
void usage(const char *err)
{
- usage_routine(err);
+ usagef("%s", err);
}
void die(const char *err, ...)