Create a single structure for powerdebug options.

Signed-off-by: Daniel Lezcano <daniel.lezc...@free.fr>
---
 powerdebug.c |  173 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 98 insertions(+), 75 deletions(-)

diff --git a/powerdebug.c b/powerdebug.c
index 3f4d60c..efdb1a2 100644
--- a/powerdebug.c
+++ b/powerdebug.c
@@ -19,7 +19,6 @@
 int dump;
 int highlighted_row;
 int selectedwindow = -1;
-double ticktime = 10.0;  /* in seconds */
 
 char *win_names[TOTAL_FEATURE_WINS] = {
        "Clocks",
@@ -45,119 +44,143 @@ void usage(void)
                " -s)\n");
        printf("  -V, --version         Show Version\n");
        printf("  -h, --help            Help\n");
-
-       exit(0);
 }
 
 void version()
 {
        printf("powerdebug version %s\n", VERSION);
-       exit(0);
 }
 
-int main(int argc, char **argv)
-{
-       int c, i;
-       int firsttime[TOTAL_FEATURE_WINS];
-       int enter_hit = 0, verbose = 0, findparent_ncurses = 0, refreshwin = 0;
-       int regulators = 0, sensors = 0, clocks = 0, findparent = 0;
-       char clkarg[64], clkname_str[64];
+/*
+ * Options:
+ * -r, --regulator      : regulator
+ * -s, --sensor                : sensors
+ * -c, --clock         : clocks
+ * -p, --findparents    : clockname whose parents have to be found
+ * -t, --time          : ticktime
+ * -d, --dump          : dump
+ * -v, --verbose       : verbose
+ * -V, --version       : version
+ * -h, --help          : help
+ * no option / default : show usage!
+ */
+
+static struct option long_options[] = {
+       { "regulator", 0, 0, 'r' },
+       { "sensor", 0, 0, 's' },
+       { "clock",  0, 0, 'c' },
+       { "findparents", 1, 0, 'p' },
+       { "time", 1, 0, 't' },
+       { "dump", 0, 0, 'd' },
+       { "verbose", 0, 0, 'v' },
+       { "version", 0, 0, 'V' },
+       { "help", 0, 0, 'h' },
+       { 0, 0, 0, 0 }
+};
 
-       for (i = 0; i < TOTAL_FEATURE_WINS; i++)
-               firsttime[i] = 1;
+struct powerdebug_options {
+       int findparent;
+       int verbose;
+       int regulators;
+       int sensors;
+       int clocks;
+       int ticktime;
+       char clkarg[64];
+};
+
+int getoptions(int argc, char *argv[], struct powerdebug_options *options)
+{
+       int c;
 
-       /*
-        * Options:
-        * -r, --regulator      : regulator
-        * -s, --sensor         : sensors
-        * -c, --clock          : clocks
-        * -p, --findparents    : clockname whose parents have to be found
-        * -t, --time           : ticktime
-        * -d, --dump           : dump
-        * -v, --verbose        : verbose
-        * -V, --version        : version
-        * -h, --help           : help
-        * no option / default : show usage!
-        */
+       memset(options, 0, sizeof(*options));
+       options->ticktime = 10;
 
        while (1) {
                int optindex = 0;
-               static struct option long_options[] = {
-                       {"regulator", 0, 0, 'r'},
-                       {"sensor", 0, 0, 's'},
-                       {"clock", 0, 0, 'c'},
-                       {"findparents", 1, 0, 'p'},
-                       {"time", 1, 0, 't'},
-                       {"dump", 0, 0, 'd'},
-                       {"verbose", 0, 0, 'v'},
-                       {"version", 0, 0, 'V'},
-                       {"help", 0, 0, 'h'},
-                       {0, 0, 0, 0}
-               };
-
-               c = getopt_long(argc, argv, "rscp:t:dvVh", long_options, 
&optindex);
+
+               c = getopt_long(argc, argv, "rscp:t:dvVh",
+                               long_options, &optindex);
                if (c == -1)
                        break;
 
                switch (c) {
                case 'r':
-                       regulators = 1;
+                       options->regulators = 1;
                        selectedwindow = REGULATOR;
                        break;
                case 's':
-                       sensors = 1;
+                       options->sensors = 1;
                        selectedwindow = SENSOR;
                        break;
                case 'c':
-                       clocks = 1;
+                       options->clocks = 1;
                        selectedwindow = CLOCK;
                        break;
                case 'p':
-                       findparent = 1;
-                       strcpy(clkarg, optarg);
+                       options->findparent = 1;
+                       strcpy(options->clkarg, optarg);
                        break;
                case 't':
-                       ticktime = strtod(optarg, NULL);
+                       options->ticktime = strtod(optarg, NULL);
                        break;
                case 'd':
                        dump = 1;
                        break;
                case 'v':
-                       verbose = 1;
+                       options->verbose = 1;
                        break;
                case 'V':
                        version();
                        break;
-               case 'h':
-                       usage();
-                       break;
                case '?':
-                       fprintf (stderr, "%s: Unknown option %c'.\n",
+                       fprintf(stderr, "%s: Unknown option %c'.\n",
                                argv[0], optopt);
-                       exit(1);
                default:
-                       usage();
-                       break;
+                       return -1;
                }
        }
 
-       if (dump && !(regulators || clocks || sensors)) {
-               //fprintf(stderr, "Dump mode (-d) supported only with -c, -r "
-               //              "or -s ..\n");
-               //usage();
-               // By Default lets show everything we have!
-               regulators = clocks = sensors = 1;
+       if (dump && !(options->regulators ||
+                     options->clocks || options->sensors)) {
+                /* By Default lets show everything we have */
+               options->regulators = options->clocks = options->sensors = 1;
        }
 
-       if (findparent && (!clocks || !dump)) {
+       if (options->findparent && (!options->clocks || !dump)) {
                fprintf(stderr, "-p option passed without -c and -d."
                        " Exiting...\n");
-               usage();
+               return -1;
        }
 
        if (!dump && selectedwindow == -1)
                selectedwindow = CLOCK;
 
+       return 0;
+}
+
+int main(int argc, char **argv)
+{
+       int i;
+       int findparent_ncurses = 0, refreshwin = 0;
+       int enter_hit = 0;
+       int firsttime[TOTAL_FEATURE_WINS];
+       char clkname_str[64];
+       struct powerdebug_options *options;
+
+       for (i = 0; i < TOTAL_FEATURE_WINS; i++)
+               firsttime[i] = 1;
+
+       options = malloc(sizeof(*options));
+       if (!options) {
+               fprintf(stderr, "failed to allocated memory\n");
+               return -1;
+       }
+
+       if (getoptions(argc, argv, options)) {
+               usage();
+               return 1;
+       }
+
        init_regulator_ds();
 
        while (1) {
@@ -172,17 +195,17 @@ int main(int argc, char **argv)
                        show_header();
                }
 
-               if (regulators || selectedwindow == REGULATOR) {
+               if (options->regulators || selectedwindow == REGULATOR) {
                        read_regulator_info();
                        if (!dump) {
                                create_selectedwindow();
-                               show_regulator_info(verbose);
+                               show_regulator_info(options->verbose);
                        }
                        else
-                               print_regulator_info(verbose);
+                               print_regulator_info(options->verbose);
                }
 
-               if (clocks || selectedwindow == CLOCK) {
+               if (options->clocks || selectedwindow == CLOCK) {
                        int ret = 0;
                        if (firsttime[CLOCK]) {
                                ret = init_clock_details();
@@ -202,7 +225,7 @@ int main(int argc, char **argv)
                                        if (refreshwin)
                                                command = REFRESH_WINDOW;
                                        hrow = read_and_print_clock_info(
-                                               verbose,
+                                               options->verbose,
                                                highlighted_row,
                                                command);
                                        highlighted_row = hrow;
@@ -212,19 +235,19 @@ int main(int argc, char **argv)
                                                        enter_hit);
                        }
                        if (!ret && dump) {
-                               if (findparent)
-                                       read_and_dump_clock_info_one(clkarg);
+                               if (options->findparent)
+                                       
read_and_dump_clock_info_one(options->clkarg);
                                else
-                                       read_and_dump_clock_info(verbose);
+                                       
read_and_dump_clock_info(options->verbose);
                        }
                }
 
-               if (sensors || selectedwindow == SENSOR) {
+               if (options->sensors || selectedwindow == SENSOR) {
                        if (!dump) {
                                create_selectedwindow();
                                print_sensor_header();
                        } else
-                               read_and_print_sensor_info(verbose);
+                               read_and_print_sensor_info(options->verbose);
                }
 
                if (dump)
@@ -232,8 +255,8 @@ int main(int argc, char **argv)
 
                FD_ZERO(&readfds);
                FD_SET(0, &readfds);
-               tval.tv_sec = ticktime;
-               tval.tv_usec = (ticktime - tval.tv_sec) * 1000000;
+               tval.tv_sec = options->ticktime;
+               tval.tv_usec = (options->ticktime - tval.tv_sec) * 1000000;
 
                key = select(1, &readfds, NULL, NULL, &tval);
 
@@ -308,7 +331,7 @@ int main(int argc, char **argv)
                                exit(0);
                        if (keychar == 'R') {
                                refreshwin = 1;
-                               ticktime = 3;
+                               options->ticktime = 3;
                        } else
                                refreshwin = 0;
                }
-- 
1.7.1


_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to