Share same freeing and error checking code in get_scan_results
Convert wpa_supplicant_get_scan_results_old() to use the same return style with the other get_scan_results options and clean up the code by sharing the same scan result freeing and error checking code for all the options.
This commit is contained in:
parent
86b89452f6
commit
3e53b314f5
1 changed files with 18 additions and 29 deletions
|
@ -1545,7 +1545,8 @@ int wpa_supplicant_set_debug_params(struct wpa_global *global, int debug_level,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int wpa_supplicant_get_scan_results_old(struct wpa_supplicant *wpa_s)
|
static struct wpa_scan_results * wpa_supplicant_get_scan_results_old(
|
||||||
|
struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
#define SCAN_AP_LIMIT 128
|
#define SCAN_AP_LIMIT 128
|
||||||
struct wpa_scan_result *results;
|
struct wpa_scan_result *results;
|
||||||
|
@ -1556,7 +1557,7 @@ static int wpa_supplicant_get_scan_results_old(struct wpa_supplicant *wpa_s)
|
||||||
if (results == NULL) {
|
if (results == NULL) {
|
||||||
wpa_printf(MSG_WARNING, "Failed to allocate memory for scan "
|
wpa_printf(MSG_WARNING, "Failed to allocate memory for scan "
|
||||||
"results");
|
"results");
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
num = wpa_drv_get_scan_results(wpa_s, results, SCAN_AP_LIMIT);
|
num = wpa_drv_get_scan_results(wpa_s, results, SCAN_AP_LIMIT);
|
||||||
|
@ -1564,7 +1565,7 @@ static int wpa_supplicant_get_scan_results_old(struct wpa_supplicant *wpa_s)
|
||||||
if (num < 0) {
|
if (num < 0) {
|
||||||
wpa_printf(MSG_DEBUG, "Failed to get scan results");
|
wpa_printf(MSG_DEBUG, "Failed to get scan results");
|
||||||
os_free(results);
|
os_free(results);
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (num > SCAN_AP_LIMIT) {
|
if (num > SCAN_AP_LIMIT) {
|
||||||
wpa_printf(MSG_INFO, "Not enough room for all APs (%d < %d)",
|
wpa_printf(MSG_INFO, "Not enough room for all APs (%d < %d)",
|
||||||
|
@ -1572,20 +1573,17 @@ static int wpa_supplicant_get_scan_results_old(struct wpa_supplicant *wpa_s)
|
||||||
num = SCAN_AP_LIMIT;
|
num = SCAN_AP_LIMIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
wpa_scan_results_free(wpa_s->scan_res);
|
|
||||||
wpa_s->scan_res = NULL;
|
|
||||||
|
|
||||||
/* Convert old scan result data structure to the new one */
|
/* Convert old scan result data structure to the new one */
|
||||||
res = os_zalloc(sizeof(*res));
|
res = os_zalloc(sizeof(*res));
|
||||||
if (res == NULL) {
|
if (res == NULL) {
|
||||||
os_free(results);
|
os_free(results);
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
res->res = os_zalloc(num * sizeof(struct wpa_scan_res *));
|
res->res = os_zalloc(num * sizeof(struct wpa_scan_res *));
|
||||||
if (res->res == NULL) {
|
if (res->res == NULL) {
|
||||||
os_free(results);
|
os_free(results);
|
||||||
os_free(res);
|
os_free(res);
|
||||||
return -1;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
|
@ -1647,9 +1645,8 @@ static int wpa_supplicant_get_scan_results_old(struct wpa_supplicant *wpa_s)
|
||||||
}
|
}
|
||||||
|
|
||||||
os_free(results);
|
os_free(results);
|
||||||
wpa_s->scan_res = res;
|
|
||||||
|
|
||||||
return 0;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1665,28 +1662,20 @@ int wpa_supplicant_get_scan_results(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME) {
|
wpa_scan_results_free(wpa_s->scan_res);
|
||||||
wpa_scan_results_free(wpa_s->scan_res);
|
if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_USER_SPACE_MLME)
|
||||||
wpa_s->scan_res = ieee80211_sta_get_scan_results(wpa_s);
|
wpa_s->scan_res = ieee80211_sta_get_scan_results(wpa_s);
|
||||||
if (wpa_s->scan_res == NULL) {
|
else if (wpa_s->driver->get_scan_results2 == NULL)
|
||||||
wpa_printf(MSG_DEBUG, "Failed to get scan results");
|
wpa_s->scan_res = wpa_supplicant_get_scan_results_old(wpa_s);
|
||||||
ret = -1;
|
else
|
||||||
} else
|
|
||||||
ret = 0;
|
|
||||||
} else if (wpa_s->driver->get_scan_results2 == NULL)
|
|
||||||
ret = wpa_supplicant_get_scan_results_old(wpa_s);
|
|
||||||
else {
|
|
||||||
wpa_scan_results_free(wpa_s->scan_res);
|
|
||||||
wpa_s->scan_res = wpa_drv_get_scan_results2(wpa_s);
|
wpa_s->scan_res = wpa_drv_get_scan_results2(wpa_s);
|
||||||
if (wpa_s->scan_res == NULL) {
|
if (wpa_s->scan_res == NULL) {
|
||||||
wpa_printf(MSG_DEBUG, "Failed to get scan results");
|
wpa_printf(MSG_DEBUG, "Failed to get scan results");
|
||||||
ret = -1;
|
ret = -1;
|
||||||
} else
|
} else {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
|
||||||
|
|
||||||
if (wpa_s->scan_res)
|
|
||||||
wpa_scan_sort_results(wpa_s->scan_res);
|
wpa_scan_sort_results(wpa_s->scan_res);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue