static void powertop_init(void) { static char initialized = 0; int ret; struct statfs st_fs; struct rlimit rlmt; if (initialized) return; checkroot(); rlmt.rlim_cur = rlmt.rlim_max = get_nr_open(); setrlimit (RLIMIT_NOFILE, &rlmt); ret = system("/sbin/modprobe cpufreq_stats > /dev/null 2>&1"); ret = system("/sbin/modprobe msr > /dev/null 2>&1"); statfs("/sys/kernel/debug", &st_fs); if (st_fs.f_type != (long) DEBUGFS_MAGIC) { if (access("/bin/mount", X_OK) == 0) { ret = system("/bin/mount -t debugfs debugfs /sys/kernel/debug > /dev/null 2>&1"); } else { ret = system("mount -t debugfs debugfs /sys/kernel/debug > /dev/null 2>&1"); } if (ret != 0) { printf(_("Failed to mount debugfs!\n")); printf(_("exiting...\n")); exit(EXIT_FAILURE); } } srand(time(NULL)); if (access("/var/cache/", W_OK) == 0) mkdir("/var/cache/powertop", 0600); else mkdir("/data/local/powertop", 0600); load_results("saved_results.powertop"); load_parameters("saved_parameters.powertop"); enumerate_cpus(); create_all_devices(); detect_power_meters(); register_parameter("base power", 100, 0.5); register_parameter("cpu-wakeups", 39.5); register_parameter("cpu-consumption", 1.56); register_parameter("gpu-operations", 0.5576); register_parameter("disk-operations-hard", 0.2); register_parameter("disk-operations", 0.0); register_parameter("xwakes", 0.1); load_parameters("saved_parameters.powertop"); initialized = 1; }
int main(int ac, char **av) { char *t; int opt, mode = MODE_PAGER; extern int optind; extern char *optarg; if (ac < 2) usage(); setlocale(LC_ALL, ""); /* Populate $HOME */ t = getenv("HOME"); if (t == NULL || *t == '\0') errx(0, "Unknown variable '$HOME'."); mbstowcs(home, t, MAXPATHLEN); /* Populate $EDITOR */ t = getenv("EDITOR"); if (t != NULL) mbstowcs(editor, t, MAXPATHLEN); while ((opt = getopt(ac, av, "hVdeg:qrc:")) != -1) { switch (opt) { case 'd': cfg_debug = 1; break; case 'V': mode = MODE_VERSION; break; case 'q': mode = MODE_QUERY; break; case 'e': mode = MODE_EDIT; break; case 'g': mode = MODE_GENERATE; password_length = strtoumax(optarg, NULL, 10); break; case 'r': mode = MODE_RAW; break; case 'c': swprintf(cfg_config_path, MAXPATHLEN, L"%s", optarg); break; default: usage(); } } debug("read config"); config_set_defaults(); config_check_paths(); config_read(); ac -= optind; av += optind; keywords_load_from_argv(av); /* Decide if we use the internal pager or just dump to screen. */ switch (mode) { case MODE_VERSION: printf("mdp-%s\n", MDP_VERSION); break; case MODE_RAW: debug("mode: MODE_RAW"); if (ac == 0) usage(); gpg_check(); load_results(); filter_results(); print_results(); break; case MODE_PAGER: debug("mode: MODE_PAGER"); if (ac == 0) usage(); gpg_check(); load_results(); filter_results(); pager(START_WITHOUT_PROMPT); break; case MODE_QUERY: debug("mode: MODE_QUERY"); gpg_check(); load_results(); pager(START_WITH_PROMPT); break; case MODE_EDIT: debug("mode: MODE_EDIT"); if (ac != 0) usage(); gpg_check(); lock_set(); load_results(); edit_results(); break; case MODE_GENERATE: debug("mode: MODE_GENERATE"); if (ac != 0) usage(); print_passwords(password_length, cfg_password_count); break; default: errx(1, "unknown mode"); break; } debug("normal shutdown"); return 0; }