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

Reply via email to