Refactor battery_state()
authorLaslo Hunhold <dev@frign.de>
Thu, 10 Aug 2017 22:17:49 +0000 (00:17 +0200)
committerAaron Marcher <me@drkhsh.at>
Thu, 10 Aug 2017 22:20:47 +0000 (00:20 +0200)
slstatus.c

index 052af871e1970f6bf7bf9fed332b5708b5698f73..c4a9e92186d4abd4edb333dc1e5a468ae8c4fb5c 100644 (file)
@@ -142,10 +142,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 +167,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 < sizeof(map) / sizeof(*map); i++) {
+               if (!strcmp(map[i].state, state)) {
+                       break;
+               }
        }
+
+       return (i == sizeof(map) / sizeof(*map)) ? "?" : map[i].symbol;
 }
 
 static const char *