diff --git a/src/device.c b/src/device.c index 80849509..791d5bf0 100644 --- a/src/device.c +++ b/src/device.c @@ -105,7 +105,7 @@ void __iwd_device_foreach(iwd_device_foreach_func func, void *user_data) } static const char *iwd_network_get_path(struct device *device, - const uint8_t *ssid, size_t ssid_len, + const char *ssid, enum security security) { static char path[256]; @@ -113,7 +113,7 @@ static const char *iwd_network_get_path(struct device *device, pos = snprintf(path, sizeof(path), "%s/", device_get_path(device)); - for (i = 0; i < ssid_len && pos < sizeof(path); i++) + for (i = 0; ssid[i] && pos < sizeof(path); i++) pos += snprintf(path + pos, sizeof(path) - pos, "%02x", ssid[i]); @@ -222,6 +222,7 @@ static void process_bss(struct device *device, struct scan_bss *bss, const char *path; double rankmod; struct autoconnect_entry *entry; + char ssid[33]; l_debug("Found BSS '%s' with SSID: %s, freq: %u, rank: %u, " "strength: %i", @@ -234,6 +235,9 @@ static void process_bss(struct device *device, struct scan_bss *bss, return; } + memcpy(ssid, bss->ssid, bss->ssid_len); + ssid[bss->ssid_len] = '\0'; + /* * If both an RSN and a WPA elements are present currently * RSN takes priority and the WPA IE is ignored. @@ -270,13 +274,11 @@ static void process_bss(struct device *device, struct scan_bss *bss, } else security = scan_get_security(bss->capability, NULL); - path = iwd_network_get_path(device, bss->ssid, bss->ssid_len, - security); + path = iwd_network_get_path(device, ssid, security); network = l_hashmap_lookup(device->networks, path); if (!network) { - network = network_create(device, bss->ssid, bss->ssid_len, - security); + network = network_create(device, ssid, security); if (!network_register(network, path)) { network_remove(network, -EINVAL); diff --git a/src/network.c b/src/network.c index 29b99e76..8444d518 100644 --- a/src/network.c +++ b/src/network.c @@ -278,15 +278,14 @@ static void network_info_put(struct network_info *network) network_info_free(network); } -struct network *network_create(struct device *device, - uint8_t *ssid, uint8_t ssid_len, +struct network *network_create(struct device *device, const char *ssid, enum security security) { struct network *network; network = l_new(struct network, 1); network->device = device; - network->info = network_info_get((char *) ssid, security); + network->info = network_info_get(ssid, security); network->bss_list = l_queue_new(); diff --git a/src/network.h b/src/network.h index 3453d77a..38233a30 100644 --- a/src/network.h +++ b/src/network.h @@ -32,8 +32,7 @@ bool network_connected(struct network *network); void network_disconnected(struct network *network); bool network_rankmod(const struct network *network, double *rankmod); -struct network *network_create(struct device *device, - uint8_t *ssid, uint8_t ssid_len, +struct network *network_create(struct device *device, const char *ssid, enum security security); const char *network_get_ssid(const struct network *network);