return wis;
}
+static int
+dhcpcd_wi_scan_compare(DHCPCD_WI_SCAN *a, DHCPCD_WI_SCAN *b)
+{
+ int cmp;
+
+ cmp = strcasecmp(a->ssid, b->ssid);
+ if (cmp == 0)
+ /* Return strongest first */
+ cmp = b->strength.value - a->strength.value;
+ return cmp;
+}
+
/*
* This function is copyright 2001 Simon Tatham.
*
* SOFTWARE.
*/
static DHCPCD_WI_SCAN *
-dhcpcd_wi_scan_sort(DHCPCD_WI_SCAN *list)
+dhcpcd_wi_scans_sort(DHCPCD_WI_SCAN *list)
{
DHCPCD_WI_SCAN *p, *q, *e, *tail;
size_t insize, nmerges, psize, qsize, i;
} else if (qsize == 0 || !q) {
/* q is empty; e must come from p. */
e = p; p = p->next; psize--;
- } else if (strcasecmp(p->ssid,q->ssid) <= 0) {
+ } else if (dhcpcd_wi_scan_compare(p, q) <= 0) {
/* First element of p is lower
* (or same); e must come from p. */
e = p; p = p->next; psize--;
return NULL;
wis = dhcpcd_wpa_scans_read(wpa);
- /* Sort the resultant list alphabetically */
- wis = dhcpcd_wi_scan_sort(wis);
+ /* Sort the resultant list alphabetically and then by strength */
+ wis = dhcpcd_wi_scans_sort(wis);
for (w = wis; w; w = w->next) {
nh = 1;