Xinqi Bao's Git
projects
/
slstatus.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
entropy: Improve types
[slstatus.git]
/
components
/
wifi.c
diff --git
a/components/wifi.c
b/components/wifi.c
index
414d533
..
9de543b
100644
(file)
--- a/
components/wifi.c
+++ b/
components/wifi.c
@@
-1,5
+1,4
@@
/* See LICENSE file for copyright and license details. */
/* See LICENSE file for copyright and license details. */
-#include <errno.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <string.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <string.h>
@@
-14,7
+13,7
@@
#include <linux/wireless.h>
const char *
#include <linux/wireless.h>
const char *
- wifi_perc(const char *iface)
+ wifi_perc(const char *i
nter
face)
{
int i, cur;
int total = 70; /* the max of /proc/net/wireless */
{
int i, cur;
int total = 70; /* the max of /proc/net/wireless */
@@
-23,11
+22,13
@@
char status[5];
FILE *fp;
char status[5];
FILE *fp;
- snprintf(path, sizeof(path), "%s%s%s", "/sys/class/net/", iface,
- "/operstate");
+ if (esnprintf(path, sizeof(path),
+ "/sys/class/net/%s/operstate",
+ interface) < 0) {
+ return NULL;
+ }
if (!(fp = fopen(path, "r"))) {
if (!(fp = fopen(path, "r"))) {
- fprintf(stderr, "fopen '%s': %s\n", path,
- strerror(errno));
+ warn("fopen '%s':", path);
return NULL;
}
p = fgets(status, 5, fp);
return NULL;
}
p = fgets(status, 5, fp);
@@
-37,8
+38,7
@@
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
}
if (!(fp = fopen("/proc/net/wireless", "r"))) {
- fprintf(stderr, "fopen '/proc/net/wireless': %s\n",
- strerror(errno));
+ warn("fopen '/proc/net/wireless':");
return NULL;
}
return NULL;
}
@@
-51,11
+51,11
@@
return NULL;
}
return NULL;
}
- if (!(datastart = strstr(buf, iface))) {
+ if (!(datastart = strstr(buf, i
nter
face))) {
return NULL;
}
return NULL;
}
- datastart = (datastart+(strlen(iface)+1));
+ datastart = (datastart+(strlen(i
nter
face)+1));
sscanf(datastart + 1, " %*d %d %*d %*d\t\t %*d\t "
"%*d\t\t%*d\t\t %*d\t %*d\t\t %*d", &cur);
sscanf(datastart + 1, " %*d %d %*d %*d\t\t %*d\t "
"%*d\t\t%*d\t\t %*d\t %*d\t\t %*d", &cur);
@@
-63,7
+63,7
@@
}
const char *
}
const char *
- wifi_essid(const char *iface)
+ wifi_essid(const char *i
nter
face)
{
static char id[IW_ESSID_MAX_SIZE+1];
int sockfd;
{
static char id[IW_ESSID_MAX_SIZE+1];
int sockfd;
@@
-71,16
+71,18
@@
memset(&wreq, 0, sizeof(struct iwreq));
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
memset(&wreq, 0, sizeof(struct iwreq));
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
- snprintf(wreq.ifr_name, sizeof(wreq.ifr_name), "%s", iface);
+ if (esnprintf(wreq.ifr_name, sizeof(wreq.ifr_name),
+ "%s", interface) < 0) {
+ return NULL;
+ }
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- fprintf(stderr, "socket 'AF_INET': %s\n",
- strerror(errno));
+ warn("socket 'AF_INET':");
return NULL;
}
wreq.u.essid.pointer = id;
if (ioctl(sockfd,SIOCGIWESSID, &wreq) < 0) {
return NULL;
}
wreq.u.essid.pointer = id;
if (ioctl(sockfd,SIOCGIWESSID, &wreq) < 0) {
-
fprintf(stderr, "ioctl 'SIOCGIWESSID': %s\n", strerror(errno)
);
+
warn("ioctl 'SIOCGIWESSID':"
);
close(sockfd);
return NULL;
}
close(sockfd);
return NULL;
}
@@
-103,30
+105,34
@@
#include <sys/types.h>
static int
#include <sys/types.h>
static int
- load_ieee80211_nodereq(const char *iface, struct ieee80211_nodereq *nr)
+ load_ieee80211_nodereq(const char *i
nter
face, struct ieee80211_nodereq *nr)
{
struct ieee80211_bssid bssid;
int sockfd;
{
struct ieee80211_bssid bssid;
int sockfd;
+ uint8_t zero_bssid[IEEE80211_ADDR_LEN];
memset(&bssid, 0, sizeof(bssid));
memset(nr, 0, sizeof(struct ieee80211_nodereq));
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
memset(&bssid, 0, sizeof(bssid));
memset(nr, 0, sizeof(struct ieee80211_nodereq));
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- fprintf(stderr, "socket 'AF_INET': %s\n",
- strerror(errno));
+ warn("socket 'AF_INET':");
return 0;
}
return 0;
}
- strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
+ strlcpy(bssid.i_name, i
nter
face, sizeof(bssid.i_name));
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
- fprintf(stderr, "ioctl 'SIOCG80211BSSID': %s\n",
- strerror(errno));
+ warn("ioctl 'SIOCG80211BSSID':");
+ close(sockfd);
+ return 0;
+ }
+ memset(&zero_bssid, 0, sizeof(zero_bssid));
+ if (memcmp(bssid.i_bssid, zero_bssid,
+ IEEE80211_ADDR_LEN) == 0) {
close(sockfd);
return 0;
}
close(sockfd);
return 0;
}
- strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
+ strlcpy(nr->nr_ifname, i
nter
face, sizeof(nr->nr_ifname));
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
- fprintf(stderr, "ioctl 'SIOCG80211NODE': %s\n",
- strerror(errno));
+ warn("ioctl 'SIOCG80211NODE':");
close(sockfd);
return 0;
}
close(sockfd);
return 0;
}
@@
-135,12
+141,12
@@
}
const char *
}
const char *
- wifi_perc(const char *iface)
+ wifi_perc(const char *i
nter
face)
{
struct ieee80211_nodereq nr;
int q;
{
struct ieee80211_nodereq nr;
int q;
- if (load_ieee80211_nodereq(iface, &nr)) {
+ if (load_ieee80211_nodereq(i
nter
face, &nr)) {
if (nr.nr_max_rssi) {
q = IEEE80211_NODEREQ_RSSI(&nr);
} else {
if (nr.nr_max_rssi) {
q = IEEE80211_NODEREQ_RSSI(&nr);
} else {
@@
-154,11
+160,11
@@
}
const char *
}
const char *
- wifi_essid(const char *iface)
+ wifi_essid(const char *i
nter
face)
{
struct ieee80211_nodereq nr;
{
struct ieee80211_nodereq nr;
- if (load_ieee80211_nodereq(iface, &nr)) {
+ if (load_ieee80211_nodereq(i
nter
face, &nr)) {
return bprintf("%s", nr.nr_nwid);
}
return bprintf("%s", nr.nr_nwid);
}