Powertop currently assumes /var/cache to be accessible on all distros. This ptach checks if /var/cache is accessible, if not tries other locations Currently /data/local is the alternate location. More locations can be added by modifying the newly added get_param_directory function and creating the directory during init.
Signed-off-by: John Mathew <[email protected]> --- main.cpp | 16 ++++++++-------- parameters/parameters.cpp | 15 ++++++++++++++- parameters/parameters.h | 3 ++- parameters/persistent.cpp | 37 ++++++++++++++++--------------------- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/main.cpp b/main.cpp index 378c880..a3ef1f2 100644 --- a/main.cpp +++ b/main.cpp @@ -256,8 +256,8 @@ void html_report(int time, bool file) /* and wrap up */ learn_parameters(50, 0); - save_all_results("/var/cache/powertop/saved_results.powertop"); - save_parameters("/var/cache/powertop/saved_parameters.powertop"); + save_all_results("saved_results.powertop"); + save_parameters("saved_parameters.powertop"); end_pci_access(); exit(0); } @@ -297,8 +297,8 @@ int main(int argc, char **argv) else mkdir("/data/local/powertop", 0600); - load_results("/var/cache/powertop/saved_results.powertop"); - load_parameters("/var/cache/powertop/saved_parameters.powertop"); + load_results("saved_results.powertop"); + load_parameters("saved_parameters.powertop"); enumerate_cpus(); create_all_devices(); @@ -360,7 +360,7 @@ int main(int argc, char **argv) learn_parameters(250, 0); - save_parameters("/var/cache/powertop/saved_parameters.powertop"); + save_parameters("saved_parameters.powertop"); if (debug_learning) { @@ -395,10 +395,10 @@ int main(int argc, char **argv) end_cpu_data(); clear_cpu_data(); - save_all_results("/var/cache/powertop/saved_results.powertop"); - save_parameters("/var/cache/powertop/saved_parameters.powertop"); + save_all_results("saved_results.powertop"); + save_parameters("saved_parameters.powertop"); learn_parameters(500, 0); - save_parameters("/var/cache/powertop/saved_parameters.powertop"); + save_parameters("saved_parameters.powertop"); end_pci_access(); reset_display(); diff --git a/parameters/parameters.cpp b/parameters/parameters.cpp index c56eab3..f2958f9 100644 --- a/parameters/parameters.cpp +++ b/parameters/parameters.cpp @@ -332,7 +332,7 @@ void store_results(double duration) past_results.push_back(clone_results(&all_results)); } if ((past_results.size() % 10) == 0) - save_all_results(); + save_all_results("saved_results.powertop"); } } @@ -439,3 +439,16 @@ int global_power_valid(void) return global_power_override; } + +/* find the directory to store powertop results/parameters based on distribution*/ +char* get_param_directory(const char *filename) +{ + static char tempfilename[4096]; + + if (access("/var/cache/powertop", W_OK ) == 0) + sprintf(tempfilename, "/var/cache/powertop/%s", filename); + if (access("/data/local/powertop", W_OK ) == 0) + sprintf(tempfilename, "/data/local/powertop/%s", filename); + + return tempfilename; +}; diff --git a/parameters/parameters.h b/parameters/parameters.h index b82427a..26ce742 100644 --- a/parameters/parameters.h +++ b/parameters/parameters.h @@ -98,7 +98,8 @@ extern struct parameter_bundle * clone_parameters(struct parameter_bundle *bundl extern void store_results(double duration); extern void learn_parameters(int iterations, int do_base_power); -extern void save_all_results(const char *filename = "/var/cache/powertop/saved_results.powertop"); +extern char *get_param_directory(const char *filename); +extern void save_all_results(const char *filename = "saved_results.powertop"); extern void load_results(const char *filename); extern void save_parameters(const char *filename); extern void load_parameters(const char *filename); diff --git a/parameters/persistent.cpp b/parameters/persistent.cpp index 9297755..8052392 100644 --- a/parameters/persistent.cpp +++ b/parameters/persistent.cpp @@ -26,7 +26,6 @@ #include <fstream> #include <iomanip> #include <stdlib.h> -#include <unistd.h> #include "parameters.h" #include "../measurement/measurement.h" @@ -38,14 +37,13 @@ void save_all_results(const char *filename) ofstream file; unsigned int i; struct result_bundle *bundle; - char* tempfilename = const_cast<char*>(filename); + char* pathname; - if (access("/var/", W_OK ) != 0) - sprintf(tempfilename, "/data/local/powertop/saved_results.powertop"); + pathname = get_param_directory(filename); - file.open(tempfilename, ios::out); + file.open(pathname, ios::out); if (!file) { - cout << _("Cannot save to file ") << tempfilename << "\n"; + cout << _("Cannot save to file ") << pathname << "\n"; return; } for (i = 0; i < past_results.size(); i++) { @@ -71,14 +69,13 @@ void load_results(const char *filename) struct result_bundle *bundle; int first = 1; unsigned int count = 0; - char* tempfilename = const_cast<char*>(filename); + char* pathname; - if (access("/var/", W_OK ) != 0) - sprintf(tempfilename, "/data/local/powertop/saved_results.powertop"); + pathname = get_param_directory(filename); - file.open(tempfilename, ios::in); + file.open(pathname, ios::in); if (!file) { - cout << _("Cannot load from file ") << tempfilename << "\n"; + cout << _("Cannot load from file ") << pathname << "\n"; return; } @@ -128,19 +125,18 @@ void load_results(const char *filename) void save_parameters(const char *filename) { ofstream file; - char* tempfilename = const_cast<char*>(filename); + char* pathname; // printf("result size is %i, #parameters is %i \n", (int)past_results.size(), (int)all_parameters.parameters.size()); if (!global_power_valid()) return; - if (access("/var/", R_OK ) != 0) - sprintf(tempfilename, "/data/local/powertop/saved_parameters.powertop"); + pathname = get_param_directory(filename); - file.open(tempfilename, ios::out); + file.open(pathname, ios::out); if (!file) { - cout << _("Cannot save to file ") << tempfilename << "\n"; + cout << _("Cannot save to file ") << pathname << "\n"; return; } @@ -159,14 +155,13 @@ void load_parameters(const char *filename) ifstream file; char line[4096]; char *c1; - char* tempfilename = const_cast<char*>(filename); + char* pathname; - if (access("/var/", R_OK ) != 0) - sprintf(tempfilename, "/data/local/powertop/saved_parameters.powertop"); + pathname = get_param_directory(filename); - file.open(tempfilename, ios::in); + file.open(pathname, ios::in); if (!file) { - cout << _("Cannot load from file ") << tempfilename << "\n"; + cout << _("Cannot load from file ") << pathname << "\n"; return; } -- 1.7.1 --------------------------------------------------------------------- Intel Corporation SAS (French simplified joint stock company) Registered headquarters: "Les Montalets"- 2, rue de Paris, 92196 Meudon Cedex, France Registration Number: 302 456 199 R.C.S. NANTERRE Capital: 4,572,000 Euros This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies. _______________________________________________ Power mailing list [email protected] https://bughost.org/mailman/listinfo/power
