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.
20 files changed:
fd = open("/dev/apm", O_RDONLY);
if (fd < 0) {
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) {
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;
}
close(fd);
return NULL;
}
fd = open("/dev/apm", O_RDONLY);
if (fd < 0) {
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) {
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;
}
close(fd);
return NULL;
}
size = sizeof(freq);
if (sysctl(mib, 2, &freq, &size, NULL, 0) < 0) {
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':");
memcpy(b, a, sizeof(b));
if (sysctl(mib, 2, &a, &size, NULL, 0) < 0) {
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) {
return NULL;
}
if (!valid) {
t = time(NULL);
if (!strftime(buf, sizeof(buf), fmt, localtime(&t))) {
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");
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
hostname(void)
{
if (gethostname(buf, sizeof(buf)) < 0) {
hostname(void)
{
if (gethostname(buf, sizeof(buf)) < 0) {
- fprintf(stderr, "gethostbyname: %s\n", strerror(errno));
+ warn("gethostbyname:");
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
if (!strcmp(ifa->ifa_name, iface) &&
(ifa->ifa_addr->sa_family == AF_INET)) {
if (s != 0) {
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);
return NULL;
}
return bprintf("%s", host);
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
if (!strcmp(ifa->ifa_name, iface) &&
(ifa->ifa_addr->sa_family == AF_INET6)) {
if (s != 0) {
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);
return NULL;
}
return bprintf("%s", host);
struct utsname udata;
if (uname(&udata) < 0) {
struct utsname udata;
if (uname(&udata) < 0) {
- fprintf(stderr, "uname: %s\n", strerror(errno));
XKeyboardState state;
if (!(dpy = XOpenDisplay(NULL))) {
XKeyboardState state;
if (!(dpy = XOpenDisplay(NULL))) {
- fprintf(stderr, "Cannot open display\n");
+ warn("XOpenDisplay: Failed to open display");
return NULL;
}
XGetKeyboardControl(dpy, &state);
return NULL;
}
XGetKeyboardControl(dpy, &state);
double avgs[3];
if (getloadavg(avgs, 3) < 0) {
double avgs[3];
if (getloadavg(avgs, 3) < 0) {
- fprintf(stderr, "getloadavg: Could not obtain load average.\n");
+ warn("getloadavg: Failed to obtain load average");
int num;
if (!(fd = opendir(dir))) {
int num;
if (!(fd = opendir(dir))) {
- fprintf(stderr, "opendir '%s': %s\n", dir, strerror(errno));
+ warn("opendir '%s':", dir);
FILE *fp;
if (!(fp = popen(cmd, "r"))) {
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);
return NULL;
}
p = fgets(buf, sizeof(buf) - 1, fp);
size_t bytes_read;
if (!(fp = fopen(path, "r"))) {
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))) {
return 0;
}
if (!(bytes_read = fread(buf, sizeof(char), bufsiz, fp))) {
- fprintf(stderr, "fread '%s': %s\n", path, strerror(errno));
+ warn("fread '%s':", path);
nswap = swapctl(SWAP_NSWAP, 0, 0);
if (nswap < 1) {
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) {
}
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) {
}
rnswap = swapctl(SWAP_STATS, (void *)sep, nswap);
if (rnswap < 0) {
- fprintf(stderr, "swapctl 'SWAP_STATA': %s\n", strerror(errno));
+ warn("swapctl 'SWAP_STATA':");
- fprintf(stderr, "SWAP_STATS != SWAP_NSWAP\n");
+ warn("getstats: SWAP_STATS != SWAP_NSWAP");
size = sizeof(temp);
if (sysctl(mib, 5, &temp, &size, NULL, 0) < 0) {
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':");
size = sizeof(boottime);
if (sysctl(mib, 2, &boottime, &size, NULL, 0) < 0) {
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':");
struct passwd *pw;
if (!(pw = getpwuid(geteuid()))) {
struct passwd *pw;
if (!(pw = getpwuid(geteuid()))) {
- fprintf(stderr, "getpwuid '%d': %s\n", geteuid(), strerror(errno));
+ warn("getpwuid '%d':", geteuid());
char *vnames[] = SOUND_DEVICE_NAMES;
if ((afd = open(card, O_RDONLY | O_NONBLOCK)) < 0) {
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) {
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) {
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;
}
close(afd);
return NULL;
}
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
"/operstate");
if (!(fp = fopen(path, "r"))) {
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);
return NULL;
}
p = fgets(status, 5, fp);
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
- fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
- strerror(errno));
+ warn("fopen '/proc/net/wireless':");
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
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) {
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;
}
close(sockfd);
return NULL;
}
memset(&bssid, 0, sizeof(bssid));
memset(nr, 0, sizeof(struct ieee80211_nodereq));
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
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) {
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) {
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;
}
close(sockfd);
return 0;
}
char buf[1024];
static int done;
static Display *dpy;
char buf[1024];
static int done;
static Display *dpy;
static void
usage(void)
{
static void
usage(void)
{
- fprintf(stderr, "usage: %s [-s]\n", argv0);
- exit(1);
+ die("usage: %s [-s]", argv0);
}
if (!sflag && !(dpy = XOpenDisplay(NULL))) {
}
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) {
}
while (!done) {
if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) {
- fprintf(stderr, "clock_gettime: %s\n", strerror(errno));
- return 1;
}
if ((ret = snprintf(status + len, sizeof(status) - len,
args[i].fmt, res)) < 0) {
}
if ((ret = snprintf(status + len, sizeof(status) - len,
args[i].fmt, res)) < 0) {
- fprintf(stderr, "snprintf: %s\n",
- strerror(errno));
break;
} else if ((size_t)ret >= sizeof(status) - len) {
break;
} else if ((size_t)ret >= sizeof(status) - len) {
- fprintf(stderr, "snprintf: Output truncated\n");
+ warn("snprintf: Output truncated");
printf("%s\n", status);
} else {
if (XStoreName(dpy, DefaultRootWindow(dpy), status) < 0) {
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) {
}
XFlush(dpy);
}
if (!done) {
if (clock_gettime(CLOCK_MONOTONIC, ¤t) < 0) {
- fprintf(stderr, "clock_gettime: %s\n",
- strerror(errno));
- return 1;
}
difftimespec(&diff, ¤t, &start);
}
difftimespec(&diff, ¤t, &start);
if (wait.tv_sec >= 0) {
if (nanosleep(&wait, NULL) < 0 &&
errno != EINTR) {
if (wait.tv_sec >= 0) {
if (nanosleep(&wait, NULL) < 0 &&
errno != EINTR) {
- fprintf(stderr, "nanosleep: %s\n",
- strerror(errno));
- return 1;
if (!sflag) {
XStoreName(dpy, DefaultRootWindow(dpy), NULL);
if (XCloseDisplay(dpy) < 0) {
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");
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "util.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, ...)
{
const char *
bprintf(const char *fmt, ...)
{
va_start(ap, fmt);
if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) {
va_start(ap, fmt);
if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) {
- fprintf(stderr, "vsnprintf: %s\n", strerror(errno));
} else if ((size_t)ret >= sizeof(buf)) {
} else if ((size_t)ret >= sizeof(buf)) {
- fprintf(stderr, "vsnprintf: Output truncated\n");
+ warn("vsnprintf: Output truncated");
int n;
if (!(fp = fopen(path, "r"))) {
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);
return -1;
}
va_start(ap, fmt);
#define LEN(x) (sizeof (x) / sizeof *(x))
#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, ...);
const char *bprintf(const char *fmt, ...);
int pscanf(const char *path, const char *fmt, ...);