summaryrefslogtreecommitdiff
path: root/hardinfo2/arch/linux/common/battery.h
diff options
context:
space:
mode:
Diffstat (limited to 'hardinfo2/arch/linux/common/battery.h')
-rw-r--r--hardinfo2/arch/linux/common/battery.h63
1 files changed, 41 insertions, 22 deletions
diff --git a/hardinfo2/arch/linux/common/battery.h b/hardinfo2/arch/linux/common/battery.h
index 919dc65d..20979e48 100644
--- a/hardinfo2/arch/linux/common/battery.h
+++ b/hardinfo2/arch/linux/common/battery.h
@@ -136,27 +136,31 @@ __scan_battery_apm(void)
static char *sremaining = NULL, *stotal = NULL;
static unsigned int last_time = 0;
static int percentage = 0;
+ const char *ac_status[] = { "Battery",
+ "AC Power",
+ "Charging" };
int ac_bat;
- float apm_bios_ver, apm_drv_ver;
+ char apm_bios_ver[16], apm_drv_ver[16];
char trash[10];
- if (last_time == 0) {
- last_time = time(NULL);
- sremaining = g_strdup("Estimating");
- stotal = g_strdup("Estimating");
- }
-
if ((procapm = fopen("/proc/apm", "r"))) {
int old_percentage = percentage;
- fscanf(procapm, "%f %f %s 0x%x %s %s %d%%",
- &apm_drv_ver, &apm_bios_ver, trash,
+ fscanf(procapm, "%s %s %s 0x%x %s %s %d%%",
+ apm_drv_ver, apm_bios_ver, trash,
&ac_bat, trash, trash, &percentage);
fclose(procapm);
+ if (last_time == 0) {
+ last_time = time(NULL);
+ sremaining = stotal = NULL;
+ }
+
if (old_percentage - percentage > 0) {
- g_free(sremaining);
- g_free(stotal);
+ if (sremaining && stotal) {
+ g_free(sremaining);
+ g_free(stotal);
+ }
int secs_remaining = (time(NULL) - last_time) * percentage /
(old_percentage - percentage);
@@ -165,19 +169,34 @@ __scan_battery_apm(void)
last_time = time(NULL);
}
+ } else {
+ return;
}
- battery_list = g_strdup_printf("%s\n[Battery (APM)]\n"
- "Charge=%d%%\n"
- "Remaining Charge=%s of %s\n"
- "Using=%s\n"
- "APM driver version=%.2f\n"
- "APM BIOS version=%.2f\n",
- battery_list,
- percentage,
- sremaining, stotal,
- ac_bat ? "AC Power" : "Battery",
- apm_drv_ver, apm_bios_ver);
+ if (stotal && sremaining) {
+ battery_list = g_strdup_printf("%s\n[Battery (APM)]\n"
+ "Charge=%d%%\n"
+ "Remaining Charge=%s of %s\n"
+ "Using=%s\n"
+ "APM driver version=%s\n"
+ "APM BIOS version=%s\n",
+ battery_list,
+ percentage,
+ sremaining, stotal,
+ ac_status[ac_bat],
+ apm_drv_ver, apm_bios_ver);
+ } else {
+ battery_list = g_strdup_printf("%s\n[Battery (APM)]\n"
+ "Charge=%d%%\n"
+ "Using=%s\n"
+ "APM driver version=%s\n"
+ "APM BIOS version=%s\n",
+ battery_list,
+ percentage,
+ ac_status[ac_bat],
+ apm_drv_ver, apm_bios_ver);
+
+ }
}
static void