diff --git a/.gitignore b/.gitignore index 89374d5..b645c55 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -acpitool-0.5.1.tar.bz2 +acpitool-0.4.7.tar.gz diff --git a/ac_adapter.patch b/ac_adapter.patch deleted file mode 100644 index 156400b..0000000 --- a/ac_adapter.patch +++ /dev/null @@ -1,73 +0,0 @@ -Author: Michael Meskes -Description: Fix reading of ac_adapter information. - ---- acpitool-0.5.1/src/ac_adapter.cpp 2009-08-13 21:26:02.000000000 +0200 -+++ acpitool-0.5.1.fixed/src/ac_adapter.cpp 2010-03-09 12:26:22.000000000 +0100 -@@ -149,7 +149,7 @@ - int Do_AC_Info_Sys() - { - ifstream file_in; -- char filename[2][65], str[100], temp[100]; -+ char filename[2][65], str[100], temp[100], attr[100]; - int ac_count = 0, start = 0, findex = 0; - DIR *ac_dir; - char *name, *dirname; -@@ -206,31 +206,40 @@ - - if(ac_count>0) - { -- for(int i=0; i 1, but you never know */ -+ for(int i=0, t=0; i 1, but you never know */ - { - FILE *power_fp = fopen(filename[i], "r"); - if(power_fp) - { -- for(int t=0; t<5; t++) -- fgets(str, 100, power_fp); /* just skip the first 5 lines */ -- -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -+ // see linux-2.6/drivers/power/power_supply_sysfs.c -+ // there can be different number of lines, so read up to 40 lines -+ for(; t<40; t++) -+ { -+ memset(str, '\0', 100); -+ fgets(str, 100, power_fp); - -- if (strlen(str)!=0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -+ if (strlen(str)!=0) -+ { -+ memset(temp, '\0', 100); -+ memset(attr, '\0', 100); -+ sscanf(str, "%[^=]s %*s %[^\n]", attr); -+ sscanf(str, "%*[^=] %*c %s %[^\n]",temp); - -- /* keep this for debugging */ -- /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/ -- -- if(strncmp(temp,"1",1)==0) -- printf(" AC adapter : online \n"); -- else -- printf(" AC adapter : off-line \n"); -+ /* keep this for debugging */ -+ /* printf(" from Do_AC_SYS: temp = %s \n", temp);*/ -+ -+ if (strcmp(attr, "POWER_SUPPLY_ONLINE") == 0) -+ { -+ if(strncmp(temp,"1",1)==0) -+ printf(" AC adapter : online \n"); -+ else -+ printf(" AC adapter : off-line \n"); -+ -+ break; -+ } -+ } - } -- else -+ if (t == 40) - printf(" AC adapter : \n"); - } - else diff --git a/acpitool.spec b/acpitool.spec index 7252c4b..63f06be 100644 --- a/acpitool.spec +++ b/acpitool.spec @@ -1,42 +1,24 @@ -Summary: Command line ACPI client Name: acpitool -Version: 0.5.1 -Release: 38%{?dist} -# Automatically converted from old format: GPLv2+ - review is highly recommended. -License: GPL-2.0-or-later -URL: https://sourceforge.net/projects/acpitool/ -BuildRequires: gcc-c++ -BuildRequires: make - -Source0: https://sourceforge.net/projects/acpitool/files/acpitool/%{version}/acpitool-%{version}.tar.bz2 -Patch0: ac_adapter.patch -Patch1: battery.patch -Patch2: kernel3.patch -Patch3: wakeup.patch -Patch4: var-line.patch -Patch5: typos.patch -Patch6: cleanup.patch -Patch7: cache-size.patch +Version: 0.4.7 +Release: 1%{?dist} +Url: http://freeunix.dyndns.org:8088/site2/acpitool.shtml +Source0: http://freeunix.dyndns.org:8000/ftp_site/pub/unix/acpitool/acpitool-%{version}.tar.gz +Summary: A command line ACPI client for Linux +Group: Applications/System +License: GPL +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description -AcpiTool is a Linux ACPI client. It's a small command line application, -intended to be a replacement for the apm tool. Besides "basic" ACPI -information like battery status, AC presence, putting the laptop to -sleep, Acpitool also supports various extensions for Toshiba, Asus and -IBM Thinkpad laptops, allowing you to change the LCD brightness level, -toggle fan on/off, and more. - +AcpiTool is a Linux ACPI client. It's a small command line application, +intended to be a replacement for the apm tool. The primary target +audience are laptop users, since these people are most interested in +things like battery status, thermal status and the ability to suspend +(sleep mode). The program simply accesses the /proc/acpi or /sysfs entries +to get/set acpi values. Hence, a computer running a Linux kernel from +the 2.4.x or 2.6.x series with ACPI enabled is needed. %prep %setup -q -%patch -P0 -p1 -b .ac_adapter -%patch -P1 -p1 -b .battery -%patch -P2 -p1 -b .kernel3 -%patch -P3 -p1 -b .wakeup -%patch -P4 -p1 -b .var-line -%patch -P5 -p1 -b .typos -%patch -P6 -p1 -b .cleanup -%patch -P7 -p1 -b .cache-size %build %configure @@ -46,153 +28,17 @@ make %{?_smp_mflags} rm -fr $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT +%clean +rm -fr $RPM_BUILD_ROOT + %files -%doc AUTHORS ChangeLog COPYING INSTALL README TODO +%defattr(-,root,root,-) +%doc README TODO ChangeLog AUTHORS COPYING %{_bindir}/acpitool %{_mandir}/man1/acpitool* %changelog -* Fri Jan 16 2026 Fedora Release Engineering - 0.5.1-38 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild - -* Wed Jul 23 2025 Fedora Release Engineering - 0.5.1-37 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Jan 16 2025 Fedora Release Engineering - 0.5.1-36 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Thu Jul 25 2024 Miroslav Suchý - 0.5.1-35 -- convert license to SPDX - -* Wed Jul 17 2024 Fedora Release Engineering - 0.5.1-34 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Mon Jan 22 2024 Fedora Release Engineering - 0.5.1-33 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 0.5.1-32 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jul 19 2023 Fedora Release Engineering - 0.5.1-31 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Wed Jan 18 2023 Fedora Release Engineering - 0.5.1-30 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Wed Jul 20 2022 Fedora Release Engineering - 0.5.1-29 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Wed Jan 19 2022 Fedora Release Engineering - 0.5.1-28 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Jul 21 2021 Fedora Release Engineering - 0.5.1-27 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Mon Jan 25 2021 Fedora Release Engineering - 0.5.1-26 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Fri Jul 31 2020 Fedora Release Engineering - 0.5.1-25 -- Second attempt - Rebuilt for - https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 27 2020 Fedora Release Engineering - 0.5.1-24 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Tue Jan 28 2020 Fedora Release Engineering - 0.5.1-23 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Wed Jul 24 2019 Fedora Release Engineering - 0.5.1-22 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Tue May 28 2019 Al Stone - 0.5.1-21 -- Cache size was being reported incorrectly (cpufreq was being used - instead). Pulled in patch submitted with bug report once verified. - Closes BZ#1701278. - -* Thu Jan 31 2019 Fedora Release Engineering - 0.5.1-20 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Fri Oct 26 2018 Al Stone - 0.5.1-19 -- Remove commented out acpitool-0.5-gcc43.patch; it's no longer needed and - just clutters up the spec file -- Merge in patches from Debian (Arch uses very similar but not exactly - identical nor as extensive patches). Closes BZ#1625002. -- Add a new patch to clean up g++ warning about implicit casts -- Fixed upstream to more recent location on sf.net - -* Mon Jul 23 2018 Al Stone - 0.5.1-18 -- Add in BuildRequires for C++. Closes BZ1603341. - -* Thu Jul 12 2018 Fedora Release Engineering - 0.5.1-17 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed Feb 07 2018 Fedora Release Engineering - 0.5.1-16 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Wed Aug 02 2017 Fedora Release Engineering - 0.5.1-15 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 0.5.1-14 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Feb 10 2017 Fedora Release Engineering - 0.5.1-13 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Wed Feb 03 2016 Fedora Release Engineering - 0.5.1-12 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Jun 16 2015 Fedora Release Engineering - 0.5.1-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sat May 02 2015 Kalev Lember - 0.5.1-10 -- Rebuilt for GCC 5 C++11 ABI change - -* Fri Aug 15 2014 Fedora Release Engineering - 0.5.1-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 07 2014 Fedora Release Engineering - 0.5.1-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sat Aug 03 2013 Fedora Release Engineering - 0.5.1-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Feb 13 2013 Fedora Release Engineering - 0.5.1-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Wed Jul 18 2012 Fedora Release Engineering - 0.5.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue Feb 28 2012 Fedora Release Engineering - 0.5.1-4 -- Rebuilt for c++ ABI breakage - -* Thu Jan 12 2012 Fedora Release Engineering - 0.5.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Mon Feb 07 2011 Fedora Release Engineering - 0.5.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Wed Aug 26 2009 Steven M. Parrish 0.5.1-1 -- various minor fixes (fixing memleaks, removing of limit on thermal zones) - -* Fri Jul 24 2009 Fedora Release Engineering - 0.5-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Mon Feb 23 2009 Fedora Release Engineering - 0.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Thu Sep 18 2008 Patrice Dumas 0.5-1 -- update to 0.5 - -* Mon Jul 14 2008 Tom "spot" Callaway - 0.4.7-5 -- fix license tag - -* Tue Feb 19 2008 Fedora Release Engineering - 0.4.7-4 -- Autorebuild for GCC 4.3 - -* Thu Jan 3 2008 Patrice Dumas 0.4.7-3 -- fixes for gcc 4.3 - -* Thu May 24 2007 Patrice Dumas 0.4.7-2 +* Thu May 24 2007 Patrice Dumas 0.4.7-1 - update to 0.4.7 * Fri Oct 6 2006 Patrice Dumas 0.4.6-2 diff --git a/battery.patch b/battery.patch deleted file mode 100644 index 377502c..0000000 --- a/battery.patch +++ /dev/null @@ -1,484 +0,0 @@ -Author: Evgeni Golov , Michael Meskes -Description: Fix reading of battery information. - ---- acpitool-0.5.1/src/acpitool.h 2008-10-16 17:38:12.000000000 +0200 -+++ acpitool-0.5.1.fixed/src/acpitool.h 2010-03-28 11:35:12.000000000 +0200 -@@ -39,6 +39,9 @@ - char Serial[13]; - char Bat_Type[13]; - char Voltage_Now[13]; -+ char Charge_Now[13]; -+ char Charge_Full[13]; -+ char Charge_Full_Design[13]; - }; - - ---- acpitool-0.5.1/src/battery.cpp 2009-08-13 21:42:43.000000000 +0200 -+++ acpitool-0.5.1.fixed/src/battery.cpp 2010-03-28 13:46:40.000000000 +0200 -@@ -107,6 +107,9 @@ - memset(Batt_Info[i]->Serial, '\0', 13); - memset(Batt_Info[i]->Bat_Type, '\0', 13); - memset(Batt_Info[i]->Voltage_Now, '\0', 13); -+ memset(Batt_Info[i]->Charge_Now, '\0', 13); -+ memset(Batt_Info[i]->Charge_Full, '\0', 13); -+ memset(Batt_Info[i]->Charge_Full_Design, '\0', 13); - - // initialize all struct members to blanks --> avoid rubbish in output // - -@@ -139,7 +142,12 @@ - case 1 : - { - Present_Batteries++; -- Remaining_Percentage = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->LastFull_Cap)) * 100.0; -+ -+ if (strcmp(Batt_Info[i]->Charge_Now,"")!=0 && -+ strcmp(Batt_Info[i]->Charge_Now,"unknown")!=0) -+ Remaining_Percentage = float(atoi(Batt_Info[i]->Charge_Now)) / float(atoi(Batt_Info[i]->Charge_Full)) * 100.0; -+ else -+ Remaining_Percentage = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->LastFull_Cap)) * 100.0; - - /* from Alan Pope : some broken Dell batteries report a remaining capacity bigger - than their last full capacity or their design capacity. This led acpitool to report -@@ -153,19 +161,24 @@ - else - Precision = 4; - -- if( strncmp(Batt_Info[i]->Charging_State,"char",4)==0 ) -+ if(strncasecmp(Batt_Info[i]->Charging_State,"char",4)==0) - { - Is_Charging = 1; - } - else - { -- if(strncmp(Batt_Info[i]->Charging_State,"disch",5)==0) Is_Discharging = 1; -+ if(strncasecmp(Batt_Info[i]->Charging_State,"disch",5)==0) Is_Discharging = 1; - } - - if(Show_Time) // calculate remaining or charging time only if present battery rate != 0 // - { -- if(Is_Charging) -- Remaining_Time = (float(atoi(Batt_Info[i]->LastFull_Cap)) - float(atoi(Batt_Info[i]->Remaining_Cap))) / float(atoi(Batt_Info[i]->Present_Rate)); -+ if(Is_Charging) { -+ if (strcmp(Batt_Info[i]->Charge_Now,"")!=0 && -+ strcmp(Batt_Info[i]->Charge_Now,"unknown")!=0) -+ Remaining_Time = (float(atoi(Batt_Info[i]->Charge_Full)) - float(atoi(Batt_Info[i]->Charge_Now))) / float(atoi(Batt_Info[i]->Present_Rate)); -+ else -+ Remaining_Time = (float(atoi(Batt_Info[i]->LastFull_Cap)) - float(atoi(Batt_Info[i]->Remaining_Cap))) / float(atoi(Batt_Info[i]->Present_Rate)); -+ } - else - Remaining_Time = float(atoi(Batt_Info[i]->Remaining_Cap)) / float(atoi(Batt_Info[i]->Present_Rate)); - // this represents hours // -@@ -180,9 +193,11 @@ - Minutes = Time_In_Seconds / 60; - Time_In_Seconds = Time_In_Seconds - (Minutes * 60); - } -- -+ - if(atoi(Batt_Info[i]->Design_Cap) > 0) - Battery_Left_Percent = float(atoi(Batt_Info[i]->LastFull_Cap)) / float(atoi(Batt_Info[i]->Design_Cap)) * 100.0; -+ else if(atoi(Batt_Info[i]->Charge_Full_Design) > 0) -+ Battery_Left_Percent = float(atoi(Batt_Info[i]->Charge_Full)) / float(atoi(Batt_Info[i]->Charge_Full_Design)) * 100.0; - else - Battery_Left_Percent = -1.0; - -@@ -207,8 +222,15 @@ - <Design_Cap<LastFull_Cap; -+ if(atoi(Batt_Info[i]->Design_Cap) > 0) -+ cout<<" Design capacity : "<Design_Cap<Charge_Full_Design) > 0) -+ cout<<" Design capacity : "<Charge_Full_Design<LastFull_Cap) > 0) -+ cout<<" Last full capacity : "<LastFull_Cap; -+ else if(atoi(Batt_Info[i]->Charge_Full) > 0) -+ cout<<" Last full capacity : "<Charge_Full; - - if(Battery_Left_Percent<100.0) - { -@@ -327,7 +349,7 @@ - - - --int Get_Battery_Info_from_Proc(const int bat_nr, Battery_Info *bat_info, int verbose) -+int Get_Battery_Info_from_Proc(const int bat_nr, Battery_Info *batt_info, int verbose) - { - ifstream file_in; - char filename[4][65], str[100], temp[100]; -@@ -378,7 +400,7 @@ - { - if(!verbose) - { -- bat_info->Battery_Present = 2; // 2 represents error value // -+ batt_info->Battery_Present = 2; // 2 represents error value // - return 0; - } - else -@@ -422,24 +444,24 @@ - file_in.getline(str, 100); - strncpy(temp, str+25, 4); - if(strncmp(temp,"yes",3)==0) -- bat_info->Battery_Present = 1; //yes, we have a battery // -+ batt_info->Battery_Present = 1; //yes, we have a battery // - else - { -- bat_info->Battery_Present = 0; -+ batt_info->Battery_Present = 0; - return 0; //bail out if battery is not present // - } - - // then get the design capacity // - file_in.getline(str, 100); -- strncpy(bat_info->Design_Cap, str+25, 9); -+ strncpy(batt_info->Design_Cap, str+25, 9); - - // then get the last full capacity // - file_in.getline(str, 100); -- strncpy(bat_info->LastFull_Cap, str+25, 9); -+ strncpy(batt_info->LastFull_Cap, str+25, 9); - -- if (strncmp(bat_info->LastFull_Cap,"unknown",7)==0) -+ if (strncmp(batt_info->LastFull_Cap,"unknown",7)==0) - { -- bat_info->Battery_Present = 0; -+ batt_info->Battery_Present = 0; - return 0; //bail out if battery is not present // - } - /* some Dell laptops seem to report a 2nd battery as being present, while it is NOT, but then report the -@@ -449,21 +471,21 @@ - - // then get the technology // - file_in.getline(str, 100); -- strncpy(bat_info->Technology, str+25, 12); -+ strncpy(batt_info->Technology, str+25, 12); - - // then get the model number // - for(int t=0; t<5; t++) - file_in.getline(str, 100); //skip 5 lines // - file_in.getline(str, 100); -- strncpy(bat_info->Model, str+25, 12); -+ strncpy(batt_info->Model, str+25, 12); - - // then get the serial number // - file_in.getline(str, 100); -- strncpy(bat_info->Serial, str+25, 12); -+ strncpy(batt_info->Serial, str+25, 12); - - // then get the battery type // - file_in.getline(str, 100); -- strncpy(bat_info->Bat_Type, str+25, 12); -+ strncpy(batt_info->Bat_Type, str+25, 12); - - file_in.close(); - -@@ -480,17 +502,17 @@ - // then get the charging state // - file_in.getline(str, 100); file_in.getline(str, 100); // skip first 2 lines // - file_in.getline(str, 100); -- strncpy(bat_info->Charging_State, str+25, 12); -- if (strncmp(bat_info->Charging_State,"unknown",7)==0) strncpy(bat_info->Charging_State, "charged",7); -+ strncpy(batt_info->Charging_State, str+25, 12); -+ if (strncmp(batt_info->Charging_State,"unknown",7)==0) strncpy(batt_info->Charging_State, "charged",7); - /* on older kernels, like 2.4.22, the charging state is reported as "unknown", whereas in recent kernels - this was changed to "charged". */ - - // then get the charging rate // - file_in.getline(str, 100); -- strncpy(bat_info->Present_Rate, str+25, 9); -- if (strncmp(bat_info->Charging_State,"charged",7)==0) -+ strncpy(batt_info->Present_Rate, str+25, 9); -+ if (strncmp(batt_info->Charging_State,"charged",7)==0) - { -- if (strncmp(bat_info->Present_Rate, "unknown",7)==0) strncpy(bat_info->Present_Rate, "0 ",7); -+ if (strncmp(batt_info->Present_Rate, "unknown",7)==0) strncpy(batt_info->Present_Rate, "0 ",7); - } - /* some batteries report the present rate as "unknown", even when they report the battery as being charged. - If the battery is charged, the rate should be 0 */ -@@ -498,12 +520,12 @@ - - // then get the remaining capacity // - file_in.getline(str, 100); -- strncpy(bat_info->Remaining_Cap, str+25, 9); -+ strncpy(batt_info->Remaining_Cap, str+25, 9); - - file_in.close(); - } - else // battery dir is readable but empty : only . and .. at most // -- bat_info->Battery_Present = 3; -+ batt_info->Battery_Present = 3; - - return 0; - } -@@ -513,8 +535,8 @@ - int Get_Battery_Info_from_Sys(const int bat_nr, Battery_Info *batt_info, int verbose) - { - ifstream file_in; -- char filename[6][65], str[100], temp[100]; -- int bat_count = 0, start = 0, findex = 0; -+ char filename[6][65], str[100], temp[100], attr[100]; -+ int bat_count = 0, start = 0, findex = 0, value = 0; - DIR *battery_dir; - char *name, *dirname; - -@@ -613,165 +635,104 @@ - return -1; - } - -- memset(str, '\0', 100); -- for(int t=0; t<5; t++) -- fgets(str, 100, power_fp); /* skip first 5 lines */ -- -- /* get battery status (full, charging, ...) */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Charging_State, temp, 12); -- } -- -- -- /* get battery presence (0 or 1) */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- strncpy(temp, str+21, 1); -- if(strncmp(temp,"1",1)==0) -- batt_info->Battery_Present = 1; /* yes, we have a battery */ -- else -- { -- batt_info->Battery_Present = 0; -- printf(" Battery is not present, bailing out. \n"); -- return 0; /* bail out if battery is not present */ -- } -- } -- -- -- /* get technology */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Technology, temp, 12); -- } -- else -- strncpy(batt_info->Technology, "unknown", 7); -- -- -- -- //printf(" \n bat_info_tech = %s \n\n ", batt_info->Technology); -- -- -- -- fgets(str, 100, power_fp); /* skip 1 line */ -- -- -- /* get voltage_now */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Voltage_Now, temp, 12); -- } -- else -- strncpy(batt_info->Voltage_Now, "unknown", 7); -- -- -- /* get current_now, which I believe is the charging rate ? */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Present_Rate, temp, 12); -- } -- else -- strncpy(batt_info->Present_Rate, "unknown", 7); -- -- -- /* get charge_full_design */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Design_Cap, temp, 12); -- } -- else -- strncpy(batt_info->Design_Cap, "unknown", 7); -- -- -- //printf(" \n bat_info_design_cap = %s \n ", batt_info->Design_Cap); -- -- -- /* get charge_full, which is the last full capacity I guess ? */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->LastFull_Cap, temp, 12); -- } -- else -- strncpy(batt_info->LastFull_Cap, "unknown", 7); -- -- -- //printf(" \n bat_info_lastfull_cap = %s \n\n ", batt_info->LastFull_Cap); -- -- -- /* get charge_now */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Remaining_Cap, temp, 12); -- } -- else -- strncpy(batt_info->Remaining_Cap, "unknown", 7); -- -- //printf(" \n bat_info_remaining_cap = %s \n\n ", batt_info->Remaining_Cap); -- -- -- /* get model_name */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)>0) -- { -- memset(temp, '\0', 100); -- strncpy(temp, str+24, 12); // use strncpy here because sscanf chokes on blanks in this one ? // -- -- memset(str, '\0', 100); -- sscanf(temp, "%[^\n]", str); // strip trailing \n, fucks up output // -- -- strncpy(batt_info->Model, str, 12); -+ strncpy(batt_info->Technology, "unknown", 7); -+ strncpy(batt_info->Voltage_Now, "unknown", 7); -+ strncpy(batt_info->Charge_Now, "unknown", 7); -+ strncpy(batt_info->Charge_Full, "unknown", 7); -+ strncpy(batt_info->Charge_Full_Design, "unknown", 7); -+ strncpy(batt_info->Present_Rate, "unknown", 7); -+ strncpy(batt_info->Design_Cap, "unknown", 7); -+ strncpy(batt_info->LastFull_Cap, "unknown", 7); -+ strncpy(batt_info->Remaining_Cap, "unknown", 7); -+ strncpy(batt_info->Model, "unknown", 7); -+ strncpy(batt_info->Serial, "unknown", 7); -+ -+ // see linux-2.6/drivers/power/power_supply_sysfs.c -+ // there can be different number of lines, so read up to 40 lines -+ for(int t=0; t<40; t++) { -+ memset(str, '\0', 100); -+ memset(attr, '\0', 100); -+ memset(temp, '\0', 100); -+ fgets(str, 100, power_fp); -+ sscanf(str, "%[^=]s %*s %*[^\n]", attr); -+ sscanf(str, "%*[^=] %*c %s %*[^\n]",temp); -+ if (strcmp(attr,"POWER_SUPPLY_STATUS")==0) { -+ strncpy(batt_info->Charging_State, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_TYPE")==0) { -+ strncpy(batt_info->Bat_Type, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_TECHNOLOGY")==0) { -+ strncpy(batt_info->Technology, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_VOLTAGE_NOW")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mV", value); -+ strncpy(batt_info->Voltage_Now, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_CURRENT_NOW")==0 || -+ strcmp(attr,"POWER_SUPPLY_POWER_NOW")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i", value); -+ strncpy(batt_info->Present_Rate, temp, 9); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_NOW")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mA", value); -+ strncpy(batt_info->Charge_Now, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_FULL_DESIGN")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mA", value); -+ strncpy(batt_info->Charge_Full_Design, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_CHARGE_FULL")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mA", value); -+ strncpy(batt_info->Charge_Full, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_FULL_DESIGN")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mWh", value); -+ strncpy(batt_info->Design_Cap, temp, 9); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_FULL")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mWh", value); -+ strncpy(batt_info->LastFull_Cap, temp, 9); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_ENERGY_NOW")==0) { -+ value = atoi(temp) / 1000; -+ snprintf(temp, sizeof(temp), "%i mWh", value); -+ strncpy(batt_info->Remaining_Cap, temp, 9); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_MODEL_NAME")==0) { -+ strncpy(batt_info->Model, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_SERIAL_NUMBER")==0) { -+ strncpy(batt_info->Serial, temp, 12); -+ } -+ else if (strcmp(attr,"POWER_SUPPLY_PRESENT")==0) { -+ if(strncmp(temp,"1",1)==0) { -+ batt_info->Battery_Present = 1; -+ } -+ else { -+ batt_info->Battery_Present = 0; -+ printf(" Battery is not present, bailing out. \n"); -+ return 0; -+ } -+ } - } -+ if (strcmp(batt_info->Charge_Now,"")!=0 && -+ strcmp(batt_info->Charge_Now,"unknown")!=0) -+ snprintf(temp, sizeof(temp), "%s mA", batt_info->Present_Rate); - else -- strncpy(batt_info->Model, "unknown", 7); -+ snprintf(temp, sizeof(temp), "%s mW", batt_info->Present_Rate); - -- fgets(str, 100, power_fp); -+ strncpy(batt_info->Present_Rate, temp, 9); - -- /* get serial */ -- memset(str, '\0', 100); -- fgets(str, 100, power_fp); -- if (strlen(str)!=0) -- { -- memset(temp, '\0', 100); -- sscanf(str, "%*[^=] %*c %s %[^\n]",temp); -- strncpy(batt_info->Serial, temp, 12); -- } -- else -- strncpy(batt_info->Serial, "unknown", 7); -- - fclose(power_fp); -- } -+ } - else // battery dir is readable but empty : only . and .. at most // - batt_info->Battery_Present = 3; - return 0; diff --git a/cache-size.patch b/cache-size.patch deleted file mode 100644 index cc811d6..0000000 --- a/cache-size.patch +++ /dev/null @@ -1,15 +0,0 @@ -Actually print the cache size instead of cpufreq a second time. - -Reported and fixed by Stephane Wirtel - -diff -rNu acpitool-0.5.1/src/cpu.cpp acpitool-0.5.1-modified/src/cpu.cpp ---- acpitool-0.5.1/src/cpu.cpp 2009-08-13 21:26:02.000000000 +0200 -+++ acpitool-0.5.1-modified/src/cpu.cpp 2019-04-18 16:01:54.091620544 +0200 -@@ -80,6 +80,7 @@ - } - - fgets(str, 299, cpuinfo_fp); -+ fgets(str, 299, cpuinfo_fp); - memset(temp, '\0', 130); - sscanf(str, "%*[^:] %*s %s",temp); - printf(" Cache size : %s KB\n", temp); diff --git a/cleanup.patch b/cleanup.patch deleted file mode 100644 index 3f231af..0000000 --- a/cleanup.patch +++ /dev/null @@ -1,371 +0,0 @@ -Cleanup all of the warnings from implicit char const * casting - -ISO C++ used to allow: - - char *foo; - foo = "my string"; - -The standard has since changed, and this patch changes to the new -expectation: - - char const *foo; // which makes more sense - foo = "my string"; - -Signed-off-by: Al Stone - -diff -NaurEZbwB acpitool-0.5.1.orig/src/ac_adapter.cpp acpitool-0.5.1/src/ac_adapter.cpp ---- acpitool-0.5.1.orig/src/ac_adapter.cpp 2018-10-26 14:08:08.527714586 -0600 -+++ acpitool-0.5.1/src/ac_adapter.cpp 2018-10-26 14:24:33.819571023 -0600 -@@ -50,7 +50,8 @@ - int Do_AC_Info(int verbose) // wrapper around the other 2 functions // - { - ifstream file_in; -- char *dirname, filename[4][50], str[40]; -+ char const *dirname; -+ char filename[4][50], str[40]; - int ac_count = 0; - DIR *ac_dir; - struct dirent *ac_dirent; -@@ -87,7 +88,8 @@ - int Do_AC_Info_Proc(int verbose) - { - ifstream file_in; -- char *dirname, filename[4][50], str[40]; -+ char const *dirname; -+ char filename[4][50], str[40]; - int ac_count = 0; - DIR *ac_dir; - struct dirent *ac_dirent; -@@ -152,7 +154,7 @@ - char filename[2][65], str[100], temp[100], attr[100]; - int ac_count = 0, start = 0, findex = 0; - DIR *ac_dir; -- char *name, *dirname; -+ char const *name, *dirname; - - dirname = "/sys/class/power_supply/"; //find all entries in this dir - -diff -NaurEZbwB acpitool-0.5.1.orig/src/acpitool.cpp acpitool-0.5.1/src/acpitool.cpp ---- acpitool-0.5.1.orig/src/acpitool.cpp 2018-10-26 14:08:08.527714586 -0600 -+++ acpitool-0.5.1/src/acpitool.cpp 2018-10-26 14:23:21.903926202 -0600 -@@ -64,7 +64,8 @@ - int Has_ACPI(char *c) - { - ifstream file_in, file2_in; -- char *filename, *filename2, str[50]; -+ char const *filename, *filename2; -+ char str[50]; - - filename = "/proc/acpi/info"; - filename2 = "/sys/module/acpi/parameters/acpica_version"; -@@ -104,6 +105,7 @@ - return 1; - } - } -+ return 0; - } - - -@@ -137,7 +139,8 @@ - int Get_Kernel_Version(char *c, int verbose) - { - ifstream file_in; -- char *filename, str[20]; -+ char const *filename; -+ char str[20]; - - filename = "/proc/sys/kernel/osrelease"; - -@@ -185,7 +188,8 @@ - int Set_Kernel_Version() - { - ifstream file_in; -- char *filename, str[10]; -+ char const *filename; -+ char str[10]; - - filename = "/proc/sys/kernel/osrelease"; - -@@ -218,7 +222,8 @@ - int Do_Thermal_Info(const int show_trip, int verbose) - { - ifstream file_in, file_in2; -- char *dirname, str[120]; -+ char const *dirname; -+ char str[120]; - vector filename; - - DIR *thermal_dir; -@@ -341,7 +346,8 @@ - int Do_Fan_Info(int verbose) - { - ifstream file_in; -- char *dirname, filename[4][50], str[40]; -+ char const *dirname; -+ char filename[4][50], str[40]; - int fan_count = 0; - DIR *fan_dir; - struct dirent *fan_dirent; -@@ -416,7 +422,7 @@ - int Show_WakeUp_Devices(int verbose) - { - ifstream file_in; -- char *filename; -+ char const *filename; - string str; - - filename = "/proc/acpi/wakeup"; -@@ -461,7 +467,8 @@ - int Toggle_WakeUp_Device(const int Device, int verbose) - { - ofstream file_out; -- char *filename; string str; -+ char const *filename; -+ string str; - int index = 1; int charindex = 0; - std::vector Name(index); // Never is enough, use dynamic structures // - filename = "/proc/acpi/wakeup"; -@@ -527,7 +534,7 @@ - int Do_Suspend(int State) //put system in sleep state 3 or 4 (standby) // - { - ofstream file_out; -- char *filename, *str; -+ char const *filename, *str; - - Set_Kernel_Version(); - -diff -NaurEZbwB acpitool-0.5.1.orig/src/asus.cpp acpitool-0.5.1/src/asus.cpp ---- acpitool-0.5.1.orig/src/asus.cpp 2018-10-26 14:08:08.527714586 -0600 -+++ acpitool-0.5.1/src/asus.cpp 2018-10-26 14:28:37.753758221 -0600 -@@ -45,7 +45,7 @@ - int Has_Asus_ACPI() - { - ifstream file_in; -- char *filename; -+ char const *filename; - - filename = "/proc/acpi/asus"; - -@@ -82,7 +82,8 @@ - int Do_Asus_LCD_Info() - { - ifstream file_in; -- char *filename, lcdb[40]; -+ char const *filename; -+ char lcdb[40]; - - filename = "/proc/acpi/asus/brn"; - -@@ -116,7 +117,7 @@ - int Set_Asus_LCD_Level(int z) - { - ofstream file_out; -- char *filename; -+ char const *filename; - - filename = "/proc/acpi/asus/brn"; - -@@ -144,7 +145,7 @@ - int Do_Asus_Video_Info() - { - ifstream file_in; -- char *filename; -+ char const *filename; - int type; - filename = "/proc/acpi/asus/disp"; - -@@ -199,7 +200,8 @@ - int Do_Asus_Info() - { - ifstream file_in; -- char *filename, info[255]; -+ char const *filename; -+ char info[255]; - - filename = "/proc/acpi/asus/info"; - -@@ -264,7 +266,7 @@ - int Set_Asus_LCD_State(int o) - { - ofstream file_out; -- char *filename; -+ char const *filename; - filename = "/proc/acpi/asus/lcd"; - - file_out.open(filename); -@@ -289,7 +291,7 @@ - int Set_MLed(int state) - { - ofstream file_out; -- char *filename; -+ char const *filename; - filename = "/proc/acpi/asus/mled"; - - file_out.open(filename); -@@ -314,7 +316,7 @@ - int Set_WLed(int state) - { - ofstream file_out; -- char *filename; -+ char const *filename; - filename = "/proc/acpi/asus/wled"; - - file_out.open(filename); -diff -NaurEZbwB acpitool-0.5.1.orig/src/battery.cpp acpitool-0.5.1/src/battery.cpp ---- acpitool-0.5.1.orig/src/battery.cpp 2018-10-26 14:08:08.527714586 -0600 -+++ acpitool-0.5.1/src/battery.cpp 2018-10-26 14:34:12.828762620 -0600 -@@ -355,7 +355,8 @@ - char filename[4][65], str[100], temp[100]; - int bat_count = 0, start = 0, findex = 0; - DIR *battery_dir; -- char *name, *dirname; -+ char *name; -+ char const *dirname; - - dirname = "/proc/acpi/battery/"; //find all entries in this dir - // dirname = "/home/david/dropzone/data/devel/acpi/battery/"; // keep this for testing // -@@ -538,7 +539,8 @@ - char filename[6][65], str[100], temp[100], attr[100]; - int bat_count = 0, start = 0, findex = 0, value = 0; - DIR *battery_dir; -- char *name, *dirname; -+ char *name; -+ char const *dirname; - - dirname = "/sys/class/power_supply/"; //find all entries in this dir - -@@ -743,7 +745,8 @@ - int Count_Batteries_ProcFS() - { - DIR *battery_dir; -- char *name, *dirname; -+ char *name; -+ char const *dirname; - int t = 0; - - dirname = "/proc/acpi/battery/"; -@@ -789,7 +792,8 @@ - { - DIR *battery_dir; - char filename[4][65], str[100]; -- char *name, *dirname; -+ char *name; -+ char const *dirname; - int findex = 0, batcount = 0; - - /* Since kernel 2.6.24, the acpi interface is gradually being moved from /proc/acpi/... to the sys filesystem. */ -diff -NaurEZbwB acpitool-0.5.1.orig/src/cpu.cpp acpitool-0.5.1/src/cpu.cpp ---- acpitool-0.5.1.orig/src/cpu.cpp 2018-10-26 14:08:08.527714586 -0600 -+++ acpitool-0.5.1/src/cpu.cpp 2018-10-26 14:29:35.222273504 -0600 -@@ -48,7 +48,8 @@ - int Show_CPU_Info() - { - ifstream file_in, file2_in; -- char *dirname, filename[25][70], str[300], temp[130]; -+ char const *dirname; -+ char filename[25][70], str[300], temp[130]; - int cpu_count = 0, findex = 0, thrott = 0; - long int max_cstate = 0, cst_cnt = 0, cst_usage_abs[8], - cst_usage_notC0 = 0; -diff -NaurEZbwB acpitool-0.5.1.orig/src/thinkpad.cpp acpitool-0.5.1/src/thinkpad.cpp ---- acpitool-0.5.1.orig/src/thinkpad.cpp 2018-10-26 14:08:08.526714577 -0600 -+++ acpitool-0.5.1/src/thinkpad.cpp 2018-10-26 14:31:29.979302456 -0600 -@@ -12,7 +12,7 @@ - int Has_Thinkpad_ACPI() - { - ifstream file_in; -- char *filename; -+ char const *filename; - - filename = "/proc/acpi/ibm"; - -@@ -27,7 +27,7 @@ - int Eject_Thinkpad_Bay() - { - ofstream bay; -- char *filename; -+ char const *filename; - - if (!Has_Thinkpad_ACPI()) - { -@@ -54,7 +54,7 @@ - int Set_Thinkpad_LCD_Level(int z) - { - ofstream bright; -- char *filename; -+ char const *filename; - - filename = "/proc/acpi/ibm/brightness"; - -@@ -78,7 +78,8 @@ - int Do_Thinkpad_Fan_Info() - { - ifstream fan; -- char *filename, *status, *speed; -+ char const *filename; -+ char *status, *speed; - char line[32]; - int i; - -diff -NaurEZbwB acpitool-0.5.1.orig/src/toshiba.cpp acpitool-0.5.1/src/toshiba.cpp ---- acpitool-0.5.1.orig/src/toshiba.cpp 2018-10-26 14:08:08.526714577 -0600 -+++ acpitool-0.5.1/src/toshiba.cpp 2018-10-26 14:26:28.736601409 -0600 -@@ -45,7 +45,7 @@ - int Has_Toshiba_ACPI() - { - ifstream file_in; -- char *filename; -+ char const *filename; - - filename = "/proc/acpi/toshiba"; - -@@ -82,7 +82,8 @@ - int Do_Toshiba_Fan_Info() - { - ifstream file_in; -- char *filename, str[40]; -+ char const *filename; -+ char str[40]; - - filename = "/proc/acpi/toshiba/fan"; - -@@ -132,7 +133,8 @@ - int Do_LCD_Info() - { - ifstream file_in; -- char *filename, str[40]; -+ char const *filename; -+ char str[40]; - - filename = "/proc/acpi/toshiba/lcd"; - -@@ -166,7 +168,8 @@ - int Force_Fan(int s) - { - ofstream file_out; -- char *filename, str[15]; -+ char const *filename; -+ char str[15]; - - filename = "/proc/acpi/toshiba/fan"; - -@@ -200,7 +203,8 @@ - int Set_LCD_Level(int l) - { - ofstream file_out; -- char *filename, str[15]; -+ char const *filename; -+ char str[15]; - - filename = "/proc/acpi/toshiba/lcd"; - -@@ -230,7 +234,8 @@ - int Do_Video_Info() - { - ifstream file_in; -- char *filename, str[40]; -+ char const *filename; -+ char str[40]; - int lcd, crt; - - filename = "/proc/acpi/toshiba/video"; diff --git a/kernel3.patch b/kernel3.patch deleted file mode 100644 index 8fb592d..0000000 --- a/kernel3.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- acpitool-0.5.1/src/acpitool.cpp 2009-08-13 14:37:48.000000000 -0500 -+++ acpitool-0.5.1/src/acpitool.cpp 2011-07-28 08:40:37.000000000 -0500 -@@ -205,8 +205,7 @@ - Kernel_24 = 1; - Kernel_26 = 0; - } -- -- if(strncmp(str,"2.6",3)==0) -+ else - { - Kernel_24 = 0; - Kernel_26 = 1; diff --git a/sources b/sources index 540c457..c175f78 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9e4ec55201be0be71ffbc56d38b42b57 acpitool-0.5.1.tar.bz2 +7e2f5649f4cff5eace183ea9e68f5f20 acpitool-0.4.7.tar.gz diff --git a/typos.patch b/typos.patch deleted file mode 100644 index 3c974b9..0000000 --- a/typos.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- acpitool/man/acpitool.1 2012-01-13 07:56:18.000000000 -0500 -+++ acpitool/man/acpitool.1 2012-08-10 00:07:25.646700871 -0400 -@@ -33,7 +33,7 @@ - .I /proc/acpi - or - .I /sys/class --entries and presents the output in a meaningfull, human-readable format. -+entries and presents the output in a meaningful, human-readable format. - .br - - It provides a.o. information on battery status, AC adapter presence, thermal reading, etc. This command is -@@ -46,7 +46,7 @@ - - If your laptop is a - .B Toshiba --, it allows you to set the LCD brighness level and toggle the fan on/off. -+, it allows you to set the LCD brightness level and toggle the fan on/off. - .br - - If you have an -@@ -98,7 +98,7 @@ - .B \-l x - Set LCD brightness level to x, where x is in the range 0..7. Works only on Toshiba and IBM Thinkpad laptops. - Requires write access to --.I /proc/acpi/tochiba/lcd -+.I /proc/acpi/toshiba/lcd - or - .I /proc/acpi/ibm/brightness - . diff --git a/var-line.patch b/var-line.patch deleted file mode 100644 index b3a790d..0000000 --- a/var-line.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 2f16822b9487a951ac898fd6703a7f8c7cd4ce06 Mon Sep 17 00:00:00 2001 -From: Guillem Jover -Date: Sat, 15 Nov 2014 11:59:37 +0100 -Subject: [PATCH] Do not assume fixed line lengths for /proc/acpi/wakeup file - -The lines in that file might be equal or longer than 40 characters, which -means that the getline() call will truncate them, possibly at the wrong -place, and then be unable to proceed, as subsequent calls will get stuck -waiting for input that is not coming. ---- - src/acpitool.cpp | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/acpitool.cpp b/src/acpitool.cpp -index f3beeca..e85a7c1 100644 ---- a/src/acpitool.cpp -+++ b/src/acpitool.cpp -@@ -416,7 +416,8 @@ int Do_Fan_Info(int verbose) - int Show_WakeUp_Devices(int verbose) - { - ifstream file_in; -- char *filename, str[40]; -+ char *filename; -+ string str; - - filename = "/proc/acpi/wakeup"; - -@@ -437,14 +438,14 @@ int Show_WakeUp_Devices(int verbose) - } - else - { -- file_in.getline(str, 40); // first line are just headers // -+ getline(file_in, str); // first line are just headers // - cout<<" "< -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 -@@ -459,16 +459,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 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) - { -@@ -483,14 +481,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 - -