From 1ebd40b46b5e36f9bf3df2d0d05119b2a569ff1e Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Wed, 26 Aug 2026 23:45:04 -0400 Subject: oops I know how to use varargs now --- daemonize.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/daemonize.c b/daemonize.c index 001f260..c7d7dd2 100644 --- a/daemonize.c +++ b/daemonize.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -16,26 +17,29 @@ const struct option longopts[] = { }; const char* optstring = "dn1:2:"; -void q (char* m) { - fprintf(stderr, "%s\n", m); +void q (char* fmt, ...) { + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); exit(1); } -void qusage () { - q("[daemonize] Usage: daemonize [-d|--chdir] [-n|--noclose] [-1|--log-stdout /path/to/log] [-2|--log-stderr /path/to/log] "); +void qusage (const char* arg0) { + q("[daemonize] Usage: %s [-d|--chdir] [-n|--noclose] [-1|--log-stdout /path/to/log] [-2|--log-stderr /path/to/log] \n", arg0); } -void qtoofewargs () { +void qtoofewargs (const char* arg0) { fprintf(stderr, "[daemonize] Too few arguments.\n"); - qusage(); + qusage(arg0); } -void qinvalidarg (char* arg) { +void qinvalidarg (const char* arg, const char* arg0) { fprintf(stderr, "[daemonize] Unrecognized argument: %s\n", arg); - qusage(); + qusage(arg0); } -char* lowerdup (char* a) { +char* lowerdup (const char* a) { char* b = strdup(a); int i; for (i = 0; b[i] != 0; i++) { @@ -52,7 +56,7 @@ struct opts { }; void parseargs(int argc, char** argv, struct opts* savedopts) { - if (argc < 2) qtoofewargs(); + if (argc < 2) qtoofewargs(argv[0]); int c; while ((c = getopt_long(argc, argv, optstring, longopts, NULL)) != -1) { @@ -73,7 +77,7 @@ void parseargs(int argc, char** argv, struct opts* savedopts) { break; default: // getopt will have printed an error already - qusage(); + qusage(argv[0]); } } } @@ -101,7 +105,7 @@ int main (int argc, char** argv) { char cmd[cmdlen]; memcpy(cmd, buffer, cmdlen); free(buffer); - if (cmdlen < 1) qtoofewargs(); + if (cmdlen < 1) qtoofewargs(argv[0]); // Set up logs as appropriate int logs = options.stdlog || options.errlog; -- cgit v1.2.3