From 80fc20d1d69b14f36ad9bb64d8af38481cbf1ff5 Mon Sep 17 00:00:00 2001 From: Laslo Hunhold Date: Fri, 18 May 2018 10:59:05 +0200 Subject: Add warn() and die() Given slstatus is a tool that runs in the background, most likely run from .xinitrc, it's important to prepend the name of the tool to error messages so it becomes clear where the error is coming from. To make this much more consistent, this commit adds warn() and die() utility functions consistent with other suckless projects and adapts all calls to fprintf(stderr, *) to the warn() and die() functions, greatly increasing the readability of the code. --- util.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'util.c') diff --git a/util.c b/util.c index 6113049..08f14ff 100644 --- a/util.c +++ b/util.c @@ -2,10 +2,52 @@ #include #include #include +#include #include #include "util.h" +char *argv0; + +static void +verr(const char *fmt, va_list ap) +{ + if (argv0 && strncmp(fmt, "usage", sizeof("usage") - 1)) { + fprintf(stderr, "%s: ", argv0); + } + + vfprintf(stderr, fmt, ap); + + if (fmt[0] && fmt[strlen(fmt) - 1] == ':') { + fputc(' ', stderr); + perror(NULL); + } else { + fputc('\n', stderr); + } +} + +void +warn(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + verr(fmt, ap); + va_end(ap); +} + +void +die(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + verr(fmt, ap); + va_end(ap); + + exit(1); +} + const char * bprintf(const char *fmt, ...) { @@ -14,9 +56,9 @@ bprintf(const char *fmt, ...) va_start(ap, fmt); if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) { - fprintf(stderr, "vsnprintf: %s\n", strerror(errno)); + warn("vsnprintf:"); } else if ((size_t)ret >= sizeof(buf)) { - fprintf(stderr, "vsnprintf: Output truncated\n"); + warn("vsnprintf: Output truncated"); } va_end(ap); @@ -31,7 +73,7 @@ pscanf(const char *path, const char *fmt, ...) int n; if (!(fp = fopen(path, "r"))) { - fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno)); + warn("fopen '%s':", path); return -1; } va_start(ap, fmt); -- cgit v1.2.3