diff --git a/src/api/sockets.c b/src/api/sockets.c index 8e33b416..95b8b7e4 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -217,7 +217,7 @@ struct lwip_sock { /** error happened for this socket, set by event_callback(), tested by select */ u16_t errevent; /** last error that occurred on this socket */ - int err; + lwip_sockerr_t err; /** counter of how many threads are waiting for this socket using select */ SELWAIT_T select_waiting; }; @@ -295,7 +295,7 @@ static volatile int select_cb_ctr; #define sock_set_errno(sk, e) do { \ const int sockerr = (e); \ - sk->err = sockerr; \ + sk->err = (lwip_sockerr_t)sockerr; \ set_errno(sockerr); \ } while (0) @@ -305,8 +305,8 @@ static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len static void lwip_getsockopt_callback(void *arg); static void lwip_setsockopt_callback(void *arg); #endif -static int lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen); -static int lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen); +static lwip_sockerr_t lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen); +static lwip_sockerr_t lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen); #if LWIP_IPV4 && LWIP_IPV6 static void @@ -1780,7 +1780,7 @@ lwip_getsockname(int s, struct sockaddr *name, socklen_t *namelen) int lwip_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) { - int err; + lwip_sockerr_t err; struct lwip_sock *sock = get_socket(s); #if !LWIP_TCPIP_CORE_LOCKING err_t cberr; @@ -1876,10 +1876,10 @@ lwip_getsockopt_callback(void *arg) /** lwip_getsockopt_impl: the actual implementation of getsockopt: * same argument as lwip_getsockopt, either called directly or through callback */ -static int +static lwip_sockerr_t lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *optlen) { - int err = 0; + lwip_sockerr_t err = 0; struct lwip_sock *sock = tryget_socket(s); if (!sock) { return EBADF; @@ -2187,7 +2187,7 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt int lwip_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) { - int err = 0; + lwip_sockerr_t err = 0; struct lwip_sock *sock = get_socket(s); #if !LWIP_TCPIP_CORE_LOCKING err_t cberr; @@ -2278,10 +2278,10 @@ lwip_setsockopt_callback(void *arg) /** lwip_setsockopt_impl: the actual implementation of setsockopt: * same argument as lwip_setsockopt, either called directly or through callback */ -static int +static lwip_sockerr_t lwip_setsockopt_impl(int s, int level, int optname, const void *optval, socklen_t optlen) { - int err = 0; + lwip_sockerr_t err = 0; struct lwip_sock *sock = tryget_socket(s); if (!sock) { return EBADF; diff --git a/src/include/lwip/priv/sockets_priv.h b/src/include/lwip/priv/sockets_priv.h index 3e226cbb..94680c3b 100644 --- a/src/include/lwip/priv/sockets_priv.h +++ b/src/include/lwip/priv/sockets_priv.h @@ -48,6 +48,19 @@ extern "C" { #endif +/** Define LWIP_SOCKERR_T in cc.h if you want to use a different type for your + * platform (must be signed and big enough to hold all error constants). */ +#ifdef LWIP_SOCKERR_T +typedef LWIP_SOCKERR_T lwip_sockerr_t; +#else /* LWIP_SOCKERR_T */ +#ifdef LWIP_PROVIDE_ERRNO +/* we only use our own error constants, 8 bits are enough */ +typedef s8_t lwip_sockerr_t; +#else +typedef int lwip_sockerr_t; +#endif +#endif /* LWIP_SOCKERR_T*/ + #if LWIP_SOCKET_SET_ERRNO #ifndef set_errno #define set_errno(err) do { if (err) { errno = (err); } } while(0) @@ -82,7 +95,7 @@ struct lwip_setgetsockopt_data { /** size of *optval */ socklen_t optlen; /** if an error occurs, it is temporarily stored here */ - int err; + lwip_sockerr_t err; /** semaphore to wake up the calling task */ void* completed_sem; };