8cd89ee
From 3a87a4132667f78fc85c54ad89992bbdd02d1e55 Mon Sep 17 00:00:00 2001
8cd89ee
From: Carlos Alberto Lopez Perez <clopez@igalia.com>
8cd89ee
Date: Thu, 6 Oct 2011 03:12:55 +0200
8cd89ee
Subject: [PATCH] Use dynamic structures instead of predefined ones
8cd89ee
8cd89ee
 * The file /proc/acpi/wakeup can have much more than 25 entries.
8cd89ee
   In my computer (Dell E6420) I have 27 entries.
8cd89ee
   So instead of using an array of [x] entries better use dynamic
8cd89ee
   vectors and push the new entries when a new line from the file
8cd89ee
   is read.
8cd89ee
8cd89ee
 * The name of the device is not ever 4 characters. For example I
8cd89ee
   have a device called "LID" which is 3 characters long.
8cd89ee
   Instead of using a fixed size for the device we split the line
8cd89ee
   on the first tab (\t) and use the first part.
8cd89ee
---
8cd89ee
 src/acpitool.cpp |   23 +++++++++++------------
8cd89ee
 1 files changed, 11 insertions(+), 12 deletions(-)
8cd89ee
8cd89ee
diff --git a/src/acpitool.cpp b/src/acpitool.cpp
8cd89ee
index 2a610a5..71e01d7 100644
8cd89ee
--- a/src/acpitool.cpp
8cd89ee
+++ b/src/acpitool.cpp
8cd89ee
@@ -459,16 +459,14 @@ int Show_WakeUp_Devices(int verbose)
8cd89ee
 
8cd89ee
 int Toggle_WakeUp_Device(const int Device, int verbose)
8cd89ee
 {
8cd89ee
-    ifstream file_in;
8cd89ee
     ofstream file_out;
8cd89ee
-    char *filename, str[50];
8cd89ee
-    int index = 1;
8cd89ee
-    char Name[25][5];            // 25 should be enough I guess, I have only 9 so far //
8cd89ee
-    
8cd89ee
+    char *filename; string str;
8cd89ee
+    int index = 1; int charindex = 0;
8cd89ee
+    std::vector <std::string> Name(index); // Never is enough, use dynamic structures //
8cd89ee
     filename = "/proc/acpi/wakeup";
8cd89ee
     
8cd89ee
-    file_in.open(filename);
8cd89ee
-    if (!file_in)        
8cd89ee
+    ifstream file_in(filename, ifstream::in);
8cd89ee
+    if (!file_in.good()) // if opening is not successful
8cd89ee
     {
8cd89ee
     	if(!verbose)        
8cd89ee
     	{
8cd89ee
@@ -483,14 +481,15 @@ int Toggle_WakeUp_Device(const int Device, int verbose)
8cd89ee
     	}	
8cd89ee
     }
8cd89ee
     
8cd89ee
-    file_in.getline(str, 50);             // first line are just headers //
8cd89ee
+    getline(file_in, str);                // first line are just headers //
8cd89ee
     while(!file_in.eof())                 // count all devices and store their names//
8cd89ee
     {
8cd89ee
-        file_in.getline(str, 50);
8cd89ee
-        if(strlen(str)!=0)                // avoid empty last line //
8cd89ee
+        getline(file_in, str);
8cd89ee
+        if( str.length() != 0 )           // avoid empty last line //
8cd89ee
         {
8cd89ee
-	    memset(Name[index], '\0', 5);
8cd89ee
-	    strncpy(Name[index], str, 4);
8cd89ee
+	    charindex = 0; // reset to zero
8cd89ee
+	    while ( (str[++charindex]!='\t')  ); // stop on first tab and get the array index
8cd89ee
+	    Name.push_back(str.substr(0,charindex)); // Push the name into the vector
8cd89ee
 	    index++;
8cd89ee
 	}
8cd89ee
     }	
8cd89ee
-- 
8cd89ee
1.7.5.4
8cd89ee
8cd89ee