[Goodies-dev] battery plugin: small fix to libacpi.c
Giuseppe Ciotta
giuseppe at telvia.it
Wed Jun 14 21:16:17 CEST 2006
In libacpi.c there are some ugly checks in hardcoded paths for the
battery status file, attached a small patch which makes use of
readdir() to discover the right path. It applies to 0.4.0 and trunk.
--
-------------- next part --------------
--- xfce4-battery-plugin-0.4.0/panel-plugin/libacpi.c 2006-04-27 21:10:40.000000000 +0200
+++ xfce4-battery-plugin-new/panel-plugin/libacpi.c 2006-06-14 21:01:56.000000000 +0200
@@ -40,6 +40,7 @@
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
+#include <unistd.h>
#if HAVE_SYSCTL
#include <sys/sysctl.h>
@@ -224,12 +225,6 @@
}
else fclose (acpi);
-#if 0
- if (!(acpi = fopen ("/proc/acpi/battery/1/status", "r")))
- sprintf (batteries[batt_count], "/proc/acpi/battery/%s/state", name);
- else
- sprintf (batteries[batt_count], "/proc/acpi/battery/%s/status", name);
-#endif
sprintf (battinfo[batt_count], "/proc/acpi/battery/%s/info", name);
#ifdef DEBUG
printf("DBG:battery number %d at:\n",batt_count);
@@ -274,16 +269,31 @@
FILE *acpi;
char *ptr;
char stat;
-
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/0/status", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/ACAD/state", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/AC/state", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/ADP1/state", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/AC0/state", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/ADP0/state", "r")))
- if (!(acpi = fopen ("/proc/acpi/ac_adapter/C11B/state", "r")))
- return -1;
-
+ char acpath[64];
+ char *name;
+ DIR *acdir;
+ struct dirent *ac;
+ #define ACBASE "/proc/acpi/ac_adapter"
+
+ if (!(acdir=opendir(ACBASE))){
+ return -1;
+ }
+ while ((ac = readdir (acdir))){
+ name = ac->d_name;
+ if (!strncmp (".", name, 1) || !strncmp ("..", name, 2)){
+ continue;
+ }
+ sprintf (acpath, ACBASE"/%s/state", name);
+ if (access(acpath,R_OK)){
+ sprintf (acpath, ACBASE"/%s/status", name);
+ if (access(acpath,R_OK)){
+ return -1;
+ }
+ }
+ break; //only one ac adapter supported
+ }
+ closedir(acdir);
+ acpi = fopen (acpath, "r");
fread (buf, 512, 1, acpi);
fclose (acpi);
if (!acadstate) acadstate=(ACADstate *)malloc(sizeof(ACADstate));
More information about the Goodies-dev
mailing list