From 3d51dfe687af79699eef50e31278d1db2a7127bf Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Sun, 8 Sep 2019 01:13:43 +0100 Subject: [PATCH] Linux: Batteries. Linux also provides battery vendor and model. As with FreeBSD set the label for battery name "properly". --- src/system.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/system.c b/src/system.c index 6b89d97..261d82d 100644 --- a/src/system.c +++ b/src/system.c @@ -943,9 +943,44 @@ _battery_state_get(power_t *power) free(buf); } + char *model, *vendor; + + snprintf(path, sizeof(path), "/sys/class/power_supply/%s/manufacturer", power->battery_names[i]); + vendor = file_contents(path); + + snprintf(path, sizeof(path), "/sys/class/power_supply/%s/model_name", power->battery_names[i]); + model = file_contents(path); + + if (vendor && vendor[0] && model && model[0]) + { + char name[256]; + int len; + + len = strlen(vendor); + if (vendor[len - 1] == '\n' || vendor[len - 1] == '\r') + { + vendor[len - 1] = '\0'; + } + + len = strlen(model); + if (model[len - 1] == '\n' || model[len - 1] == '\r') + { + model[len - 1] = '\0'; + } + + free(power->battery_names[i]); + snprintf(name, sizeof(name), "%s (%s)", vendor, model); + power->battery_names[i] = strdup(name); + } + power->batteries[i]->charge_full = charge_full; power->batteries[i]->charge_current = charge_current; + if (model) + free(model); + if (vendor) + free(vendor); + free(naming); if (i == MAX_BATTERIES)