[hackers] [slstatus] Add warn() and die() || Laslo Hunhold
commit 80fc20d1d69b14f36ad9bb64d8af38481cbf1ff5
Author: Laslo Hunhold <dev_AT_frign.de>
AuthorDate: Fri May 18 10:59:05 2018 +0200
Commit: Aaron Marcher <me_AT_drkhsh.at>
CommitDate: Fri May 18 11:13:05 2018 +0200
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.
diff --git a/components/battery.c b/components/battery.c
index 49f43e6..807a7e6 100644
--- a/components/battery.c
+++ b/components/battery.c
_AT_@ -59,13 +59,12 @@
fd = open("/dev/apm", O_RDONLY);
if (fd < 0) {
- fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
+ warn("open '/dev/apm':");
return NULL;
}
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
- fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n",
- strerror(errno));
+ warn("ioctl 'APM_IOC_GETPOWER':");
close(fd);
return NULL;
}
_AT_@ -90,13 +89,12 @@
fd = open("/dev/apm", O_RDONLY);
if (fd < 0) {
- fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
+ warn("open '/dev/apm':");
return NULL;
}
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
- fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n",
- strerror(errno));
+ warn("ioctl 'APM_IOC_GETPOWER':");
close(fd);
return NULL;
}
diff --git a/components/cpu.c b/components/cpu.c
index 02e7671..b9b3924 100644
--- a/components/cpu.c
+++ b/components/cpu.c
_AT_@ -57,7 +57,7 @@
size = sizeof(freq);
if (sysctl(mib, 2, &freq, &size, NULL, 0) < 0) {
- fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno));
+ warn("sysctl 'HW_CPUSPEED':");
return NULL;
}
_AT_@ -80,7 +80,7 @@
memcpy(b, a, sizeof(b));
if (sysctl(mib, 2, &a, &size, NULL, 0) < 0) {
- fprintf(stderr, "sysctl 'KERN_CPTIME': %s\n", strerror(errno));
+ warn("sysctl 'KERN_CPTIME':");
return NULL;
}
if (!valid) {
diff --git a/components/datetime.c b/components/datetime.c
index 12d7717..c3efae3 100644
--- a/components/datetime.c
+++ b/components/datetime.c
_AT_@ -11,7 +11,7 @@ datetime(const char *fmt)
t = time(NULL);
if (!strftime(buf, sizeof(buf), fmt, localtime(&t))) {
- fprintf(stderr, "strftime: Result string exceeds buffer size\n");
+ warn("strftime: Result string exceeds buffer size");
return NULL;
}
diff --git a/components/disk.c b/components/disk.c
index bf69875..f4031ea 100644
--- a/components/disk.c
+++ b/components/disk.c
_AT_@ -12,7 +12,7 @@ disk_free(const char *mnt)
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
_AT_@ -26,7 +26,7 @@ disk_perc(const char *mnt)
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
_AT_@ -40,7 +40,7 @@ disk_total(const char *mnt)
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
_AT_@ -54,7 +54,7 @@ disk_used(const char *mnt)
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
diff --git a/components/hostname.c b/components/hostname.c
index d41465f..dc3bbf1 100644
--- a/components/hostname.c
+++ b/components/hostname.c
_AT_@ -10,7 +10,7 @@ const char *
hostname(void)
{
if (gethostname(buf, sizeof(buf)) < 0) {
- fprintf(stderr, "gethostbyname: %s\n", strerror(errno));
+ warn("gethostbyname:");
return NULL;
}
diff --git a/components/ip.c b/components/ip.c
index 85ac15e..fce2b66 100644
--- a/components/ip.c
+++ b/components/ip.c
_AT_@ -19,7 +19,7 @@ ipv4(const char *iface)
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
+ warn("getifaddrs:");
return NULL;
}
_AT_@ -32,7 +32,7 @@ ipv4(const char *iface)
if (!strcmp(ifa->ifa_name, iface) &&
(ifa->ifa_addr->sa_family == AF_INET)) {
if (s != 0) {
- fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s));
+ warn("getnameinfo: %s", gai_strerror(s));
return NULL;
}
return bprintf("%s", host);
_AT_@ -52,7 +52,7 @@ ipv6(const char *iface)
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
+ warn("getifaddrs:");
return NULL;
}
_AT_@ -65,7 +65,7 @@ ipv6(const char *iface)
if (!strcmp(ifa->ifa_name, iface) &&
(ifa->ifa_addr->sa_family == AF_INET6)) {
if (s != 0) {
- fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s));
+ warn("getnameinfo: %s", gai_strerror(s));
return NULL;
}
return bprintf("%s", host);
diff --git a/components/kernel_release.c b/components/kernel_release.c
index 4e67a28..531014c 100644
--- a/components/kernel_release.c
+++ b/components/kernel_release.c
_AT_@ -12,7 +12,7 @@ kernel_release(void)
struct utsname udata;
if (uname(&udata) < 0) {
- fprintf(stderr, "uname: %s\n", strerror(errno));
+ warn("uname:");
return NULL;
}
diff --git a/components/keyboard_indicators.c b/components/keyboard_indicators.c
index 2f831c8..73ba32e 100644
--- a/components/keyboard_indicators.c
+++ b/components/keyboard_indicators.c
_AT_@ -11,7 +11,7 @@ keyboard_indicators(void)
XKeyboardState state;
if (!(dpy = XOpenDisplay(NULL))) {
- fprintf(stderr, "Cannot open display\n");
+ warn("XOpenDisplay: Failed to open display");
return NULL;
}
XGetKeyboardControl(dpy, &state);
diff --git a/components/load_avg.c b/components/load_avg.c
index 526dc71..ea7bc2c 100644
--- a/components/load_avg.c
+++ b/components/load_avg.c
_AT_@ -10,7 +10,7 @@ load_avg(const char *fmt)
double avgs[3];
if (getloadavg(avgs, 3) < 0) {
- fprintf(stderr, "getloadavg: Could not obtain load average.\n");
+ warn("getloadavg: Failed to obtain load average");
return NULL;
}
diff --git a/components/num_files.c b/components/num_files.c
index 327a64d..9179037 100644
--- a/components/num_files.c
+++ b/components/num_files.c
_AT_@ -14,7 +14,7 @@ num_files(const char *dir)
int num;
if (!(fd = opendir(dir))) {
- fprintf(stderr, "opendir '%s': %s\n", dir, strerror(errno));
+ warn("opendir '%s':", dir);
return NULL;
}
diff --git a/components/run_command.c b/components/run_command.c
index 1aaae20..b5eeff0 100644
--- a/components/run_command.c
+++ b/components/run_command.c
_AT_@ -12,7 +12,7 @@ run_command(const char *cmd)
FILE *fp;
if (!(fp = popen(cmd, "r"))) {
- fprintf(stderr, "popen '%s': %s\n", cmd, strerror(errno));
+ warn("popen '%s':", cmd);
return NULL;
}
p = fgets(buf, sizeof(buf) - 1, fp);
diff --git a/components/swap.c b/components/swap.c
index caa4788..234e7d1 100644
--- a/components/swap.c
+++ b/components/swap.c
_AT_@ -13,11 +13,11 @@
size_t bytes_read;
if (!(fp = fopen(path, "r"))) {
- fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno));
+ warn("fopen '%s':", path);
return 0;
}
if (!(bytes_read = fread(buf, sizeof(char), bufsiz, fp))) {
- fprintf(stderr, "fread '%s': %s\n", path, strerror(errno));
+ warn("fread '%s':", path);
fclose(fp);
return 0;
}
_AT_@ -139,21 +139,21 @@
nswap = swapctl(SWAP_NSWAP, 0, 0);
if (nswap < 1) {
- fprintf(stderr, "swaptctl 'SWAP_NSWAP': %s\n", strerror(errno));
+ warn("swaptctl 'SWAP_NSWAP':");
}
fsep = sep = calloc(nswap, sizeof(*sep));
if (!sep) {
- fprintf(stderr, "calloc 'nswap': %s\n", strerror(errno));
+ warn("calloc 'nswap':");
}
rnswap = swapctl(SWAP_STATS, (void *)sep, nswap);
if (rnswap < 0) {
- fprintf(stderr, "swapctl 'SWAP_STATA': %s\n", strerror(errno));
+ warn("swapctl 'SWAP_STATA':");
}
if (nswap != rnswap) {
- fprintf(stderr, "SWAP_STATS != SWAP_NSWAP\n");
+ warn("getstats: SWAP_STATS != SWAP_NSWAP");
}
*total = 0;
diff --git a/components/temperature.c b/components/temperature.c
index 812ae77..64199f5 100644
--- a/components/temperature.c
+++ b/components/temperature.c
_AT_@ -36,8 +36,7 @@
size = sizeof(temp);
if (sysctl(mib, 5, &temp, &size, NULL, 0) < 0) {
- fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n",
- strerror(errno));
+ warn("sysctl 'SENSOR_TEMP':");
return NULL;
}
diff --git a/components/uptime.c b/components/uptime.c
index 981f3cd..45e12db 100644
--- a/components/uptime.c
+++ b/components/uptime.c
_AT_@ -50,7 +50,7 @@ format(int uptime)
size = sizeof(boottime);
if (sysctl(mib, 2, &boottime, &size, NULL, 0) < 0) {
- fprintf(stderr, "sysctl 'KERN_BOOTTIME': %s\n", strerror(errno));
+ warn("sysctl 'KERN_BOOTTIME':");
return NULL;
}
diff --git a/components/user.c b/components/user.c
index 8ab6db9..cd503f6 100644
--- a/components/user.c
+++ b/components/user.c
_AT_@ -20,7 +20,7 @@ username(void)
struct passwd *pw;
if (!(pw = getpwuid(geteuid()))) {
- fprintf(stderr, "getpwuid '%d': %s\n", geteuid(), strerror(errno));
+ warn("getpwuid '%d':", geteuid());
return NULL;
}
diff --git a/components/volume.c b/components/volume.c
index aa46446..8674211 100644
--- a/components/volume.c
+++ b/components/volume.c
_AT_@ -21,21 +21,19 @@ vol_perc(const char *card)
char *vnames[] = SOUND_DEVICE_NAMES;
if ((afd = open(card, O_RDONLY | O_NONBLOCK)) < 0) {
- fprintf(stderr, "open '%s': %s\n", card, strerror(errno));
+ warn("open '%s':", card);
return NULL;
}
if (ioctl(afd, (int)SOUND_MIXER_READ_DEVMASK, &devmask) < 0) {
- fprintf(stderr, "ioctl 'SOUND_MIXER_READ_DEVMASK': %s\n",
- strerror(errno));
+ warn("ioctl 'SOUND_MIXER_READ_DEVMASK':");
close(afd);
return NULL;
}
for (i = 0; i < LEN(vnames); i++) {
if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
if (ioctl(afd, MIXER_READ(i), &v) < 0) {
- fprintf(stderr, "ioctl 'MIXER_READ(%ld)': %s\n", i,
- strerror(errno));
+ warn("ioctl 'MIXER_READ(%ld)':", i);
close(afd);
return NULL;
}
diff --git a/components/wifi.c b/components/wifi.c
index 414d533..591f6ad 100644
--- a/components/wifi.c
+++ b/components/wifi.c
_AT_@ -26,8 +26,7 @@
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
"/operstate");
if (!(fp = fopen(path, "r"))) {
- fprintf(stderr, "fopen '%s': %s\n", path,
- strerror(errno));
+ warn("fopen '%s':", path);
return NULL;
}
p = fgets(status, 5, fp);
_AT_@ -37,8 +36,7 @@
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
- fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
- strerror(errno));
+ warn("fopen '/proc/net/wireless':");
return NULL;
}
_AT_@ -74,13 +72,12 @@
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- fprintf(stderr, "socket 'AF_INET': %s\n",
- strerror(errno));
+ warn("socket 'AF_INET':");
return NULL;
}
wreq.u.essid.pointer = id;
if (ioctl(sockfd,SIOCGIWESSID, &wreq) < 0) {
- fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno));
+ warn("ioctl 'SIOCGIWESSID':");
close(sockfd);
return NULL;
}
_AT_@ -111,22 +108,19 @@
memset(&bssid, 0, sizeof(bssid));
memset(nr, 0, sizeof(struct ieee80211_nodereq));
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- fprintf(stderr, "socket 'AF_INET': %s\n",
- strerror(errno));
+ warn("socket 'AF_INET':");
return 0;
}
strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
- fprintf(stderr, "ioctl 'SIOCG80211BSSID': %s\n",
- strerror(errno));
+ warn("ioctl 'SIOCG80211BSSID':");
close(sockfd);
return 0;
}
strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
- fprintf(stderr, "ioctl 'SIOCG80211NODE': %s\n",
- strerror(errno));
+ warn("ioctl 'SIOCG80211NODE':");
close(sockfd);
return 0;
}
diff --git a/slstatus.c b/slstatus.c
index 7ff323f..0c4605f 100644
--- a/slstatus.c
+++ b/slstatus.c
_AT_@ -17,7 +17,6 @@ struct arg {
const char *args;
};
-char *argv0;
char buf[1024];
static int done;
static Display *dpy;
_AT_@ -43,8 +42,7 @@ difftimespec(struct timespec *res, struct timespec *a, struct timespec *b)
static void
usage(void)
{
- fprintf(stderr, "usage: %s [-s]\n", argv0);
- exit(1);
+ die("usage: %s [-s]", argv0);
}
int
_AT_@ -80,14 +78,12 @@ main(int argc, char *argv[])
}
if (!sflag && !(dpy = XOpenDisplay(NULL))) {
- fprintf(stderr, "XOpenDisplay: Failed to open display\n");
- return 1;
+ die("XOpenDisplay: Failed to open display");
}
while (!done) {
if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) {
- fprintf(stderr, "clock_gettime: %s\n", strerror(errno));
- return 1;
+ die("clock_gettime:");
}
status[0] = '\0';
_AT_@ -97,11 +93,10 @@ main(int argc, char *argv[])
}
if ((ret = snprintf(status + len, sizeof(status) - len,
args[i].fmt, res)) < 0) {
- fprintf(stderr, "snprintf: %s\n",
- strerror(errno));
+ warn("snprintf:");
break;
} else if ((size_t)ret >= sizeof(status) - len) {
- fprintf(stderr, "snprintf: Output truncated\n");
+ warn("snprintf: Output truncated");
break;
}
len += ret;
_AT_@ -111,18 +106,14 @@ main(int argc, char *argv[])
printf("%s\n", status);
} else {
if (XStoreName(dpy, DefaultRootWindow(dpy), status) < 0) {
- fprintf(stderr,
- "XStoreName: Allocation failed\n");
- return 1;
+ die("XStoreName: Allocation failed");
}
XFlush(dpy);
}
if (!done) {
if (clock_gettime(CLOCK_MONOTONIC, ¤t) < 0) {
- fprintf(stderr, "clock_gettime: %s\n",
- strerror(errno));
- return 1;
+ die("clock_gettime:");
}
difftimespec(&diff, ¤t, &start);
_AT_@ -133,9 +124,7 @@ main(int argc, char *argv[])
if (wait.tv_sec >= 0) {
if (nanosleep(&wait, NULL) < 0 &&
errno != EINTR) {
- fprintf(stderr, "nanosleep: %s\n",
- strerror(errno));
- return 1;
+ die("nanosleep:");
}
}
}
_AT_@ -144,9 +133,7 @@ main(int argc, char *argv[])
if (!sflag) {
XStoreName(dpy, DefaultRootWindow(dpy), NULL);
if (XCloseDisplay(dpy) < 0) {
- fprintf(stderr,
- "XCloseDisplay: Failed to close display\n");
- return 1;
+ die("XCloseDisplay: Failed to close display");
}
}
diff --git a/util.c b/util.c
index 6113049..08f14ff 100644
--- a/util.c
+++ b/util.c
_AT_@ -2,10 +2,52 @@
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#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, ...)
{
_AT_@ -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);
_AT_@ -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);
diff --git a/util.h b/util.h
index e90c29d..a73b103 100644
--- a/util.h
+++ b/util.h
_AT_@ -3,5 +3,10 @@ extern char buf[1024];
#define LEN(x) (sizeof (x) / sizeof *(x))
+extern char *argv0;
+
+void warn(const char *, ...);
+void die(const char *, ...);
+
const char *bprintf(const char *fmt, ...);
int pscanf(const char *path, const char *fmt, ...);
Received on Fri May 18 2018 - 11:13:17 CEST
This archive was generated by hypermail 2.3.0
: Fri May 18 2018 - 11:24:24 CEST