X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/178c23e3d2b75a99010987bf3e17a82ff7b83b6a..be12b6b350c7cf2ea826d3988371efb680b4ba30:/slstatus.c?ds=sidebyside diff --git a/slstatus.c b/slstatus.c index c4a9e92..228c19b 100644 --- a/slstatus.c +++ b/slstatus.c @@ -28,6 +28,8 @@ #include "arg.h" +#define LEN(x) (sizeof (x) / sizeof *(x)) + struct arg { const char *(*func)(); const char *fmt; @@ -167,13 +169,13 @@ battery_state(const char *bat) if (n != 1) return UNKNOWN_STR; - for (i = 0; i < sizeof(map) / sizeof(*map); i++) { + for (i = 0; i < LEN(map); i++) { if (!strcmp(map[i].state, state)) { break; } } - return (i == sizeof(map) / sizeof(*map)) ? "?" : map[i].symbol; + return (i == LEN(map)) ? "?" : map[i].symbol; } static const char * @@ -380,6 +382,11 @@ keyboard_indicators(void) { Display *dpy = XOpenDisplay(NULL); XKeyboardState state; + + if (dpy == NULL) { + warnx("XOpenDisplay failed"); + return UNKNOWN_STR; + } XGetKeyboardControl(dpy, &state); XCloseDisplay(dpy); @@ -745,7 +752,7 @@ vol_perc(const char *card) close(afd); return UNKNOWN_STR; } - for (i = 0; i < (sizeof(vnames) / sizeof((vnames[0]))); i++) { + for (i = 0; i < LEN(vnames); i++) { if (devmask & (1 << i) && !strcmp("vol", vnames[i])) { if (ioctl(afd, MIXER_READ(i), &v) == -1) { warn("vol_perc: ioctl"); @@ -877,6 +884,10 @@ main(int argc, char *argv[]) if (!sflag) { dpy = XOpenDisplay(NULL); + if (!dpy) { + fprintf(stderr, "slstatus: cannot open display"); + exit(1); + } } setlocale(LC_ALL, ""); @@ -884,8 +895,7 @@ main(int argc, char *argv[]) while (!done) { status_string[0] = '\0'; - for (element = status_string, i = len = 0; - i < sizeof(args) / sizeof(args[0]); + for (element = status_string, i = len = 0; i < LEN(args); ++i, element += len) { argument = args[i]; len = snprintf(element, sizeof(status_string)-1 - len, @@ -904,11 +914,11 @@ main(int argc, char *argv[]) XSync(dpy, False); } - if ((UPDATE_INTERVAL - delay) <= 0) { + if ((update_interval - delay) <= 0) { delay = 0; continue; } else { - sleep(UPDATE_INTERVAL - delay); + sleep(update_interval - delay); delay = 0; } }