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;
}
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;
}
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;
}
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) {
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;
}
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
struct statvfs fs;
if (statvfs(mnt, &fs) < 0) {
- fprintf(stderr, "statvfs '%s': %s\n", mnt, strerror(errno));
+ warn("statvfs '%s':", mnt);
return NULL;
}
hostname(void)
{
if (gethostname(buf, sizeof(buf)) < 0) {
- fprintf(stderr, "gethostbyname: %s\n", strerror(errno));
+ warn("gethostbyname:");
return NULL;
}
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
+ warn("getifaddrs:");
return NULL;
}
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);
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) < 0) {
- fprintf(stderr, "getifaddrs: %s\n", strerror(errno));
+ warn("getifaddrs:");
return NULL;
}
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);
struct utsname udata;
if (uname(&udata) < 0) {
- fprintf(stderr, "uname: %s\n", strerror(errno));
+ warn("uname:");
return NULL;
}
XKeyboardState state;
if (!(dpy = XOpenDisplay(NULL))) {
- fprintf(stderr, "Cannot open display\n");
+ warn("XOpenDisplay: Failed to open display");
return NULL;
}
XGetKeyboardControl(dpy, &state);
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;
}
int num;
if (!(fd = opendir(dir))) {
- fprintf(stderr, "opendir '%s': %s\n", dir, strerror(errno));
+ warn("opendir '%s':", dir);
return NULL;
}
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);
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;
}
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;
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;
}
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;
}
struct passwd *pw;
if (!(pw = getpwuid(geteuid()))) {
- fprintf(stderr, "getpwuid '%d': %s\n", geteuid(), strerror(errno));
+ warn("getpwuid '%d':", geteuid());
return NULL;
}
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;
}
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);
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
- fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
- strerror(errno));
+ warn("fopen '/proc/net/wireless':");
return NULL;
}
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;
}
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;
}
const char *args;
};
-char *argv0;
char buf[1024];
static int done;
static Display *dpy;
static void
usage(void)
{
- fprintf(stderr, "usage: %s [-s]\n", argv0);
- exit(1);
+ die("usage: %s [-s]", argv0);
}
int
}
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';
}
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;
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);
if (wait.tv_sec >= 0) {
if (nanosleep(&wait, NULL) < 0 &&
errno != EINTR) {
- fprintf(stderr, "nanosleep: %s\n",
- strerror(errno));
- return 1;
+ die("nanosleep:");
}
}
}
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 <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, ...)
{
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);
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);
#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, ...);