]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
MinGW: Fix error: cannot convert 'size_t*' to 'int*' (#1825)
authorAmos Jeffries <yadij@users.noreply.github.com>
Sat, 1 Jun 2024 19:33:23 +0000 (19:33 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Sun, 2 Jun 2024 01:11:44 +0000 (01:11 +0000)
Removing another addrinfo as we do.

src/comm/TcpAcceptor.cc

index aa082df4b4651cef171b6bf6d10daf20b6b2ef5f..50ad7dedd8fded199c29cf05720ed70fa981c6aa 100644 (file)
@@ -345,16 +345,13 @@ bool
 Comm::TcpAcceptor::acceptInto(Comm::ConnectionPointer &details)
 {
     ++statCounter.syscalls.sock.accepts;
-    struct addrinfo *gai = nullptr;
-    Ip::Address::InitAddr(gai);
 
     errcode = 0; // reset local errno copy.
-    const auto rawSock = accept(conn->fd, gai->ai_addr, &gai->ai_addrlen);
+    struct sockaddr_storage remoteAddress = {};
+    socklen_t remoteAddressSize = sizeof(remoteAddress);
+    const auto rawSock = accept(conn->fd, reinterpret_cast<struct sockaddr *>(&remoteAddress), &remoteAddressSize);
     if (rawSock < 0) {
         errcode = errno; // store last accept errno locally.
-
-        Ip::Address::FreeAddr(gai);
-
         if (ignoreErrno(errcode) || errcode == ECONNABORTED) {
             debugs(50, 5, status() << ": " << xstrerr(errcode));
             return false;
@@ -373,21 +370,21 @@ Comm::TcpAcceptor::acceptInto(Comm::ConnectionPointer &details)
     details->fd = sock;
     details->enterOrphanage();
 
-    details->remote = *gai;
+    Assure(remoteAddressSize <= socklen_t(sizeof(remoteAddress)));
+    details->remote = remoteAddress;
 
     // lookup the local-end details of this new connection
-    Ip::Address::InitAddr(gai);
-    details->local.setEmpty();
-    if (getsockname(sock, gai->ai_addr, &gai->ai_addrlen) != 0) {
+    struct sockaddr_storage localAddress = {};
+    socklen_t localAddressSize = sizeof(localAddress);
+    if (getsockname(sock, reinterpret_cast<struct sockaddr *>(&localAddress), &localAddressSize) != 0) {
         int xerrno = errno;
-        Ip::Address::FreeAddr(gai);
         debugs(50, DBG_IMPORTANT, "ERROR: Closing accepted TCP connection after failing to obtain its local IP address" <<
                Debug::Extra << "accepted connection: " << details <<
                Debug::Extra << "getsockname(2) error: " << xstrerr(xerrno));
         return false;
     }
-    details->local = *gai;
-    Ip::Address::FreeAddr(gai);
+    Assure(localAddressSize <= socklen_t(sizeof(localAddress)));
+    details->local = localAddress;
 
     if (conn->flags & COMM_TRANSPARENT) { // the real client/dest IP address must be already available via getsockname()
         details->flags |= COMM_TRANSPARENT;