Explorar o código

Fix explicit casts and types in espidf_socket.c (#1945)

In the esp-idf platform, Xtensa GCC 8.4.0 reported incompatible pointer warnings when
building with the lwip component.

Berkeley (POSIX) sockets uses composition in combination with type punning to handle
many protocol families, including IPv4 & IPv6. The type punning just has to be made
explicit with pointer casts from `sockaddr_in` for IPv4 to the generic `sockaddr`.
Patrick Cook %!s(int64=3) %!d(string=hai) anos
pai
achega
89c11c5361
Modificáronse 1 ficheiros con 4 adicións e 4 borrados
  1. 4 4
      core/shared/platform/esp-idf/espidf_socket.c

+ 4 - 4
core/shared/platform/esp-idf/espidf_socket.c

@@ -77,7 +77,7 @@ os_socket_bind(bh_socket_t socket, const char *host, int *port)
     }
 
     socklen = sizeof(addr);
-    if (getsockname(socket, (void *)&addr, &socklen) == -1) {
+    if (getsockname(socket, (struct sockaddr *)&addr, &socklen) == -1) {
         goto fail;
     }
 
@@ -120,7 +120,7 @@ os_socket_accept(bh_socket_t server_sock, bh_socket_t *sock, void *addr,
                  unsigned int *addrlen)
 {
     struct sockaddr addr_tmp;
-    unsigned int len = sizeof(struct sockaddr);
+    socklen_t len = sizeof(struct sockaddr);
 
     *sock = accept(server_sock, (struct sockaddr *)&addr_tmp, &len);
 
@@ -205,7 +205,7 @@ os_socket_addr_remote(bh_socket_t socket, bh_sockaddr_t *sockaddr)
     struct sockaddr_in addr;
     socklen_t addr_len = sizeof(addr);
 
-    if (getpeername(socket, &addr, &addr_len) == -1) {
+    if (getpeername(socket, (struct sockaddr *)&addr, &addr_len) == -1) {
         return BHT_ERROR;
     }
 
@@ -219,7 +219,7 @@ os_socket_addr_local(bh_socket_t socket, bh_sockaddr_t *sockaddr)
     struct sockaddr_in addr;
     socklen_t addr_len = sizeof(addr);
 
-    if (getsockname(socket, &addr, &addr_len) == -1) {
+    if (getsockname(socket, (struct sockaddr *)&addr, &addr_len) == -1) {
         return BHT_ERROR;
     }