From: Laslo Hunhold <dev@frign.de>
Date: Thu, 10 Aug 2017 22:17:49 +0000 (+0200)
Subject: Refactor battery_state()
X-Git-Url: https://git.xinqibao.xyz/slstatus.git/commitdiff_plain/178c23e3d2b75a99010987bf3e17a82ff7b83b6a

Refactor battery_state()
---

diff --git a/slstatus.c b/slstatus.c
index 052af87..c4a9e92 100644
--- 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 *