Package: acpitool Version: 0.5.1-2 Tags: patch Forwarded: davidleem...@scarlet.be
Hello, I am attaching a small patch that solves two bugs that I found in acpitool wakeup device handling functions ( $ acpitool -w ) * The file /proc/acpi/wakeup can have much more than maximum 25 hardcoded entries. For example: In my computer (Dell E6420) I have 27 entries. So instead of using an array of [25] entries better use dynamic vectors and push the new entries when a new line from the file is read. * The name of the device is not ever 4 characters. For example I have a device called "LID" which is 3 characters long. Instead of using a fixed size for the device we split the line on the first tab (\t) and use the first part. Without this patch acpitool will silently fail to change the wakeup status of any device ( $ acpitool -W XX ) were XX is greater than 25 or where the device name is not 4 characters long. I already sent this patch to upstream but they told me that they don't know when they will release a new version. So in the meantime please consider adding this to Debian The patch is against acpitool-0.5.1.tar.gz, I guess it should apply smoothly if you push it into debian/patches. Regards! -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Carlos Alberto Lopez Perez http://neutrino.es Igalia - Free Software Engineering http://www.igalia.com ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From 3a87a4132667f78fc85c54ad89992bbdd02d1e55 Mon Sep 17 00:00:00 2001 From: Carlos Alberto Lopez Perez <clo...@igalia.com> Date: Thu, 6 Oct 2011 03:12:55 +0200 Subject: [PATCH] Use dynamic structures instead of predefined ones * The file /proc/acpi/wakeup can have much more than 25 entries. In my computer (Dell E6420) I have 27 entries. So instead of using an array of [x] entries better use dynamic vectors and push the new entries when a new line from the file is read. * The name of the device is not ever 4 characters. For example I have a device called "LID" which is 3 characters long. Instead of using a fixed size for the device we split the line on the first tab (\t) and use the first part. --- src/acpitool.cpp | 23 +++++++++++------------ 1 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/acpitool.cpp b/src/acpitool.cpp index 2a610a5..71e01d7 100644 --- a/src/acpitool.cpp +++ b/src/acpitool.cpp @@ -460,16 +460,14 @@ int Show_WakeUp_Devices(int verbose) int Toggle_WakeUp_Device(const int Device, int verbose) { - ifstream file_in; ofstream file_out; - char *filename, str[50]; - int index = 1; - char Name[25][5]; // 25 should be enough I guess, I have only 9 so far // - + char *filename; string str; + int index = 1; int charindex = 0; + std::vector <std::string> Name(index); // Never is enough, use dynamic structures // filename = "/proc/acpi/wakeup"; - file_in.open(filename); - if (!file_in) + ifstream file_in(filename, ifstream::in); + if (!file_in.good()) // if opening is not successful { if(!verbose) { @@ -484,14 +482,15 @@ int Toggle_WakeUp_Device(const int Device, int verbose) } } - file_in.getline(str, 50); // first line are just headers // + getline(file_in, str); // first line are just headers // while(!file_in.eof()) // count all devices and store their names// { - file_in.getline(str, 50); - if(strlen(str)!=0) // avoid empty last line // + getline(file_in, str); + if( str.length() != 0 ) // avoid empty last line // { - memset(Name[index], '\0', 5); - strncpy(Name[index], str, 4); + charindex = 0; // reset to zero + while ( (str[++charindex]!='\t') ); // stop on first tab and get the array index + Name.push_back(str.substr(0,charindex)); // Push the name into the vector index++; } } -- 1.7.5.4
signature.asc
Description: OpenPGP digital signature