Quellcode durchsuchen

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.
master
Laslo Hunhold vor 6 Jahren
committed by Aaron Marcher
Ursprung
Commit
80fc20d1d6
20 geänderte Dateien mit 99 neuen und 76 gelöschten Zeilen
  1. +4
    -6
      components/battery.c
  2. +2
    -2
      components/cpu.c
  3. +1
    -1
      components/datetime.c
  4. +4
    -4
      components/disk.c
  5. +1
    -1
      components/hostname.c
  6. +4
    -4
      components/ip.c
  7. +1
    -1
      components/kernel_release.c
  8. +1
    -1
      components/keyboard_indicators.c
  9. +1
    -1
      components/load_avg.c
  10. +1
    -1
      components/num_files.c
  11. +1
    -1
      components/run_command.c
  12. +6
    -6
      components/swap.c
  13. +1
    -2
      components/temperature.c
  14. +1
    -1
      components/uptime.c
  15. +1
    -1
      components/user.c
  16. +3
    -5
      components/volume.c
  17. +7
    -13
      components/wifi.c
  18. +9
    -22
      slstatus.c
  19. +45
    -3
      util.c
  20. +5
    -0
      util.h

+ 4
- 6
components/battery.c Datei anzeigen

@@ -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;
}
@@ -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;
}


+ 2
- 2
components/cpu.c Datei anzeigen

@@ -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;
}

@@ -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) {


+ 1
- 1
components/datetime.c Datei anzeigen

@@ -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;
}



+ 4
- 4
components/disk.c Datei anzeigen

@@ -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;
}

@@ -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;
}

@@ -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;
}

@@ -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;
}



+ 1
- 1
components/hostname.c Datei anzeigen

@@ -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;
}



+ 4
- 4
components/ip.c Datei anzeigen

@@ -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;
}

@@ -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);
@@ -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;
}

@@ -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);


+ 1
- 1
components/kernel_release.c Datei anzeigen

@@ -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;
}



+ 1
- 1
components/keyboard_indicators.c Datei anzeigen

@@ -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);


+ 1
- 1
components/load_avg.c Datei anzeigen

@@ -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;
}



+ 1
- 1
components/num_files.c Datei anzeigen

@@ -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;
}



+ 1
- 1
components/run_command.c Datei anzeigen

@@ -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);


+ 6
- 6
components/swap.c Datei anzeigen

@@ -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;
}
@@ -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;


+ 1
- 2
components/temperature.c Datei anzeigen

@@ -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;
}



+ 1
- 1
components/uptime.c Datei anzeigen

@@ -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;
}



+ 1
- 1
components/user.c Datei anzeigen

@@ -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;
}



+ 3
- 5
components/volume.c Datei anzeigen

@@ -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;
}


+ 7
- 13
components/wifi.c Datei anzeigen

@@ -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);
@@ -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;
}

@@ -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;
}
@@ -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;
}


+ 9
- 22
slstatus.c Datei anzeigen

@@ -17,7 +17,6 @@ struct arg {
const char *args;
};

char *argv0;
char buf[1024];
static int done;
static Display *dpy;
@@ -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
@@ -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';
@@ -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;
@@ -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, &current) < 0) {
fprintf(stderr, "clock_gettime: %s\n",
strerror(errno));
return 1;
die("clock_gettime:");
}
difftimespec(&diff, &current, &start);

@@ -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:");
}
}
}
@@ -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");
}
}



+ 45
- 3
util.c Datei anzeigen

@@ -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, ...)
{
@@ -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);


+ 5
- 0
util.h Datei anzeigen

@@ -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, ...);

Laden…
Abbrechen
Speichern