[PATCH] libertas: remove structure WLAN_802_11_SSID and libertas_escape_essid

Replace WLAN_802_11_SSID with direct 'ssid' and 'ssid_len' members
like ieee80211.  In the process, remove private libertas_escape_essid
and depend on the ieee80211 implementation of escape_essid instead.

Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
diff --git a/drivers/net/wireless/libertas/scan.c b/drivers/net/wireless/libertas/scan.c
index 9799d87..5790e8b 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -232,6 +232,7 @@
 {
 	wlan_adapter *adapter = priv->adapter;
 	struct bss_descriptor * iter_bss;
+	int i = 0;
 
 	if (adapter->connect_status == libertas_connected)
 		return;
@@ -240,7 +241,7 @@
 	list_for_each_entry (iter_bss, &adapter->network_list, list) {
 		lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
 		       i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
-		       iter_bss->ssid.ssid);
+		       escape_essid(iter_bss->ssid, iter_bss->ssid_len));
 	}
 	mutex_unlock(&adapter->lock);
 }
@@ -747,8 +748,8 @@
 
 		/* Check for an SSID match */
 		if (   clear_ssid_flag
-		    && (bss->ssid.ssidlength == scan_cfg->ssid_len)
-		    && !memcmp(bss->ssid.ssid, scan_cfg->ssid, bss->ssid.ssidlength))
+		    && (bss->ssid_len == scan_cfg->ssid_len)
+		    && !memcmp(bss->ssid, scan_cfg->ssid, bss->ssid_len))
 			clear = 1;
 
 		/* Check for a BSSID match */
@@ -1048,9 +1049,11 @@
 
 		switch (elemID) {
 		case SSID:
-			bss->ssid.ssidlength = elemlen;
-			memcpy(bss->ssid.ssid, (pcurrentptr + 2), elemlen);
-			lbs_deb_scan("ssid '%s'\n", bss->ssid.ssid);
+			bss->ssid_len = elemlen;
+			memcpy(bss->ssid, (pcurrentptr + 2), elemlen);
+			lbs_deb_scan("ssid '%s', ssid length %u\n",
+			             escape_essid(bss->ssid, bss->ssid_len),
+			             bss->ssid_len);
 			break;
 
 		case SUPPORTED_RATES:
@@ -1194,15 +1197,12 @@
  *
  *  @return         0--ssid is same, otherwise is different
  */
-int libertas_SSID_cmp(struct WLAN_802_11_SSID *ssid1, struct WLAN_802_11_SSID *ssid2)
+int libertas_SSID_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len)
 {
-	if (!ssid1 || !ssid2)
+	if (ssid1_len != ssid2_len)
 		return -1;
 
-	if (ssid1->ssidlength != ssid2->ssidlength)
-		return -1;
-
-	return memcmp(ssid1->ssid, ssid2->ssid, ssid1->ssidlength);
+	return memcmp(ssid1, ssid2, ssid1_len);
 }
 
 /**
@@ -1262,7 +1262,7 @@
  *  @return         index in BSSID list
  */
 struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter,
-		   struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode,
+		   u8 *ssid, u8 ssid_len, u8 * bssid, u8 mode,
 		   int channel)
 {
 	u8 bestrssi = 0;
@@ -1277,7 +1277,8 @@
 		    || (iter_bss->last_scanned < tmp_oldest->last_scanned))
 			tmp_oldest = iter_bss;
 
-		if (libertas_SSID_cmp(&iter_bss->ssid, ssid) != 0)
+		if (libertas_SSID_cmp(iter_bss->ssid, iter_bss->ssid_len,
+		                      ssid, ssid_len) != 0)
 			continue; /* ssid doesn't match */
 		if (bssid && compare_ether_addr(iter_bss->bssid, bssid) != 0)
 			continue; /* bssid doesn't match */
@@ -1369,8 +1370,7 @@
  *  @return             0--success, otherwise--fail
  */
 int libertas_find_best_network_SSID(wlan_private * priv,
-                                    struct WLAN_802_11_SSID *ssid,
-                                    u8 preferred_mode, u8 *out_mode)
+		u8 *out_ssid, u8 *out_ssid_len, u8 preferred_mode, u8 *out_mode)
 {
 	wlan_adapter *adapter = priv->adapter;
 	int ret = -1;
@@ -1378,8 +1378,6 @@
 
 	lbs_deb_enter(LBS_DEB_ASSOC);
 
-	memset(ssid, 0, sizeof(struct WLAN_802_11_SSID));
-
 	wlan_scan_networks(priv, NULL, 1);
 	if (adapter->surpriseremoved)
 		return -1;
@@ -1387,8 +1385,9 @@
 	wait_event_interruptible(adapter->cmd_pending, !adapter->nr_cmd_pending);
 
 	found = libertas_find_best_SSID_in_list(adapter, preferred_mode);
-	if (found && (found->ssid.ssidlength > 0)) {
-		memcpy(ssid, &found->ssid, sizeof(struct WLAN_802_11_SSID));
+	if (found && (found->ssid_len > 0)) {
+		memcpy(out_ssid, &found->ssid, IW_ESSID_MAX_SIZE);
+		*out_ssid_len = found->ssid_len;
 		*out_mode = found->mode;
 		ret = 0;
 	}
@@ -1434,8 +1433,7 @@
  *  @return                0-success, otherwise fail
  */
 int libertas_send_specific_SSID_scan(wlan_private * priv,
-			 struct WLAN_802_11_SSID *prequestedssid,
-			 u8 clear_ssid)
+			u8 *ssid, u8 ssid_len, u8 clear_ssid)
 {
 	wlan_adapter *adapter = priv->adapter;
 	struct wlan_ioctl_user_scan_cfg scancfg;
@@ -1443,12 +1441,12 @@
 
 	lbs_deb_enter(LBS_DEB_ASSOC);
 
-	if (prequestedssid == NULL)
+	if (!ssid_len)
 		goto out;
 
 	memset(&scancfg, 0x00, sizeof(scancfg));
-	memcpy(scancfg.ssid, prequestedssid->ssid, prequestedssid->ssidlength);
-	scancfg.ssid_len = prequestedssid->ssidlength;
+	memcpy(scancfg.ssid, ssid, ssid_len);
+	scancfg.ssid_len = ssid_len;
 	scancfg.clear_ssid = clear_ssid;
 
 	wlan_scan_networks(priv, &scancfg, 1);
@@ -1523,8 +1521,8 @@
 	/* SSID */
 	iwe.cmd = SIOCGIWESSID;
 	iwe.u.data.flags = 1;
-	iwe.u.data.length = min(bss->ssid.ssidlength, (u32) IW_ESSID_MAX_SIZE);
-	start = iwe_stream_add_point(start, stop, &iwe, bss->ssid.ssid);
+	iwe.u.data.length = min((u32) bss->ssid_len, (u32) IW_ESSID_MAX_SIZE);
+	start = iwe_stream_add_point(start, stop, &iwe, bss->ssid);
 
 	/* Mode */
 	iwe.cmd = SIOCGIWMODE;
@@ -1563,7 +1561,9 @@
 	 */
 	if ((adapter->mode == IW_MODE_ADHOC)
 	    && adapter->adhoccreate
-	    && !libertas_SSID_cmp(&adapter->curbssparams.ssid, &bss->ssid)) {
+	    && !libertas_SSID_cmp(adapter->curbssparams.ssid,
+	                          adapter->curbssparams.ssid_len,
+	                          bss->ssid, bss->ssid_len)) {
 		int snr, nf;
 		snr = adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
 		nf = adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
@@ -1579,7 +1579,7 @@
 		iwe.u.data.flags = IW_ENCODE_DISABLED;
 	}
 	iwe.u.data.length = 0;
-	start = iwe_stream_add_point(start, stop, &iwe, bss->ssid.ssid);
+	start = iwe_stream_add_point(start, stop, &iwe, bss->ssid);
 
 	current_val = start + IW_EV_LCP_LEN;
 
@@ -1598,7 +1598,9 @@
 					 stop, &iwe, IW_EV_PARAM_LEN);
 	}
 	if ((bss->mode == IW_MODE_ADHOC)
-	    && !libertas_SSID_cmp(&adapter->curbssparams.ssid, &bss->ssid)
+	    && !libertas_SSID_cmp(adapter->curbssparams.ssid,
+	                          adapter->curbssparams.ssid_len,
+	                          bss->ssid, bss->ssid_len)
 	    && adapter->adhoccreate) {
 		iwe.u.bitrate.value = 22 * 500000;
 		current_val = iwe_stream_add_value(start, current_val,
@@ -1753,10 +1755,10 @@
 	/* A network is only a duplicate if the channel, BSSID, and ESSID
 	 * all match.  We treat all <hidden> with the same BSSID and channel
 	 * as one network */
-	return ((src->ssid.ssidlength == dst->ssid.ssidlength) &&
+	return ((src->ssid_len == dst->ssid_len) &&
 		(src->channel == dst->channel) &&
 		!compare_ether_addr(src->bssid, dst->bssid) &&
-		!memcmp(src->ssid.ssid, dst->ssid.ssid, src->ssid.ssidlength));
+		!memcmp(src->ssid, dst->ssid, src->ssid_len));
 }
 
 /**