X-Git-Url: https://git.xinqibao.xyz/slstatus.git/blobdiff_plain/7246dc4381c6c95454672a5c1aff65a02d6d3747..3fe1db88922f9c06ee92ad6b6655ca0788aef93b:/components/wifi.c?ds=inline diff --git a/components/wifi.c b/components/wifi.c index 30b57ab..388a30d 100644 --- a/components/wifi.c +++ b/components/wifi.c @@ -1,5 +1,6 @@ /* See LICENSE file for copyright and license details. */ -#include +#if defined(__linux__) +#include #include #include #include @@ -14,7 +15,9 @@ const char * wifi_perc(const char *iface) { - int i, perc; + int i, cur; + float perc; + int total = 70; /* the max of /proc/net/wireless */ char *p, *datastart; char path[PATH_MAX]; char status[5]; @@ -23,7 +26,7 @@ wifi_perc(const char *iface) snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface, "/operstate"); fp = fopen(path, "r"); if (fp == NULL) { - warn("Failed to open file %s", path); + fprintf(stderr, "fopen '%s': %s\n", path, strerror(errno)); return NULL; } p = fgets(status, 5, fp); @@ -34,7 +37,7 @@ wifi_perc(const char *iface) fp = fopen("/proc/net/wireless", "r"); if (fp == NULL) { - warn("Failed to open file /proc/net/wireless"); + fprintf(stderr, "fopen '/proc/net/wireless': %s\n", strerror(errno)); return NULL; } @@ -50,9 +53,11 @@ wifi_perc(const char *iface) return NULL; datastart = (datastart+(strlen(iface)+1)); - sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &perc); + sscanf(datastart + 1, " %*d %d %*d %*d %*d %*d %*d %*d %*d %*d", &cur); - return bprintf("%d", perc); + perc = (float)cur / total * 100.0; + + return bprintf("%.0f", perc); } const char * @@ -67,12 +72,13 @@ wifi_essid(const char *iface) snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface); if (sockfd == -1) { - warn("Failed to get ESSID for interface %s", iface); + fprintf(stderr, "socket 'AF_INET': %s\n", strerror(errno)); return NULL; } wreq.u.essid.pointer = id; if (ioctl(sockfd,SIOCGIWESSID, &wreq) == -1) { - warn("Failed to get ESSID for interface %s", iface); + fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno)); + close(sockfd); return NULL; } @@ -83,3 +89,4 @@ wifi_essid(const char *iface) else return id; } +#endif