Xinqi Bao's Git
projects
/
slstatus.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
Add flexible formatting to keyboard_indicators.
[slstatus.git]
/
components
/
wifi.c
diff --git
a/components/wifi.c
b/components/wifi.c
index
7dfa4e2
..
3751ae3
100644
(file)
--- a/
components/wifi.c
+++ b/
components/wifi.c
@@
-1,10
+1,9
@@
/* 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>
-#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/ioctl.h>
+#include <sys/socket.h>
#include <unistd.h>
#include "../util.h"
#include <unistd.h>
#include "../util.h"
@@
-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",
+ iface) < 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;
}
@@
-66,21
+66,23
@@
wifi_essid(const char *iface)
{
static char id[IW_ESSID_MAX_SIZE+1];
wifi_essid(const char *iface)
{
static char id[IW_ESSID_MAX_SIZE+1];
- int sockfd
= socket(AF_INET, SOCK_DGRAM, 0)
;
+ int sockfd;
struct iwreq wreq;
memset(&wreq, 0, sizeof(struct iwreq));
wreq.u.essid.length = IW_ESSID_MAX_SIZE+1;
struct iwreq wreq;
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", iface) < 0) {
+ return NULL;
+ }
- if (sockfd < 0) {
- fprintf(stderr, "socket 'AF_INET': %s\n",
- strerror(errno));
+ if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+ 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;
}
@@
-97,6
+99,7
@@
#include <net/if.h>
#include <net/if_media.h>
#include <net80211/ieee80211.h>
#include <net/if.h>
#include <net/if_media.h>
#include <net80211/ieee80211.h>
+ #include <sys/select.h> /* before <sys/ieee80211_ioctl.h> for NBBY */
#include <net80211/ieee80211_ioctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <net80211/ieee80211_ioctl.h>
#include <stdlib.h>
#include <sys/types.h>
@@
-106,26
+109,30
@@
{
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;
}
strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
if ((ioctl(sockfd, SIOCG80211BSSID, &bssid)) < 0) {
return 0;
}
strlcpy(bssid.i_name, iface, sizeof(bssid.i_name));
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;
}
strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
close(sockfd);
return 0;
}
strlcpy(nr->nr_ifname, iface, sizeof(nr->nr_ifname));
- mem
move
(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
+ mem
cpy
(&nr->nr_macaddr, bssid.i_bssid, sizeof(nr->nr_macaddr));
if ((ioctl(sockfd, SIOCG80211NODE, nr)) < 0 && nr->nr_rssi) {
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;
}