diff --git a/src/tuning/bluetooth.cpp b/src/tuning/bluetooth.cpp index e0bdf12..01c673d 100644 --- a/src/tuning/bluetooth.cpp +++ b/src/tuning/bluetooth.cpp @@ -46,8 +46,8 @@ bt_tunable::bt_tunable(void) : tunable("", 1.0, "Good", "Bad", "Unknown") { sprintf(desc, _("Bluetooth device interface status")); - strcpy(toggle_bad, "/usr/sbin/hciconfig hci0 up &> /dev/null &"); - strcpy(toggle_good, "/usr/sbin/hciconfig hci0 down &> /dev/null"); + toggle_bad = "/usr/sbin/hciconfig hci0 up &> /dev/null &"; + toggle_good = "/usr/sbin/hciconfig hci0 down &> /dev/null"; } @@ -188,9 +188,9 @@ const char *bt_tunable::toggle_script(void) good = good_bad(); if (good == TUNE_GOOD) { - return toggle_bad; + return toggle_bad.c_str(); } - return toggle_good; + return toggle_good.c_str(); } diff --git a/src/tuning/cpufreq.cpp b/src/tuning/cpufreq.cpp index c169e6e..f696c89 100644 --- a/src/tuning/cpufreq.cpp +++ b/src/tuning/cpufreq.cpp @@ -189,7 +189,7 @@ const char *cpufreq_tunable::toggle_script(void) { int good; good = good_bad(); - strcpy(toggle_good, "/sbin/modprobe cpufreq_ondemand > /dev/null 2>&1\n"); + toggle_good = "/sbin/modprobe cpufreq_ondemand > /dev/null 2>&1\n"; if (good == TUNE_GOOD) { dir = opendir("/sys/devices/system/cpu"); @@ -202,12 +202,12 @@ const char *cpufreq_tunable::toggle_script(void) { sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name); if (stat(filename, &statbuf) == -1) continue; - sprintf(tmp, "echo '%s' > '%s';\n", original, filename); - strcat(toggle_good, tmp); + snprintf(tmp, 4096, "echo '%s' > '%s';\n", original, filename); + toggle_good += tmp; } closedir(dir); - return toggle_good; + return toggle_good.c_str(); } dir = opendir("/sys/devices/system/cpu"); @@ -220,12 +220,12 @@ const char *cpufreq_tunable::toggle_script(void) { sprintf(filename, "/sys/devices/system/cpu/%s/cpufreq/scaling_governor", dirent->d_name); if (stat(filename, &statbuf) == -1) continue; - sprintf(tmp, "echo 'ondemand' > '%s';\n", filename); - strcat(toggle_good, tmp); + snprintf(tmp, 4096, "echo 'ondemand' > '%s';\n", filename); + toggle_good += tmp; } closedir(dir); - return toggle_good; + return toggle_good.c_str(); } diff --git a/src/tuning/ethernet.cpp b/src/tuning/ethernet.cpp index 3164b31..d5ad8ed 100644 --- a/src/tuning/ethernet.cpp +++ b/src/tuning/ethernet.cpp @@ -52,11 +52,13 @@ extern void create_all_nics(callback fn); ethernet_tunable::ethernet_tunable(const char *iface) : tunable("", 0.3, _("Good"), _("Bad"), _("Unknown")) { + char tmp[4096]; + memset(interf, 0, sizeof(interf)); strncpy(interf, iface, sizeof(interf)); sprintf(desc, _("Wake-on-lan status for device %s"), iface); - sprintf(toggle_good, "ethtool -s %s wol d;", iface); - + snprintf(tmp, 4096, "ethtool -s %s wol d;", iface); + toggle_good = tmp; } @@ -137,7 +139,7 @@ const char *ethernet_tunable::toggle_script(void) good = good_bad(); if (good != TUNE_GOOD) { - return toggle_good; + return toggle_good.c_str(); } return NULL; diff --git a/src/tuning/runtime.cpp b/src/tuning/runtime.cpp index b57d53e..3369976 100644 --- a/src/tuning/runtime.cpp +++ b/src/tuning/runtime.cpp @@ -42,6 +42,7 @@ runtime_tunable::runtime_tunable(const char *path, const char *bus, const char * { ifstream file; sprintf(runtime_path, "%s/power/control", path); + char tmp[4096]; sprintf(desc, _("Runtime PM for %s device %s"), bus, dev); @@ -77,8 +78,10 @@ runtime_tunable::runtime_tunable(const char *path, const char *bus, const char * } - sprintf(toggle_good, "echo 'auto' > '%s';", runtime_path); - sprintf(toggle_bad, "echo 'on' > '%s';", runtime_path); + snprintf(tmp, 4096, "echo 'auto' > '%s';", runtime_path); + toggle_good = tmp; + snprintf(tmp, 4096, "echo 'on' > '%s';", runtime_path); + toggle_bad = tmp; } int runtime_tunable::good_bad(void) @@ -112,10 +115,10 @@ const char *runtime_tunable::toggle_script(void) good = good_bad(); if (good == TUNE_GOOD) { - return toggle_bad; + return toggle_bad.c_str(); } - return toggle_good; + return toggle_good.c_str(); } diff --git a/src/tuning/tunable.h b/src/tuning/tunable.h index 3372378..8f90ee2 100644 --- a/src/tuning/tunable.h +++ b/src/tuning/tunable.h @@ -26,6 +26,7 @@ #define _INCLUDE_GUARD_TUNABLE_H #include +#include #include "../lib.h" @@ -43,8 +44,8 @@ class tunable { char bad_string[128]; char neutral_string[128]; protected: - char toggle_good[4096]; - char toggle_bad[4096]; + string toggle_good; + string toggle_bad; public: char desc[4096]; double score; diff --git a/src/tuning/tuningsysfs.cpp b/src/tuning/tuningsysfs.cpp index ec1ca6b..aa4ebd5 100644 --- a/src/tuning/tuningsysfs.cpp +++ b/src/tuning/tuningsysfs.cpp @@ -43,11 +43,15 @@ sysfs_tunable::sysfs_tunable(const char *str, const char *_sysfs_path, const char *_target_content) : tunable(str, 1.0, _("Good"), _("Bad"), _("Unknown")) { + char tmp[4096]; + strcpy(sysfs_path, _sysfs_path); strcpy(target_value, _target_content); bad_value[0] = 0; - sprintf(toggle_good, "echo '%s' > '%s';", target_value, sysfs_path); - sprintf(toggle_bad, "echo '%s' > '%s';", bad_value, sysfs_path); + snprintf(tmp, 4096, "echo '%s' > '%s';", target_value, sysfs_path); + toggle_good = tmp; + snprintf(tmp, 4096, "echo '%s' > '%s';", bad_value, sysfs_path); + toggle_bad = tmp; } int sysfs_tunable::good_bad(void) @@ -92,11 +96,11 @@ const char *sysfs_tunable::toggle_script(void) { if (good == TUNE_GOOD) { if (strlen(bad_value) > 0) - return toggle_bad; + return toggle_bad.c_str(); return NULL; } - return toggle_good; + return toggle_good.c_str(); } diff --git a/src/tuning/tuningusb.cpp b/src/tuning/tuningusb.cpp index 74bbacf..2cd7efe 100644 --- a/src/tuning/tuningusb.cpp +++ b/src/tuning/tuningusb.cpp @@ -43,6 +43,7 @@ usb_tunable::usb_tunable(const char *path, const char *name) : tunable("", 0.9, char filename[4096]; char vendor[2048]; char product[2048]; + char tmp[4096]; string str1, str2; sprintf(usb_path, "%s/power/control", path); @@ -75,8 +76,10 @@ usb_tunable::usb_tunable(const char *path, const char *name) : tunable("", 0.9, else if (strlen(vendor)) sprintf(desc, _("Autosuspend for USB device %s [%s]"), vendor, name); - sprintf(toggle_good, "echo 'auto' > '%s';", usb_path); - sprintf(toggle_bad, "echo 'on' > '%s';", usb_path); + snprintf(tmp, 4096, "echo 'auto' > '%s';", usb_path); + toggle_good = tmp; + snprintf(tmp, 4096, "echo 'on' > '%s';", usb_path); + toggle_bad = tmp; } int usb_tunable::good_bad(void) @@ -110,10 +113,10 @@ const char *usb_tunable::toggle_script(void) good = good_bad(); if (good == TUNE_GOOD) { - return toggle_bad; + return toggle_bad.c_str(); } - return toggle_good; + return toggle_good.c_str(); } void add_usb_tunables(void) diff --git a/src/tuning/wifi.cpp b/src/tuning/wifi.cpp index 77cdfcc..2cc01b8 100644 --- a/src/tuning/wifi.cpp +++ b/src/tuning/wifi.cpp @@ -44,11 +44,15 @@ extern "C" { wifi_tunable::wifi_tunable(const char *_iface) : tunable("", 1.5, _("Good"), _("Bad"), _("Unknown")) { + char tmp[4096]; + strcpy(iface, _iface); sprintf(desc, _("Wireless Power Saving for interface %s"), iface); - sprintf(toggle_good, "iw dev %s set power_save on", iface); - sprintf(toggle_bad, "iw dev %s set power_save off", iface); + snprintf(tmp, 4096, "iw dev %s set power_save on", iface); + toggle_good = tmp; + snprintf(tmp, 4096, "iw dev %s set power_save off", iface); + toggle_bad = tmp; } int wifi_tunable::good_bad(void) @@ -78,10 +82,10 @@ const char *wifi_tunable::toggle_script(void) good = good_bad(); if (good == TUNE_GOOD) { - return toggle_bad; + return toggle_bad.c_str(); } - return toggle_good; + return toggle_good.c_str(); } void add_wifi_tunables(void)