diff options
| -rw-r--r-- | bat_tray.c | 20 | ||||
| -rw-r--r-- | common.c | 43 | ||||
| -rw-r--r-- | common.h | 11 | ||||
| -rw-r--r-- | getgov.c | 4 | 
4 files changed, 34 insertions, 44 deletions
@@ -261,19 +261,30 @@ void bat_tray_hide()   **********************************************************************/  int get_battery_state()  { -	if (file_has_line(CHARGE_STATE_PATH, "Discharging")) +	char state[1024]; +	FILE* fd; + +	if (!(fd = fopen(CHARGE_STATE_PATH, "r")) || +		!fgets(state, sizeof(state), fd)) +		return STATE_UNKNOWN; + +	fclose(fd); + +	chomp(state); + +	if (strcmp(state, "Discharging") == 0)  	{  		debug("Battery discharging\n");  		return STATE_DISCHARGING;  	} -	if (file_has_line(CHARGE_STATE_PATH, "Full")) +	if (strcmp(state, "Full") == 0)  	{  		debug("Battery full\n");  		return STATE_CHARGED;  	} -	if (file_has_line(CHARGE_STATE_PATH, "Charging")) +	if (strcmp(state, "Charging") == 0)  	{  		debug("Battery charging\n");  		return STATE_CHARGING; @@ -295,7 +306,7 @@ int get_bat_num()  	for(i = 0; i < 10; i++)  	{  		asprintf(&file, "/sys/class/power_supply/BAT%d/present", i); -		if( (fd = check_for_file(file)) ) +		if( (fd = fopen(file, "r")) )  		{  			debug("Found battery %d\n",i);  			if (fgetc(fd) == '1') @@ -305,6 +316,7 @@ int get_bat_num()  				free(file);  				return i;  			} +			fclose(fd);  		}  	}  	debug("Fallthrough: couldn't find battery\n"); @@ -21,6 +21,9 @@  #include <stdarg.h> +/*********************************************************************** + * Return integer value from first line in file (formatted filename) + **********************************************************************/  int get_int_value_from_filef(const char* format, ...)  {  	int value = 0; @@ -32,6 +35,10 @@ int get_int_value_from_filef(const char* format, ...)  	return value;  } + +/*********************************************************************** + * va_list wrapper function for get_int_value_from_filef() + **********************************************************************/  int vget_int_value_from_filef(const char* format, va_list args)  { @@ -62,44 +69,16 @@ int get_int_value_from_file(const char* filename)  } -/*********************************************************************** - * Return true/false if a file has specified line of text - **********************************************************************/ -bool file_has_line(const char *filename, const char *line) -{ -	FILE* fd; -	char buffer[4096]; - -	if (!(fd = fopen(filename, "r"))) -		return false; - -	while (fgets(buffer, sizeof(buffer), fd) != NULL) -	{ -		if(strstr(buffer, line) != NULL) -		{ -			fclose(fd); -			return true; -		} -	} -	fclose(fd); -	return false; -} -  /*********************************************************************** - * Calls fopen on the specified file, giving debug error message on - * failure. Returns the file descriptor in all cases. + * Truncates a string at the first '\r' or '\n'   **********************************************************************/ -FILE* check_for_file(char* path) +void chomp(char *string)  { -	FILE* fd; -	if(!(fd = fopen(path, "r"))) -	{ -		debug("Couldn't open '%s'\n",path); -	} -	return fd; +	string[strcspn(string, "\r\n")] = '\0';  } +  /***********************************************************************   * Fetches first number (ie the 35 of "35 123") from a   * string @@ -21,12 +21,11 @@  #include <stdarg.h> -int get_int_value_from_filef(const char* format, ...); -int vget_int_value_from_filef(const char* format, va_list args); -int   get_int_value_from_file(const char* filename); -int   get_int(const char* string); -bool  file_has_line(const char *filename, const char *line); -FILE *check_for_file(char* path); +int  get_int_value_from_filef(const char* format, ...); +int  vget_int_value_from_filef(const char* format, va_list args); +int  get_int_value_from_file(const char* filename); +void chomp(char *string); +int  get_int(const char* string);  // <ew> Stringification of line number  #define STRING2(x) #x @@ -60,7 +60,7 @@ bool gg_current(int core, char* out, int size)  	char *path;  	asprintf(&path, "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor", core); -	if (!(fd = check_for_file(path))) +	if (!(fd = fopen(path, "r")))  	{  		free(path);  		return false; @@ -89,7 +89,7 @@ bool gg_available(int core, char* out, int size)  	FILE *fd;  	asprintf(&path, "/sys/devices/system/cpu/cpu%d/cpufreq/scaling_available_governors", core); -	if (!(fd = check_for_file(path))) +	if (!(fd = fopen(path, "r")))  	{  		free(path);  		return false;  | 
