diff --git a/components/esp_netif/esp_netif_objects.c b/components/esp_netif/esp_netif_objects.c index 30c645ef56..36edaa6ddf 100644 --- a/components/esp_netif/esp_netif_objects.c +++ b/components/esp_netif/esp_netif_objects.c @@ -151,39 +151,39 @@ esp_netif_t* esp_netif_next_unsafe(esp_netif_t* netif) bool esp_netif_is_netif_listed(esp_netif_t *esp_netif) { + struct slist_netifs_s *item; esp_err_t ret; if ((ret = esp_netif_list_lock()) != ESP_OK) { ESP_LOGE(TAG, "Failed to lock esp-netif list with %d", ret); - return NULL; + return false; } - // looking for the netif in the list of registered interfaces - esp_netif_t *it = esp_netif_next_unsafe(NULL); - do { - if (it && it == esp_netif) { + SLIST_FOREACH(item, &s_head, next) { + if (item->netif == esp_netif) { esp_netif_list_unlock(); return true; } - } while (NULL != (it = esp_netif_next_unsafe(it))); + } esp_netif_list_unlock(); return false; } esp_netif_t *esp_netif_get_handle_from_ifkey(const char *if_key) { + struct slist_netifs_s *item; esp_err_t ret; if ((ret = esp_netif_list_lock()) != ESP_OK) { ESP_LOGE(TAG, "Failed to lock esp-netif list with %d", ret); return NULL; } - esp_netif_t *esp_netif = esp_netif_next_unsafe(NULL); - do { - if (esp_netif && strcmp(if_key, esp_netif_get_ifkey(esp_netif))==0) { + SLIST_FOREACH(item, &s_head, next) { + esp_netif_t *esp_netif = item->netif; + if (strcmp(if_key, esp_netif_get_ifkey(esp_netif)) == 0) { esp_netif_list_unlock(); return esp_netif; } - } while (NULL != (esp_netif = esp_netif_next_unsafe(esp_netif))); + } esp_netif_list_unlock(); return NULL; } diff --git a/components/esp_netif/test/test_esp_netif.c b/components/esp_netif/test/test_esp_netif.c index 423c8941dc..1c2aa80a9f 100644 --- a/components/esp_netif/test/test_esp_netif.c +++ b/components/esp_netif/test/test_esp_netif.c @@ -38,6 +38,8 @@ TEST_CASE("esp_netif: get from if_key", "[esp_netif][leaks=0]") } +// This is a private esp-netif API, but include here to test it +bool esp_netif_is_netif_listed(esp_netif_t *esp_netif); TEST_CASE("esp_netif: create and delete multiple netifs", "[esp_netif][leaks=0]") { @@ -54,12 +56,19 @@ TEST_CASE("esp_netif: create and delete multiple netifs", "[esp_netif][leaks=0]" TEST_ASSERT_NOT_NULL(netifs[i]); } - // there's no AP within created stations - TEST_ASSERT_EQUAL(NULL, esp_netif_get_handle_from_ifkey("WIFI_AP_DEF")); + // there's no AP within created netifs + TEST_ASSERT_NULL(esp_netif_get_handle_from_ifkey("WIFI_AP_DEF")); - // destroy + // check that the created netifs are correctly found by their interface keys and globally listed + for (int i=0; i