aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2010-11-09 14:45:27 (GMT)
committerJouni Malinen <j@w1.fi>2010-11-09 14:45:27 (GMT)
commit74b1c84a0b1218a33ce7089e11172e7f39273158 (patch)
tree36e8b760971d26a2a273b5a664f3e26d19387a68
parentf5798bf36af27fcf2fc07949906904ff6c50a57b (diff)
downloadhostap-74b1c84a0b1218a33ce7089e11172e7f39273158.zip
hostap-74b1c84a0b1218a33ce7089e11172e7f39273158.tar.gz
hostap-74b1c84a0b1218a33ce7089e11172e7f39273158.tar.bz2
wpa_supplicant: Test all compiled drivers before failing
wpa_supplicant_set_driver() is returning an error if the first driver in the driver list is not built in. It should continue through the driver list until it finds one that's built in.
-rw-r--r--wpa_supplicant/wpa_supplicant.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index ff1cfd3..0a603af 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1702,7 +1702,7 @@ static int wpa_supplicant_set_driver(struct wpa_supplicant *wpa_s,
{
int i;
size_t len;
- const char *pos;
+ const char *pos, *driver = name;
if (wpa_s == NULL)
return -1;
@@ -1720,20 +1720,26 @@ static int wpa_supplicant_set_driver(struct wpa_supplicant *wpa_s,
return 0;
}
- pos = os_strchr(name, ',');
- if (pos)
- len = pos - name;
- else
- len = os_strlen(name);
- for (i = 0; wpa_drivers[i]; i++) {
- if (os_strlen(wpa_drivers[i]->name) == len &&
- os_strncmp(name, wpa_drivers[i]->name, len) ==
- 0) {
- wpa_s->driver = wpa_drivers[i];
- wpa_s->global_drv_priv = wpa_s->global->drv_priv[i];
- return 0;
+ do {
+ pos = os_strchr(driver, ',');
+ if (pos)
+ len = pos - driver;
+ else
+ len = os_strlen(driver);
+
+ for (i = 0; wpa_drivers[i]; i++) {
+ if (os_strlen(wpa_drivers[i]->name) == len &&
+ os_strncmp(driver, wpa_drivers[i]->name, len) ==
+ 0) {
+ wpa_s->driver = wpa_drivers[i];
+ wpa_s->global_drv_priv =
+ wpa_s->global->drv_priv[i];
+ return 0;
+ }
}
- }
+
+ driver = pos + 1;
+ } while (pos);
wpa_printf(MSG_ERROR, "Unsupported driver '%s'.", name);
return -1;