[PATCH] wpa_supplicant: Test all compiled drivers before failing

Samuel Ortiz sameo at linux.intel.com
Fri Oct 15 10:51:51 EDT 2010


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.
---
 wpa_supplicant/wpa_supplicant.c |   34 ++++++++++++++++++++--------------
 1 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 61d1c87..1f682c8 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1696,7 +1696,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;
@@ -1714,20 +1714,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;
-- 
1.7.1

-- 
Intel Open Source Technology Centre
http://oss.intel.com/


More information about the HostAP mailing list