|
|
8cd89ee |
Author: Michael Meskes <meskes@debian.org>
|
|
|
8cd89ee |
Description: Fix reading of ac_adapter information.
|
|
|
8cd89ee |
|
|
|
8cd89ee |
--- acpitool-0.5.1/src/ac_adapter.cpp 2009-08-13 21:26:02.000000000 +0200
|
|
|
8cd89ee |
+++ acpitool-0.5.1.fixed/src/ac_adapter.cpp 2010-03-09 12:26:22.000000000 +0100
|
|
|
8cd89ee |
@@ -149,7 +149,7 @@
|
|
|
8cd89ee |
int Do_AC_Info_Sys()
|
|
|
8cd89ee |
{
|
|
|
8cd89ee |
ifstream file_in;
|
|
|
8cd89ee |
- char filename[2][65], str[100], temp[100];
|
|
|
8cd89ee |
+ char filename[2][65], str[100], temp[100], attr[100];
|
|
|
8cd89ee |
int ac_count = 0, start = 0, findex = 0;
|
|
|
8cd89ee |
DIR *ac_dir;
|
|
|
8cd89ee |
char *name, *dirname;
|
|
|
8cd89ee |
@@ -206,31 +206,40 @@
|
|
|
8cd89ee |
|
|
|
8cd89ee |
if(ac_count>0)
|
|
|
8cd89ee |
{
|
|
|
8cd89ee |
- for(int i=0; i<ac_count; i++) /* I don't expect to find > 1, but you never know */
|
|
|
8cd89ee |
+ for(int i=0, t=0; i<ac_count; i++) /* I don't expect to find > 1, but you never know */
|
|
|
8cd89ee |
{
|
|
|
8cd89ee |
FILE *power_fp = fopen(filename[i], "r");
|
|
|
8cd89ee |
if(power_fp)
|
|
|
8cd89ee |
{
|
|
|
8cd89ee |
- for(int t=0; t<5; t++)
|
|
|
8cd89ee |
- fgets(str, 100, power_fp); /* just skip the first 5 lines */
|
|
|
8cd89ee |
-
|
|
|
8cd89ee |
- memset(str, '\0', 100);
|
|
|
8cd89ee |
- fgets(str, 100, power_fp);
|
|
|
8cd89ee |
+ // see linux-2.6/drivers/power/power_supply_sysfs.c
|
|
|
8cd89ee |
+ // there can be different number of lines, so read up to 40 lines
|
|
|
8cd89ee |
+ for(; t<40; t++)
|
|
|
8cd89ee |
+ {
|
|
|
8cd89ee |
+ memset(str, '\0', 100);
|
|
|
8cd89ee |
+ fgets(str, 100, power_fp);
|
|
|
8cd89ee |
|
|
|
8cd89ee |
- if (strlen(str)!=0)
|
|
|
8cd89ee |
- {
|
|
|
8cd89ee |
- memset(temp, '\0', 100);
|
|
|
8cd89ee |
- sscanf(str, "%*[^=] %*c %s %[^\n]",temp);
|
|
|
8cd89ee |
+ if (strlen(str)!=0)
|
|
|
8cd89ee |
+ {
|
|
|
8cd89ee |
+ memset(temp, '\0', 100);
|
|
|
8cd89ee |
+ memset(attr, '\0', 100);
|
|
|
8cd89ee |
+ sscanf(str, "%[^=]s %*s %[^\n]", attr);
|
|
|
8cd89ee |
+ sscanf(str, "%*[^=] %*c %s %[^\n]",temp);
|
|
|
8cd89ee |
|
|
|
8cd89ee |
- /* keep this for debugging */
|
|
|
8cd89ee |
- /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/
|
|
|
8cd89ee |
-
|
|
|
8cd89ee |
- if(strncmp(temp,"1",1)==0)
|
|
|
8cd89ee |
- printf(" AC adapter : online \n");
|
|
|
8cd89ee |
- else
|
|
|
8cd89ee |
- printf(" AC adapter : off-line \n");
|
|
|
8cd89ee |
+ /* keep this for debugging */
|
|
|
8cd89ee |
+ /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/
|
|
|
8cd89ee |
+
|
|
|
8cd89ee |
+ if (strcmp(attr, "POWER_SUPPLY_ONLINE") == 0)
|
|
|
8cd89ee |
+ {
|
|
|
8cd89ee |
+ if(strncmp(temp,"1",1)==0)
|
|
|
8cd89ee |
+ printf(" AC adapter : online \n");
|
|
|
8cd89ee |
+ else
|
|
|
8cd89ee |
+ printf(" AC adapter : off-line \n");
|
|
|
8cd89ee |
+
|
|
|
8cd89ee |
+ break;
|
|
|
8cd89ee |
+ }
|
|
|
8cd89ee |
+ }
|
|
|
8cd89ee |
}
|
|
|
8cd89ee |
- else
|
|
|
8cd89ee |
+ if (t == 40)
|
|
|
8cd89ee |
printf(" AC adapter : <info not available> \n");
|
|
|
8cd89ee |
}
|
|
|
8cd89ee |
else
|