commit 178c23e3d2b75a99010987bf3e17a82ff7b83b6a
parent 6b8384ef2f7328580425ac2cc75e0c65a04aa942
Author: Laslo Hunhold <[email protected]>
Date:   Fri, 11 Aug 2017 00:17:49 +0200
Refactor battery_state()
Diffstat:
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/slstatus.c b/slstatus.c
@@ -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 *