diff options
| -rw-r--r-- | wmiistatus.c | 42 | 
1 files changed, 16 insertions, 26 deletions
| diff --git a/wmiistatus.c b/wmiistatus.c index 696f766..2f87d92 100644 --- a/wmiistatus.c +++ b/wmiistatus.c @@ -100,7 +100,7 @@ static void cleanup_rbar_dir() {  /*   * Creates the specified file in wmii's /rbar directory with   * correct modes and initializes colors if colormode is enabled - * ' + *   */  static void create_file(const char *name) {  	char pathbuf[strlen(wmii_path)+256+1]; @@ -200,7 +200,7 @@ void die(const char *fmt, ...) {  }  /* - * Skip the given character for maximum 'amount' times, returns + * Skip the given character for exactly 'amount' times, returns   * a pointer to the first non-'character' character in 'input'.   *   */ @@ -298,34 +298,24 @@ static char *get_wireless_info() {  	(void)read(fd, buf, sizeof(buf));  	(void)close(fd); -	interfaces = skip_character(buf, '\n', 2) + 1; -	while (interfaces < buf+strlen(buf)) { +	interfaces = skip_character(buf, '\n', 1) + 1; +	while ((interfaces = skip_character(interfaces, '\n', 1)+1) < buf+strlen(buf)) {  		while (isspace((int)*interfaces))  			interfaces++; -		if (strncmp(interfaces, wlan_interface, strlen(wlan_interface)) == 0) { -			int quality; -			/* Skip status field (0000) */ -			interfaces += strlen(wlan_interface) + 2; -			interfaces = skip_character(interfaces, ' ', 1); -			while (isspace((int)*interfaces)) -				interfaces++; -			quality = atoi(interfaces); -			/* For some reason, I get 255 sometimes */ -			if ((quality == 255) || (quality == 0)) { +		if (!BEGINS_WITH(interfaces, wlan_interface)) +			continue; +		int quality; +		if (sscanf(interfaces, "%*[^:]: 0000 %d", &quality) != 1) +			continue; +		/* for some reason, I get 255 sometimes */ +		if ((quality == 255) || (quality == 0)) {  			if (use_colors) -				(void)snprintf(part, sizeof(part), "%s%s", concat("#FF0000 ", wmii_normcolors), " W: down"); +				(void)snprintf(part, sizeof(part), "%s%s", +					concat("#FF0000 ", wmii_normcolors), " W: down");  			else (void)snprintf(part, sizeof(part), "W: down"); - -			} else { -				const char *ip_address; -				(void)snprintf(part, sizeof(part), "W: (%03d%%) ", quality); -				ip_address = get_ip_address(wlan_interface); -				strcpy(part+strlen(part), ip_address); -			} - -			return part; -		} -		interfaces = skip_character(interfaces, '\n', 1) + 1; +		} else (void)snprintf(part, sizeof(part), "W: (%03d%%) %s", +				quality, get_ip_address(wlan_interface)); +		return part;  	}  	return part; | 
