this patch fixes a problem with the 'ifindex' function (in 
'components/wifi.c'). if the wireless interface was down when 'slstatus' 
started, it wouldn’t detect it even after bringing the interface up later.
I ran into this because I usually boot with all interfaces down and only enable 
them when needed. After updating to v1.1, I noticed the SSID never showed 
unless the interface was already up at launch.

the issue is that the code caches the interface name in 'ifr' (a static 'struct 
ifreq' in 'ifindex') and skips calling 'ioctl(ifsock, SIOCGIFINDEX, &ifr)' 
after the first time because of this check:
`
if (strcmp(ifr.ifr_name, interface) != 0) {
    strcpy(ifr.ifr_name, interface);
    if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
        warn("ioctl 'SIOCGIFINDEX':");
        return -1;
    }
}
`
since the interface name doesn’t change, it never retries 'ioctl' when the 
interface comes up later, the patch changes this to always call 'ioctl', this 
way, it detects the interface as soon as it’s available.

let me know if you want this included in the mainbranch or if I just add it to 
the patches page in case the current behavior is intentional.
---
 components/wifi.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/components/wifi.c b/components/wifi.c
index 23af201..8639957 100644
--- a/components/wifi.c
+++ b/components/wifi.c
@@ -108,12 +108,12 @@
                        warn("socket 'AF_UNIX':");
                        return -1;
                }
-               if (strcmp(ifr.ifr_name, interface) != 0) {
+               if (strcmp(ifr.ifr_name, interface) != 0) { 
                        strcpy(ifr.ifr_name, interface);
-                       if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
-                               warn("ioctl 'SIOCGIFINDEX':");
-                               return -1;
-                       }
+               }
+               if (ioctl(ifsock, SIOCGIFINDEX, &ifr) != 0) {
+                       warn("ioctl 'SIOCGIFINDEX':");
+                       return -1;
                }
                return ifr.ifr_ifindex;
        }
-- 
2.49.0


Reply via email to