X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/c9d47405f4ab3cf99d7d2116fbb7622c02a27e5e..1814061396ef5855e2d1815665fc32e0902ccbe9:/slstatus.c diff --git a/slstatus.c b/slstatus.c index 4b6770b..596d6a6 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; @@ -142,10 +144,19 @@ battery_power(const char *bat) static const char * battery_state(const char *bat) { - char path[PATH_MAX]; - char state[12]; FILE *fp; + struct { + char *state; + char *symbol; + } map[] = { + { "Charging", "+" }, + { "Discharging", "-" }, + { "Full", "=" }, + { "Unknown", "/" }, + }; + size_t i; int n; + char path[PATH_MAX], state[12]; snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status"); fp = fopen(path, "r"); @@ -158,17 +169,13 @@ battery_state(const char *bat) if (n != 1) return UNKNOWN_STR; - if (strcmp(state, "Charging") == 0) { - return "+"; - } else if (strcmp(state, "Discharging") == 0) { - return "-"; - } else if (strcmp(state, "Full") == 0) { - return "="; - } else if (strcmp(state, "Unknown") == 0) { - return "/"; - } else { - return "?"; + for (i = 0; i < LEN(map); i++) { + if (!strcmp(map[i].state, state)) { + break; + } } + + return (i == LEN(map)) ? "?" : map[i].symbol; } static const char * @@ -740,7 +747,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"); @@ -861,6 +868,10 @@ main(int argc, char *argv[]) usage(); } ARGEND + if (argc) { + usage(); + } + memset(&act, 0, sizeof(act)); act.sa_handler = sighandler; sigaction(SIGINT, &act, 0); @@ -875,8 +886,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,