close file descriptors and fix return values
authorMichael Buch <michaelbuch12@gmail.com>
Wed, 13 Feb 2019 14:16:17 +0000 (14:16 +0000)
committerAaron Marcher <me@drkhsh.at>
Wed, 13 Feb 2019 14:23:04 +0000 (15:23 +0100)
components/wifi.c

index d99c46caca548c664ab99b03d4d353ec6d4950da..92c252e47f61e576ccd9dbb07aa09cb90a943603 100644 (file)
                int rssi_dbm;
                int sockfd;
                size_t len;
+               const char *fmt;
 
                if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
                        warn("socket 'AF_INET':");
-                       return 0;
+                       return NULL;
                }
 
                /* Retreive MAC address of interface */
                len = IEEE80211_ADDR_LEN;
+               fmt = NULL;
                if (load_ieee80211req(sockfd, interface, &bssid, IEEE80211_IOC_BSSID, &len))
                {
                        /* Retrieve info on station with above BSSID */
                        if (load_ieee80211req(sockfd, interface, &info, IEEE80211_IOC_STA_INFO, &len)) {
                                rssi_dbm = info.sta.info[0].isi_noise +
                                                 info.sta.info[0].isi_rssi / 2;
-                               return bprintf("%d", RSSI_TO_PERC(rssi_dbm));
+
+                               fmt = bprintf("%d", RSSI_TO_PERC(rssi_dbm));
                        }
                }
 
                close(sockfd);
-               return NULL;
+               return fmt;
        }
 
        const char *
                char ssid[IEEE80211_NWID_LEN + 1];
                size_t len;
                int sockfd;
+               const char *fmt;
 
                if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
                        warn("socket 'AF_INET':");
-                       return 0;
+                       return NULL;
                }
 
+               fmt = NULL;
                len = sizeof(ssid);
                memset(&ssid, 0, len);
                if (load_ieee80211req(sockfd, interface, &ssid, IEEE80211_IOC_SSID, &len )) {
                                len = sizeof(ssid);
 
                        ssid[len - 1] = '\0';
-                       return bprintf("%s", ssid);
+                       fmt = bprintf("%s", ssid);
                }
 
-               return NULL;
+               close(sockfd);
+               return fmt;
        }
 #endif