diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index fa0dc9d9b..67a164afd 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -899,6 +899,13 @@ static void wpa_supplicant_event_scan_results(struct wpa_supplicant *wpa_s, return; } + if (wpa_s->scan_res_handler) { + wpa_s->scan_res_handler(wpa_s, scan_res); + wpa_s->scan_res_handler = NULL; + wpa_scan_results_free(scan_res); + return; + } + /* * Don't post the results if this was the initial cached * and there were no results. diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index 2ac882685..6465cb192 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -33,6 +33,7 @@ struct wpa_supplicant; struct ibss_rsn; struct scan_info; struct wpa_bss; +struct wpa_scan_results; /* * Forward declarations of private structures used within the ctrl_iface @@ -343,6 +344,8 @@ struct wpa_supplicant { */ #define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1) + void (*scan_res_handler)(struct wpa_supplicant *wpa_s, + struct wpa_scan_results *scan_res); struct dl_list bss; /* struct wpa_bss::list */ struct dl_list bss_id; /* struct wpa_bss::list_id */ size_t num_bss;