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 */  | 
