Xinqi Bao's Git
projects
/
slstatus.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
entropy: Use POSIX types for format specifiers
[slstatus.git]
/
components
/
wifi.c
diff --git
a/components/wifi.c
b/components/wifi.c
index
591f6ad
..
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,8
+22,11
@@
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"))) {
warn("fopen '%s':", path);
return NULL;
if (!(fp = fopen(path, "r"))) {
warn("fopen '%s':", path);
return NULL;
@@
-49,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);
@@
-61,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;
@@
-69,7
+71,10
@@
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) {
warn("socket 'AF_INET':");
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
warn("socket 'AF_INET':");
@@
-100,10
+105,11
@@
#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));
memset(&bssid, 0, sizeof(bssid));
memset(nr, 0, sizeof(struct ieee80211_nodereq));
@@
-111,13
+117,19
@@
warn("socket 'AF_INET':");
return 0;
}
warn("socket 'AF_INET':");
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) {
warn("ioctl 'SIOCG80211BSSID':");
close(sockfd);
return 0;
}
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
warn("ioctl 'SIOCG80211BSSID':");
close(sockfd);
return 0;
}
- strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
+ memset(&zero_bssid, 0, sizeof(zero_bssid));
+ if (memcmp(bssid.i_bssid, zero_bssid,
+ IEEE80211_ADDR_LEN) == 0) {
+ close(sockfd);
+ return 0;
+ }
+ strlcpy(nr->nr_ifname, interface, sizeof(nr->nr_ifname));
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
warn("ioctl 'SIOCG80211NODE':");
memcpy(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
warn("ioctl 'SIOCG80211NODE':");
@@
-129,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 {
@@
-148,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);
}