aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro Pereira <leandro@hardinfo.org>2017-08-09 02:03:27 -0700
committerLeandro Pereira <leandro@hardinfo.org>2017-08-09 02:09:11 -0700
commit8aeb4748431b6abadd203036716a6a1a2c1fb38b (patch)
treef24bddd6e569a55e4f3a024cbc3ecb34748ca7b7
parentd41a3e1fdb33eda0977e0fc64faa2caddf07e443 (diff)
Implement more ways to detect laptop machines
-rw-r--r--modules/computer.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/modules/computer.c b/modules/computer.c
index dd4961ec..ec1d6c0f 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -294,6 +294,7 @@ gchar *callback_dev()
static gchar *detect_machine_type(void)
{
+ GDir *dir;
gchar *chassis;
if (g_file_get_contents("/sys/devices/virtual/dmi/id/chassis_type", &chassis, NULL, NULL)) {
@@ -333,10 +334,44 @@ static gchar *detect_machine_type(void)
if (g_file_test("/proc/pmu/info", G_FILE_TEST_EXISTS))
return g_strdup(_("Laptop"));
- /* FIXME: check if files in /sys/class/power_supply/${*)/type contains
- * "Battery", or .../scope does not contain Device. */
+ dir = g_dir_open("/proc/acpi/battery", 0, NULL);
+ if (dir) {
+ const gchar *name = g_dir_read_name(dir);
- /* FIXME: check if there's more than one directory in /proc/acpi/battery */
+ g_dir_close(dir);
+
+ if (name)
+ return g_strdup(_("Laptop"));
+ }
+
+ dir = g_dir_open("/sys/class/power_supply", 0, NULL);
+ if (dir) {
+ const gchar *name;
+
+ while ((name = g_dir_read_name(dir))) {
+ gchar *contents;
+ gchar type[PATH_MAX];
+ int r;
+
+ r = snprintf(type, sizeof(type), "%s/%s/type",
+ "/sys/class/power_supply", name);
+ if (r < 0 || r > PATH_MAX)
+ continue;
+
+ if (g_file_get_contents(type, &contents, NULL, NULL)) {
+ if (g_str_has_prefix(contents, "Battery")) {
+ g_free(contents);
+ g_dir_close(dir);
+
+ return g_strdup(_("Laptop"));
+ }
+
+ g_free(contents);
+ }
+ }
+
+ g_dir_close(dir);
+ }
/* FIXME: check if batteries are found using /proc/apm */