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.
This commit is contained in:
parent
a4fe8c9741
commit
80fc20d1d6
|
@ -59,13 +59,12 @@
|
||||||
|
|
||||||
fd = open("/dev/apm", O_RDONLY);
|
fd = open("/dev/apm", O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
|
warn("open '/dev/apm':");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
|
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
|
||||||
fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n",
|
warn("ioctl 'APM_IOC_GETPOWER':");
|
||||||
strerror(errno));
|
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -90,13 +89,12 @@
|
||||||
|
|
||||||
fd = open("/dev/apm", O_RDONLY);
|
fd = open("/dev/apm", O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
fprintf(stderr, "open '/dev/apm': %s\n", strerror(errno));
|
warn("open '/dev/apm':");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
|
if (ioctl(fd, APM_IOC_GETPOWER, &apm_info) < 0) {
|
||||||
fprintf(stderr, "ioctl 'APM_IOC_GETPOWER': %s\n",
|
warn("ioctl 'APM_IOC_GETPOWER':");
|
||||||
strerror(errno));
|
|
||||||
close(fd);
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
size = sizeof(freq);
|
size = sizeof(freq);
|
||||||
|
|
||||||
if (sysctl(mib, 2, &freq, &size, NULL, 0) < 0) {
|
if (sysctl(mib, 2, &freq, &size, NULL, 0) < 0) {
|
||||||
fprintf(stderr, "sysctl 'HW_CPUSPEED': %s\n", strerror(errno));
|
warn("sysctl 'HW_CPUSPEED':");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
memcpy(b, a, sizeof(b));
|
memcpy(b, a, sizeof(b));
|
||||||
if (sysctl(mib, 2, &a, &size, NULL, 0) < 0) {
|
if (sysctl(mib, 2, &a, &size, NULL, 0) < 0) {
|
||||||
fprintf(stderr, "sysctl 'KERN_CPTIME': %s\n", strerror(errno));
|
warn("sysctl 'KERN_CPTIME':");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ datetime(const char *fmt)
|
||||||
|
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
if (!strftime(buf, sizeof(buf), fmt, localtime(&t))) {
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ disk_free(const char *mnt)
|
||||||
struct statvfs fs;
|
struct statvfs fs;
|
||||||
|
|
||||||
if (statvfs(mnt, &fs) < 0) {
|
if (statvfs(mnt, &fs) < 0) {
|
||||||
fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
|
warn("statvfs '%s':", mnt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ disk_perc(const char *mnt)
|
||||||
struct statvfs fs;
|
struct statvfs fs;
|
||||||
|
|
||||||
if (statvfs(mnt, &fs) < 0) {
|
if (statvfs(mnt, &fs) < 0) {
|
||||||
fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
|
warn("statvfs '%s':", mnt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ disk_total(const char *mnt)
|
||||||
struct statvfs fs;
|
struct statvfs fs;
|
||||||
|
|
||||||
if (statvfs(mnt, &fs) < 0) {
|
if (statvfs(mnt, &fs) < 0) {
|
||||||
fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
|
warn("statvfs '%s':", mnt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ disk_used(const char *mnt)
|
||||||
struct statvfs fs;
|
struct statvfs fs;
|
||||||
|
|
||||||
if (statvfs(mnt, &fs) < 0) {
|
if (statvfs(mnt, &fs) < 0) {
|
||||||
fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
|
warn("statvfs '%s':", mnt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ const char *
|
||||||
hostname(void)
|
hostname(void)
|
||||||
{
|
{
|
||||||
if (gethostname(buf, sizeof(buf)) < 0) {
|
if (gethostname(buf, sizeof(buf)) < 0) {
|
||||||
fprintf(stderr, "gethostbyname: %s\n", strerror(errno));
|
warn("gethostbyname:");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ ipv4(const char *iface)
|
||||||
char host[NI_MAXHOST];
|
char host[NI_MAXHOST];
|
||||||
|
|
||||||
if (getifaddrs(&ifaddr) < 0) {
|
if (getifaddrs(&ifaddr) < 0) {
|
||||||
fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
|
warn("getifaddrs:");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ ipv4(const char *iface)
|
||||||
if (!strcmp(ifa->ifa_name, iface) &&
|
if (!strcmp(ifa->ifa_name, iface) &&
|
||||||
(ifa->ifa_addr->sa_family == AF_INET)) {
|
(ifa->ifa_addr->sa_family == AF_INET)) {
|
||||||
if (s != 0) {
|
if (s != 0) {
|
||||||
fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s));
|
warn("getnameinfo: %s", gai_strerror(s));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return bprintf("%s", host);
|
return bprintf("%s", host);
|
||||||
|
@ -52,7 +52,7 @@ ipv6(const char *iface)
|
||||||
char host[NI_MAXHOST];
|
char host[NI_MAXHOST];
|
||||||
|
|
||||||
if (getifaddrs(&ifaddr) < 0) {
|
if (getifaddrs(&ifaddr) < 0) {
|
||||||
fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
|
warn("getifaddrs:");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ ipv6(const char *iface)
|
||||||
if (!strcmp(ifa->ifa_name, iface) &&
|
if (!strcmp(ifa->ifa_name, iface) &&
|
||||||
(ifa->ifa_addr->sa_family == AF_INET6)) {
|
(ifa->ifa_addr->sa_family == AF_INET6)) {
|
||||||
if (s != 0) {
|
if (s != 0) {
|
||||||
fprintf(stderr, "getnameinfo: %s\n", gai_strerror(s));
|
warn("getnameinfo: %s", gai_strerror(s));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return bprintf("%s", host);
|
return bprintf("%s", host);
|
||||||
|
|
|
@ -12,7 +12,7 @@ kernel_release(void)
|
||||||
struct utsname udata;
|
struct utsname udata;
|
||||||
|
|
||||||
if (uname(&udata) < 0) {
|
if (uname(&udata) < 0) {
|
||||||
fprintf(stderr, "uname: %s\n", strerror(errno));
|
warn("uname:");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ keyboard_indicators(void)
|
||||||
XKeyboardState state;
|
XKeyboardState state;
|
||||||
|
|
||||||
if (!(dpy = XOpenDisplay(NULL))) {
|
if (!(dpy = XOpenDisplay(NULL))) {
|
||||||
fprintf(stderr, "Cannot open display\n");
|
warn("XOpenDisplay: Failed to open display");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
XGetKeyboardControl(dpy, &state);
|
XGetKeyboardControl(dpy, &state);
|
||||||
|
|
|
@ -10,7 +10,7 @@ load_avg(const char *fmt)
|
||||||
double avgs[3];
|
double avgs[3];
|
||||||
|
|
||||||
if (getloadavg(avgs, 3) < 0) {
|
if (getloadavg(avgs, 3) < 0) {
|
||||||
fprintf(stderr, "getloadavg: Could not obtain load average.\n");
|
warn("getloadavg: Failed to obtain load average");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ num_files(const char *dir)
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
if (!(fd = opendir(dir))) {
|
if (!(fd = opendir(dir))) {
|
||||||
fprintf(stderr, "opendir '%s': %s\n", dir, strerror(errno));
|
warn("opendir '%s':", dir);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ run_command(const char *cmd)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
if (!(fp = popen(cmd, "r"))) {
|
if (!(fp = popen(cmd, "r"))) {
|
||||||
fprintf(stderr, "popen '%s': %s\n", cmd, strerror(errno));
|
warn("popen '%s':", cmd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p = fgets(buf, sizeof(buf) - 1, fp);
|
p = fgets(buf, sizeof(buf) - 1, fp);
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
|
|
||||||
if (!(fp = fopen(path, "r"))) {
|
if (!(fp = fopen(path, "r"))) {
|
||||||
fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno));
|
warn("fopen '%s':", path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!(bytes_read = fread(buf, sizeof(char), bufsiz, fp))) {
|
if (!(bytes_read = fread(buf, sizeof(char), bufsiz, fp))) {
|
||||||
fprintf(stderr, "fread '%s': %s\n", path, strerror(errno));
|
warn("fread '%s':", path);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -139,21 +139,21 @@
|
||||||
|
|
||||||
nswap = swapctl(SWAP_NSWAP, 0, 0);
|
nswap = swapctl(SWAP_NSWAP, 0, 0);
|
||||||
if (nswap < 1) {
|
if (nswap < 1) {
|
||||||
fprintf(stderr, "swaptctl 'SWAP_NSWAP': %s\n", strerror(errno));
|
warn("swaptctl 'SWAP_NSWAP':");
|
||||||
}
|
}
|
||||||
|
|
||||||
fsep = sep = calloc(nswap, sizeof(*sep));
|
fsep = sep = calloc(nswap, sizeof(*sep));
|
||||||
if (!sep) {
|
if (!sep) {
|
||||||
fprintf(stderr, "calloc 'nswap': %s\n", strerror(errno));
|
warn("calloc 'nswap':");
|
||||||
}
|
}
|
||||||
|
|
||||||
rnswap = swapctl(SWAP_STATS, (void *)sep, nswap);
|
rnswap = swapctl(SWAP_STATS, (void *)sep, nswap);
|
||||||
if (rnswap < 0) {
|
if (rnswap < 0) {
|
||||||
fprintf(stderr, "swapctl 'SWAP_STATA': %s\n", strerror(errno));
|
warn("swapctl 'SWAP_STATA':");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nswap != rnswap) {
|
if (nswap != rnswap) {
|
||||||
fprintf(stderr, "SWAP_STATS != SWAP_NSWAP\n");
|
warn("getstats: SWAP_STATS != SWAP_NSWAP");
|
||||||
}
|
}
|
||||||
|
|
||||||
*total = 0;
|
*total = 0;
|
||||||
|
|
|
@ -36,8 +36,7 @@
|
||||||
size = sizeof(temp);
|
size = sizeof(temp);
|
||||||
|
|
||||||
if (sysctl(mib, 5, &temp, &size, NULL, 0) < 0) {
|
if (sysctl(mib, 5, &temp, &size, NULL, 0) < 0) {
|
||||||
fprintf(stderr, "sysctl 'SENSOR_TEMP': %s\n",
|
warn("sysctl 'SENSOR_TEMP':");
|
||||||
strerror(errno));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ format(int uptime)
|
||||||
size = sizeof(boottime);
|
size = sizeof(boottime);
|
||||||
|
|
||||||
if (sysctl(mib, 2, &boottime, &size, NULL, 0) < 0) {
|
if (sysctl(mib, 2, &boottime, &size, NULL, 0) < 0) {
|
||||||
fprintf(stderr, "sysctl 'KERN_BOOTTIME': %s\n", strerror(errno));
|
warn("sysctl 'KERN_BOOTTIME':");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ username(void)
|
||||||
struct passwd *pw;
|
struct passwd *pw;
|
||||||
|
|
||||||
if (!(pw = getpwuid(geteuid()))) {
|
if (!(pw = getpwuid(geteuid()))) {
|
||||||
fprintf(stderr, "getpwuid '%d': %s\n", geteuid(), strerror(errno));
|
warn("getpwuid '%d':", geteuid());
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,21 +21,19 @@ vol_perc(const char *card)
|
||||||
char *vnames[] = SOUND_DEVICE_NAMES;
|
char *vnames[] = SOUND_DEVICE_NAMES;
|
||||||
|
|
||||||
if ((afd = open(card, O_RDONLY | O_NONBLOCK)) < 0) {
|
if ((afd = open(card, O_RDONLY | O_NONBLOCK)) < 0) {
|
||||||
fprintf(stderr, "open '%s': %s\n", card, strerror(errno));
|
warn("open '%s':", card);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(afd, (int)SOUND_MIXER_READ_DEVMASK, &devmask) < 0) {
|
if (ioctl(afd, (int)SOUND_MIXER_READ_DEVMASK, &devmask) < 0) {
|
||||||
fprintf(stderr, "ioctl 'SOUND_MIXER_READ_DEVMASK': %s\n",
|
warn("ioctl 'SOUND_MIXER_READ_DEVMASK':");
|
||||||
strerror(errno));
|
|
||||||
close(afd);
|
close(afd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (i = 0; i < LEN(vnames); i++) {
|
for (i = 0; i < LEN(vnames); i++) {
|
||||||
if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
|
if (devmask & (1 << i) && !strcmp("vol", vnames[i])) {
|
||||||
if (ioctl(afd, MIXER_READ(i), &v) < 0) {
|
if (ioctl(afd, MIXER_READ(i), &v) < 0) {
|
||||||
fprintf(stderr, "ioctl 'MIXER_READ(%ld)': %s\n", i,
|
warn("ioctl 'MIXER_READ(%ld)':", i);
|
||||||
strerror(errno));
|
|
||||||
close(afd);
|
close(afd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,7 @@
|
||||||
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
|
snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
|
||||||
"/operstate");
|
"/operstate");
|
||||||
if (!(fp = fopen(path, "r"))) {
|
if (!(fp = fopen(path, "r"))) {
|
||||||
fprintf(stderr, "fopen '%s': %s\n", path,
|
warn("fopen '%s':", path);
|
||||||
strerror(errno));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
p = fgets(status, 5, fp);
|
p = fgets(status, 5, fp);
|
||||||
|
@ -37,8 +36,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(fp = fopen("/proc/net/wireless", "r"))) {
|
if (!(fp = fopen("/proc/net/wireless", "r"))) {
|
||||||
fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
|
warn("fopen '/proc/net/wireless':");
|
||||||
strerror(errno));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,13 +72,12 @@
|
||||||
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
|
snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
|
||||||
|
|
||||||
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
fprintf(stderr, "socket 'AF_INET': %s\n",
|
warn("socket 'AF_INET':");
|
||||||
strerror(errno));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
wreq.u.essid.pointer = id;
|
wreq.u.essid.pointer = id;
|
||||||
if (ioctl(sockfd,SIOCGIWESSID, &wreq) < 0) {
|
if (ioctl(sockfd,SIOCGIWESSID, &wreq) < 0) {
|
||||||
fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno));
|
warn("ioctl 'SIOCGIWESSID':");
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -111,22 +108,19 @@
|
||||||
memset(&bssid, 0, sizeof(bssid));
|
memset(&bssid, 0, sizeof(bssid));
|
||||||
memset(nr, 0, sizeof(struct ieee80211_nodereq));
|
memset(nr, 0, sizeof(struct ieee80211_nodereq));
|
||||||
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
fprintf(stderr, "socket 'AF_INET': %s\n",
|
warn("socket 'AF_INET':");
|
||||||
strerror(errno));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
|
strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
|
||||||
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
|
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
|
||||||
fprintf(stderr, "ioctl 'SIOCG80211BSSID': %s\n",
|
warn("ioctl 'SIOCG80211BSSID':");
|
||||||
strerror(errno));
|
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
|
strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
|
||||||
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
|
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
|
||||||
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
|
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
|
||||||
fprintf(stderr, "ioctl 'SIOCG80211NODE': %s\n",
|
warn("ioctl 'SIOCG80211NODE':");
|
||||||
strerror(errno));
|
|
||||||
close(sockfd);
|
close(sockfd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
31
slstatus.c
31
slstatus.c
|
@ -17,7 +17,6 @@ struct arg {
|
||||||
const char *args;
|
const char *args;
|
||||||
};
|
};
|
||||||
|
|
||||||
char *argv0;
|
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
static int done;
|
static int done;
|
||||||
static Display *dpy;
|
static Display *dpy;
|
||||||
|
@ -43,8 +42,7 @@ difftimespec(struct timespec *res, struct timespec *a, struct timespec *b)
|
||||||
static void
|
static void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: %s [-s]\n", argv0);
|
die("usage: %s [-s]", argv0);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -80,14 +78,12 @@ main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!sflag && !(dpy = XOpenDisplay(NULL))) {
|
if (!sflag && !(dpy = XOpenDisplay(NULL))) {
|
||||||
fprintf(stderr, "XOpenDisplay: Failed to open display\n");
|
die("XOpenDisplay: Failed to open display");
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!done) {
|
while (!done) {
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) {
|
if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) {
|
||||||
fprintf(stderr, "clock_gettime: %s\n", strerror(errno));
|
die("clock_gettime:");
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
status[0] = '\0';
|
status[0] = '\0';
|
||||||
|
@ -97,11 +93,10 @@ main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
if ((ret = snprintf(status + len, sizeof(status) - len,
|
if ((ret = snprintf(status + len, sizeof(status) - len,
|
||||||
args[i].fmt, res)) < 0) {
|
args[i].fmt, res)) < 0) {
|
||||||
fprintf(stderr, "snprintf: %s\n",
|
warn("snprintf:");
|
||||||
strerror(errno));
|
|
||||||
break;
|
break;
|
||||||
} else if ((size_t)ret >= sizeof(status) - len) {
|
} else if ((size_t)ret >= sizeof(status) - len) {
|
||||||
fprintf(stderr, "snprintf: Output truncated\n");
|
warn("snprintf: Output truncated");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
len += ret;
|
len += ret;
|
||||||
|
@ -111,18 +106,14 @@ main(int argc, char *argv[])
|
||||||
printf("%s\n", status);
|
printf("%s\n", status);
|
||||||
} else {
|
} else {
|
||||||
if (XStoreName(dpy, DefaultRootWindow(dpy), status) < 0) {
|
if (XStoreName(dpy, DefaultRootWindow(dpy), status) < 0) {
|
||||||
fprintf(stderr,
|
die("XStoreName: Allocation failed");
|
||||||
"XStoreName: Allocation failed\n");
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
XFlush(dpy);
|
XFlush(dpy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!done) {
|
if (!done) {
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, ¤t) < 0) {
|
if (clock_gettime(CLOCK_MONOTONIC, ¤t) < 0) {
|
||||||
fprintf(stderr, "clock_gettime: %s\n",
|
die("clock_gettime:");
|
||||||
strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
difftimespec(&diff, ¤t, &start);
|
difftimespec(&diff, ¤t, &start);
|
||||||
|
|
||||||
|
@ -133,9 +124,7 @@ main(int argc, char *argv[])
|
||||||
if (wait.tv_sec >= 0) {
|
if (wait.tv_sec >= 0) {
|
||||||
if (nanosleep(&wait, NULL) < 0 &&
|
if (nanosleep(&wait, NULL) < 0 &&
|
||||||
errno != EINTR) {
|
errno != EINTR) {
|
||||||
fprintf(stderr, "nanosleep: %s\n",
|
die("nanosleep:");
|
||||||
strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,9 +133,7 @@ main(int argc, char *argv[])
|
||||||
if (!sflag) {
|
if (!sflag) {
|
||||||
XStoreName(dpy, DefaultRootWindow(dpy), NULL);
|
XStoreName(dpy, DefaultRootWindow(dpy), NULL);
|
||||||
if (XCloseDisplay(dpy) < 0) {
|
if (XCloseDisplay(dpy) < 0) {
|
||||||
fprintf(stderr,
|
die("XCloseDisplay: Failed to close display");
|
||||||
"XCloseDisplay: Failed to close display\n");
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
48
util.c
48
util.c
|
@ -2,10 +2,52 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "util.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 *
|
const char *
|
||||||
bprintf(const char *fmt, ...)
|
bprintf(const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
@ -14,9 +56,9 @@ bprintf(const char *fmt, ...)
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) {
|
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)) {
|
} else if ((size_t)ret >= sizeof(buf)) {
|
||||||
fprintf(stderr, "vsnprintf: Output truncated\n");
|
warn("vsnprintf: Output truncated");
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
|
@ -31,7 +73,7 @@ pscanf(const char *path, const char *fmt, ...)
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (!(fp = fopen(path, "r"))) {
|
if (!(fp = fopen(path, "r"))) {
|
||||||
fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno));
|
warn("fopen '%s':", path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
|
|
5
util.h
5
util.h
|
@ -3,5 +3,10 @@ extern char buf[1024];
|
||||||
|
|
||||||
#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, ...);
|
const char *bprintf(const char *fmt, ...);
|
||||||
int pscanf(const char *path, const char *fmt, ...);
|
int pscanf(const char *path, const char *fmt, ...);
|
||||||
|
|
Loading…
Reference in New Issue