diff options
-rw-r--r-- | TODO.md | 1 | ||||
-rw-r--r-- | bat_tray.c | 20 | ||||
-rw-r--r-- | common.c | 13 | ||||
-rw-r--r-- | common.h | 6 | ||||
-rw-r--r-- | getcore.h | 2 | ||||
-rw-r--r-- | getfreq.c | 37 | ||||
-rw-r--r-- | getfreq.h | 3 | ||||
-rw-r--r-- | getgov.c | 22 | ||||
-rw-r--r-- | getgov.h | 2 | ||||
-rw-r--r-- | paramano.c | 22 | ||||
-rw-r--r-- | paramano.h | 2 | ||||
-rw-r--r-- | paramano_set.c | 149 | ||||
-rw-r--r-- | paramano_set_interface.h | 2 | ||||
-rw-r--r-- | tray.c | 17 | ||||
-rw-r--r-- | tray.h | 2 |
15 files changed, 130 insertions, 170 deletions
@@ -8,5 +8,4 @@ Normal Priority Low Priority ------------ -* Ensure all code aligns to an explicit style * Make a curses-based version of paramano @@ -43,7 +43,6 @@ long get_bat_seconds_left() int full = 0; int rate = 0; - /* FIXME this now/full/rate logic has probably earned its own function. * Not because of DRY, but just for readability's sake perhaps */ @@ -81,12 +80,8 @@ long get_bat_seconds_left() /* Note the '<=' for rate (we divide by rate) */ - if (full < 0 || - now < 0 || - rate <= 0) - { + if (full < 0 || now < 0 || rate <= 0) return -1; - } switch(get_battery_state()) { @@ -188,10 +183,10 @@ void bat_tray_init() { char icon_file[1024]; - // Get the battery number, store it for later + /* Get the battery number, store it for later */ bat_num = get_bat_num(); - // Set up battery info filenames/paths + /* Set up battery info filenames/paths */ snprintf(CHARGE_VALUE_PATH, sizeof(CHARGE_STATE_PATH), "/sys/class/power_supply/BAT%d/capacity", bat_num); snprintf(CHARGE_STATE_PATH, sizeof(CHARGE_STATE_PATH), "/sys/class/power_supply/BAT%d/status", bat_num); @@ -231,7 +226,7 @@ void bat_tray_hide() int get_battery_state() { char state[1024]; - FILE* fd; + FILE* fd = NULL; if (!(fd = fopen(CHARGE_STATE_PATH, "r")) || !fgets(state, sizeof(state), fd)) @@ -260,13 +255,14 @@ int get_battery_state() **********************************************************************/ int get_bat_num() { - FILE* fd; + FILE* fd = NULL; char filename[1024]; - unsigned int i; + int i = 0; + for(i = 0; i < 10; i++) { snprintf(filename, sizeof(filename), "/sys/class/power_supply/BAT%d/present", i); - if( (fd = fopen(filename, "r")) ) + if((fd = fopen(filename, "r"))) { if (fgetc(fd) == '1') { @@ -30,7 +30,6 @@ int get_int_value_from_filef(const char* format, ...) va_start(a, format); value = vget_int_value_from_filef(format, a); va_end(a); - return value; } @@ -40,7 +39,6 @@ int get_int_value_from_filef(const char* format, ...) **********************************************************************/ int vget_int_value_from_filef(const char* format, va_list args) { - char filename[1024]; if (vsnprintf(filename, sizeof(filename), format, args) == sizeof(filename)) fprintf(stderr, "WARN: filename buffer too small"); @@ -53,9 +51,9 @@ int vget_int_value_from_filef(const char* format, va_list args) **********************************************************************/ int get_int_value_from_file(const char* filename) { - FILE* fd; + FILE* fd = NULL; char buffer[512]; - int value; + int value = 0; if(!(fd = fopen(filename, "r"))) return -1; @@ -68,7 +66,6 @@ int get_int_value_from_file(const char* filename) } - /*********************************************************************** * Truncates a string at the first '\r' or '\n' **********************************************************************/ @@ -84,9 +81,5 @@ void chomp(char *string) **********************************************************************/ int get_int(const char* string) { - char* first_num; - - first_num = strpbrk(string, "0123456789"); - - return atoi(first_num); + return atoi(strpbrk(string, "0123456789")); } @@ -27,12 +27,12 @@ int get_int_value_from_file(const char* filename); void chomp(char *string); int get_int(const char* string); -// <ew> Stringification of line number +/* <ew> Stringification of line number */ #define STRING2(x) #x #define STRING(x) STRING2(x) #define STR_LINE STRING(__LINE__) -// </ew> +/* </ew> */ #define info(...) printf("INFO: "__FILE__":"STR_LINE" --- "__VA_ARGS__) #define FILE_PATH_SIZE 2048 -#endif +#endif /* ifndef COMMON_H */ @@ -22,4 +22,4 @@ void gc_init(); unsigned int gc_number(); -#endif +#endif /* ifndef GETCORE_H */ @@ -23,7 +23,7 @@ #define FREQ_LENGTH 14 static char freqs[MAX_CORES][MAX_FREQS][FREQ_LENGTH]; -static int total_freqs; // Number of freqs for core 0 +static int total_freqs; /* Number of freqs for core 0 */ /*********************************************************************** @@ -31,25 +31,24 @@ static int total_freqs; // Number of freqs for core 0 **********************************************************************/ void gf_init() { - char freq_string[4096]; // POSIX suggested line length. Source of error for CPUs with a huge number of freqs - char *next_token; - unsigned int i; + char freq_string[4096]; /* POSIX suggested line length. Source of error for CPUs with a huge number of freqs */ + char *next_token = NULL; + unsigned int i = 0; memset(freqs, '\0', sizeof(freqs)); - - for(i = 0; (i < gc_number() && i < MAX_CORES); i++) + for(i = 0; i < gc_number() && i < MAX_CORES; i++) { memset(freq_string, '\0', sizeof(freq_string) ); - // Get available governor freqs. If no governor, try next cpu + /* Get available governor freqs. If no governor, try next cpu */ if (gf_available(i, freq_string, sizeof(freq_string) ) == -1) continue; *strchrnul(freq_string, '\n') = '\0'; - // freq_string is a space separated list of freqs - // Use strtok to find each + /* freq_string is a space separated list of freqs. + * Use strtok to find each */ next_token = strtok(freq_string, " \n"); total_freqs = 0; do @@ -59,7 +58,7 @@ void gf_init() } while((next_token = strtok(NULL, " ")) != NULL); } - // Hit the limit of storage of cores' frequencies + /* Hit the limit of storage of cores' frequencies */ if (i == MAX_CORES) info("Unable to add more than %d cores\n", MAX_CORES); } @@ -69,18 +68,17 @@ void gf_init() **********************************************************************/ int gf_current(int core) { - FILE* fd; + FILE* fd = NULL; char buff[4096]; char path[1024]; - int freq; + int freq = 0; snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_cur_freq", core); if(!(fd = fopen(path, "r"))) return -1; - fgets(buff, 13, fd); - + fgets(buff, 13, fd); /* FIXME magic */ freq = atoi(buff); fclose(fd); @@ -93,7 +91,7 @@ int gf_current(int core) **********************************************************************/ int gf_available(int core, char* out, int size) { - FILE* fd; + FILE* fd = NULL; char path[1024]; snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_available_frequencies", core); @@ -102,7 +100,6 @@ int gf_available(int core, char* out, int size) return -1; fgets(out, size, fd); - fclose(fd); return 0; } @@ -112,13 +109,13 @@ int gf_available(int core, char* out, int size) **********************************************************************/ void gf_get_frequency_label(char *buffer, size_t max_size, int freq) { - if(freq >= 1000000000) // >= 1 billion KHz (1 THz) This, ladies and gentlement, is future-proofing ;) + if(freq >= 1000000000) /* This, ladies and gentlement, is future-proofing */ snprintf(buffer, max_size, "%.2f THz", (double)freq/1000000000 ); - else if(freq >= 1000000) // >= 1 million KHz (1 GHz) + else if(freq >= 1000000) snprintf(buffer, max_size, "%.2f GHz", (double)freq/1000000 ); - else if (freq >= 1000) // >= 1 thousand KHz (1 MHz) + else if (freq >= 1000) snprintf(buffer, max_size, "%.2f MHz", (double)freq/1000 ); - else // < 1000 KHz (1 MHz) + else snprintf(buffer, max_size, "%.2f KHz", (double)freq); } @@ -27,5 +27,4 @@ char* gf_freqa(int core, int index); int gf_freqi(int core, int index); unsigned int gf_number(); - -#endif +#endif /* ifndef GETFREQ_H */ @@ -27,20 +27,20 @@ static int total_governors; **********************************************************************/ void gg_init() { - gchar gov_string[500]; + char gov_string[500]; unsigned int i = 0; total_governors = 0; + for (i = 0; i < gc_number(); i++) { memset(gov_string, '\0', sizeof(gov_string) ); gg_available(i, gov_string, sizeof(gov_string) ); - // go through every governor in gov_string - gchar* curr = (char*)&gov_string; - gchar* end_of_curr = g_strstr_len(curr, strlen(curr), " "); + char* curr = gov_string; + char* end_of_curr = g_strstr_len(curr, strlen(curr), " "); while (end_of_curr) { - memset(governors[i][total_governors], '\0', 13); + memset(governors[i][total_governors], '\0', 13); /* FIXME magic */ memmove(governors[i][total_governors], curr, end_of_curr - curr); curr = end_of_curr+1; @@ -56,20 +56,17 @@ void gg_init() **********************************************************************/ bool gg_current(int core, char* out, int size) { - FILE* fd; + FILE* fd = NULL; char path[1024]; + snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor", core); if (!(fd = fopen(path, "r"))) return false; fgets(out, size, fd); - - // Get first line - gchar* newline = g_strrstr(out, "\n"); - *newline = '\0'; - fclose(fd); + chomp(out); return true; } @@ -79,8 +76,9 @@ bool gg_current(int core, char* out, int size) **********************************************************************/ bool gg_available(int core, char* out, int size) { + FILE *fd = NULL; char path[1024]; - FILE *fd; + snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_available_governors", core); if (!(fd = fopen(path, "r"))) @@ -25,4 +25,4 @@ bool gg_available(int core, char* out, int size); char* gg_gov(int core, int index); unsigned int gg_number(); -#endif +#endif /* ifndef GETGOV_H */ @@ -41,11 +41,11 @@ int main(int argc, char** argv) tray_init(); tray_show(); - // Show battery tray only if we're supposed to + /* Show battery tray only if we're supposed to */ if(DEFAULT_SHOW_BATTERY) { bat_tray_init(); - bat_tray_show(); +// bat_tray_show(); } gtk_main(); @@ -60,22 +60,22 @@ void config_init() { struct config_file config; FILE* fd = NULL; - gboolean home_config_exists; - config.key_file = NULL; + bool home_config_exists = false; + config.key_file = NULL; config.file_name = g_strconcat(getenv("HOME"), "/.paramano.conf", NULL); - // Check if ~/.paramano.conf exists + /* Check if ~/.paramano.conf exists */ if( (fd = fopen(config.file_name, "r")) ) { - // If file exists, close it, set param to TRUE + /* If file exists, close it, set param to true */ fclose(fd); - home_config_exists = TRUE; + home_config_exists = true; } else { - // If file didn't exist, it's not open (don't close it), free filename var, set param to FALSE + /* If file didn't exist, it's not open (don't close it), free filename var, set param to false */ g_free(config.file_name); - home_config_exists = FALSE; + home_config_exists = false; } if(!home_config_exists) @@ -88,7 +88,7 @@ void config_init() return; } - // Reset defaults to default values + /* Reset defaults to default values */ defaults_init(); DEFAULT_GOV = config_get_key(&config, "governor", "default"); @@ -105,7 +105,7 @@ void config_init() if ((temp = config_get_key(&config, "extra", "theme"))) snprintf(DEFAULT_THEME, sizeof(DEFAULT_THEME), "%s", temp); - g_free(config.file_name); +// g_free(config.file_name); config_close(&config); } @@ -42,4 +42,4 @@ void config_init(); -#endif +#endif /* ifndef PARAMANO_H */ diff --git a/paramano_set.c b/paramano_set.c index 9bcbbff..b902a84 100644 --- a/paramano_set.c +++ b/paramano_set.c @@ -19,107 +19,86 @@ #include "paramano.h" -#define FILE_PATH_STRING_SIZE 100 - -#define ARG_CORE 0x1 -#define ARG_GOV 0x2 -#define ARG_FREQ 0x4 -typedef struct { - char present; - char *core; - char *governor; - char *frequency; -} argument_summary; - -char write_str_to_file(const char *file, const char *data, const char *core) +#define set_freq_max(freq, core) write_str_to_file("scaling_max_freq", freq, core) +#define set_freq_min(freq, core) write_str_to_file("scaling_min_freq", freq, core) +#define set_speed(freq, core) write_str_to_file("scaling_setspeed", freq, core) +#define set_gov(gov, core) write_str_to_file("scaling_governor", gov, core) + +void die_syntax(const char *prefix); +char write_str_to_file(const char *file, const char *data, int core); + +int main(int argc, char *argv[]) { - FILE *fd; - char file_path[FILE_PATH_STRING_SIZE]; + char c = 0; + int core = -1; + char *frequency = NULL; + char *governor = NULL; - // Prepare file path - memset(file_path, '\0', sizeof(file_path)); - sprintf(file_path, "/sys/devices/system/cpu/cpu%d/cpufreq/%s", atoi(core), file ); + setlocale(LC_ALL, ""); + bindtextdomain("paramano", LOCALEDIR); + textdomain("paramano"); - // Try to open file and write data to it - if ( (fd = fopen(file_path, "w")) != NULL ) + if (getuid() != 0) + fprintf(stderr, "Warning: running as UID %d, not 0\n", getuid()); + + while ((c = getopt(argc, argv, "c:f:g:")) != -1) { - fputs(data, fd); - fclose(fd); - return 1; + switch (c) + { + case 'c': + core = atoi(optarg); + break; + case 'f': + frequency = optarg; + break; + case 'g': + governor = optarg; + break; + default: + die_syntax(argv[0]); + break; + } } - // Fallthrough: File couldn't be opened for writing - fprintf(stderr, _("FAILED: Couldn't open %s for writing\n") , file_path); - return 0; -} + if (core < 0 || + (governor == NULL && frequency == NULL) || + (governor != NULL && frequency != NULL)) + die_syntax(argv[0]); + if (governor != NULL) + return set_gov(governor, core); -#define set_freq_max(freq,core) write_str_to_file("scaling_max_freq",freq,core) -#define set_freq_min(freq,core) write_str_to_file("scaling_min_freq",freq,core) -#define set_speed(freq,core) write_str_to_file("scaling_setspeed",freq,core) -#define set_gov(gov,core) write_str_to_file("scaling_governor",gov,core) + if (frequency != NULL) + return set_gov("userspace", core) | set_speed(frequency, core); -void get_argument_summary(int argc, char **argv, argument_summary *argsum) -{ - int arg; + return 1; +} - // Check for -{c,g,f} xyz - for ( arg = 1; arg < argc-1; arg+=2 ) - { - // Can't have empty argument - if ( strlen(argv[arg+1]) != 0 ) - { - if ( strcmp(argv[arg], "-c") == 0 ) - { - // Found -c with an arg - argsum->present |= ARG_CORE; - argsum->core = (char*)(argv[arg+1]); - continue; - } - - if ( strcmp(argv[arg], "-f") == 0 ) - { - // Found -f with an arg - argsum->present |= ARG_FREQ; - argsum->frequency = (char*)(argv[arg+1]); - continue; - } - - if ( strcmp(argv[arg], "-g") == 0 ) - { - // Found -g with an arg - argsum->present |= ARG_GOV; - argsum->governor = (char*)(argv[arg+1]); - //continue; - } - } - } +void die_syntax(const char *prefix) +{ + fprintf(stderr, _("%s {-f frequency|-g governor} -c core\n"), prefix); + exit(1); } -int main(int argc, char *argv[]) +char write_str_to_file(const char *file, const char *data, int core) { - setlocale(LC_ALL,""); - bindtextdomain("paramano",LOCALEDIR); - textdomain("paramano"); + FILE *fd = NULL; + char file_path[1024]; - argument_summary args; - memset(&args, 0, sizeof(args)); + /* Prepare file path */ + snprintf(file_path, sizeof(file_path), "/sys/devices/system/cpu/cpu%d/cpufreq/%s", core, file); - // If unusual number of args, give up now - if (argc == 5) + /* Try to open file and write data to it */ + if ( (fd = fopen(file_path, "w")) != NULL ) { - if (getuid() != 0) - fprintf(stderr,"Warning: running as UID %d, not 0\n",getuid() ); + fputs(data, fd); + fclose(fd); + return 1; + } - get_argument_summary(argc, argv, &args); + /* Fallthrough: File couldn't be opened for writing */ + fprintf(stderr, _("FAILED: Couldn't open %s for writing\n") , file_path); + return 0; +} - if ( args.present == ( ARG_CORE | ARG_GOV ) ) - return set_gov(args.governor , args.core); - if ( args.present == ( ARG_CORE | ARG_FREQ ) ) - return set_gov("userspace", args.core) | set_speed(args.frequency, args.core); - } - // Fall through to here if no valid argument combination - fprintf(stderr, _("%s {-f frequency|-g governor} -c core\n"), argv[0] ); - return 1; -} diff --git a/paramano_set_interface.h b/paramano_set_interface.h index 20b96bf..d533285 100644 --- a/paramano_set_interface.h +++ b/paramano_set_interface.h @@ -22,4 +22,4 @@ void si_gov(char* gov, int core); void si_freq(int freq, int core); -#endif +#endif /* ifndef PARAMANO_SET_INTERFACE_H */ @@ -102,7 +102,7 @@ static void tray_generate_menu() gint current_frequency = gf_current(0); - // Add available frequencies + /* Add available frequencies */ for(i = 0; i < gf_number(); i++) { gf_get_frequency_label(label, sizeof(label), gf_freqi(0, i)); @@ -119,11 +119,11 @@ static void tray_generate_menu() gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); } - // Add a seperator + /* Add a seperator */ GtkWidget* seperator = gtk_separator_menu_item_new(); gtk_menu_append(menu, seperator); - // Add available governors + /* Add available governors */ for(i = 0; i < gg_number(); i++) { if(g_strcmp0(gg_gov(0, i), "userspace") == 0) @@ -158,7 +158,7 @@ static gboolean show_tooltip(GtkStatusIcon* status_icon, gint x, gint y, gboolea static void update_tooltip_cache() { char msg[10240], label[1024]; - char current_governor[20]; // TO DO + char current_governor[20]; /* FIXME magic */ unsigned int i = 0; unsigned int offset = 0; @@ -198,14 +198,14 @@ static void update_icon() int max_frequency = gf_freqi(0, 0); int adjusted_percent, percent; - // If max_frequency is 0, we don't want to divide by it, - // so give up, call it a day, and have a simple icon + /* If max_frequency is 0, we don't want to divide by it, + * so give up, call it a day, and have a simple icon */ if (max_frequency == 0) { adjusted_percent = 0; } else { - // Percentages need to be {25,50,75,100}. Round to one of these numbers. - // TO DO: round/truncate instead of lots of ifs + /* Percentages need to be {25,50,75,100}. Round to one of these numbers. + * TO DO: round/truncate instead of lots of ifs */ percent = (gf_current(0) * 100)/max_frequency; if(percent == 100) { adjusted_percent = 100; @@ -264,7 +264,6 @@ static gboolean update() **********************************************************************/ void tray_set_defaults() { - // Set defaults unsigned int i = 0; if(DEFAULT_GOV) { @@ -26,4 +26,4 @@ void tray_hide(); bool tray_visible(); bool tray_embedded(); -#endif +#endif /* ifndef TRAY_H */ |