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