From 3a7e03aaff478b8e6b14d8a90fae8f78452d20e2 Mon Sep 17 00:00:00 2001 From: Joel Cunningham Date: Thu, 9 Feb 2017 22:32:29 -0600 Subject: [PATCH] Add errno support to if_indextoname() This commit adds support in if_indextoname() to return ENXIO when no interface is found. This conforms to the Open Group/RFC 3493 specification In order to leverage errno set support, the set_errno macro from sockets.c was moved to sockets_priv.h --- src/api/if_api.c | 16 ++++++++-------- src/api/sockets.c | 8 -------- src/include/lwip/priv/sockets_priv.h | 8 ++++++++ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/api/if_api.c b/src/api/if_api.c index 6283b4a2..e1730ae9 100644 --- a/src/api/if_api.c +++ b/src/api/if_api.c @@ -43,8 +43,10 @@ #if LWIP_SOCKET +#include "lwip/errno.h" #include "lwip/if_api.h" #include "lwip/netifapi.h" +#include "lwip/priv/sockets_priv.h" /** * @ingroup if_api @@ -59,19 +61,17 @@ char * lwip_if_indextoname(unsigned int ifindex, char *ifname) { #if LWIP_NETIF_API - err_t err; - if (ifindex > 0xff) { - return NULL; - } - - err = netifapi_netif_index_to_name((u8_t)ifindex, ifname); - if (!err && ifname[0] != '\0') { - return ifname; + if (ifindex <= 0xff) { + err_t err = netifapi_netif_index_to_name((u8_t)ifindex, ifname); + if (!err && ifname[0] != '\0') { + return ifname; + } } #else /* LWIP_NETIF_API */ LWIP_UNUSED_ARG(ifindex); LWIP_UNUSED_ARG(ifname); #endif /* LWIP_NETIF_API */ + set_errno(ENXIO); return NULL; } diff --git a/src/api/sockets.c b/src/api/sockets.c index 25da2280..12aa6803 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -293,14 +293,6 @@ static struct lwip_select_cb *select_cb_list; and checked in event_callback to see if it has changed. */ static volatile int select_cb_ctr; -#if LWIP_SOCKET_SET_ERRNO -#ifndef set_errno -#define set_errno(err) do { if (err) { errno = (err); } } while(0) -#endif -#else /* LWIP_SOCKET_SET_ERRNO */ -#define set_errno(err) -#endif /* LWIP_SOCKET_SET_ERRNO */ - #define sock_set_errno(sk, e) do { \ const int sockerr = (e); \ sk->err = (u8_t)sockerr; \ diff --git a/src/include/lwip/priv/sockets_priv.h b/src/include/lwip/priv/sockets_priv.h index d45030a5..417a51b4 100644 --- a/src/include/lwip/priv/sockets_priv.h +++ b/src/include/lwip/priv/sockets_priv.h @@ -48,6 +48,14 @@ extern "C" { #endif +#if LWIP_SOCKET_SET_ERRNO +#ifndef set_errno +#define set_errno(err) do { if (err) { errno = (err); } } while(0) +#endif +#else /* LWIP_SOCKET_SET_ERRNO */ +#define set_errno(err) +#endif /* LWIP_SOCKET_SET_ERRNO */ + #if !LWIP_TCPIP_CORE_LOCKING /** Maximum optlen used by setsockopt/getsockopt */ #define LWIP_SETGETSOCKOPT_MAXOPTLEN 16