From: Viktor Szakats Date: Tue, 9 Sep 2025 08:00:13 +0000 (+0200) Subject: lib: introduce `CURL_ACCEPT()` X-Git-Tag: curl-8_16_0~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9863599d69b79d290928a89bf9160f4e4e023d4e;p=thirdparty%2Fcurl.git lib: introduce `CURL_ACCEPT()` To avoid overriding the system symbol `accept`, which is a macro on some systems (AIX), and thus can't be called via the `(function)` PP trick. It's also problematic to reset such macro to its original value. Follow-up to 3bb5e58c105d7be450b667858d1b8e7ae3ded555 #17827 Reported-by: Andrew Kirillov Fixes #18500 Closes #18501 Closes #18502 --- diff --git a/lib/cf-socket.c b/lib/cf-socket.c index 7cf1ed2a5c..f449ca36ca 100644 --- a/lib/cf-socket.c +++ b/lib/cf-socket.c @@ -2116,7 +2116,7 @@ static CURLcode cf_tcp_accept_connect(struct Curl_cfilter *cf, s_accepted = accept4(ctx->sock, (struct sockaddr *) &add, &size, SOCK_NONBLOCK | SOCK_CLOEXEC); #else - s_accepted = accept(ctx->sock, (struct sockaddr *) &add, &size); + s_accepted = CURL_ACCEPT(ctx->sock, (struct sockaddr *) &add, &size); #endif } diff --git a/lib/curl_mem_undef.h b/lib/curl_mem_undef.h index 2b0bef111d..b72e529dde 100644 --- a/lib/curl_mem_undef.h +++ b/lib/curl_mem_undef.h @@ -37,7 +37,6 @@ #endif #undef socket -#undef accept #ifdef HAVE_ACCEPT4 #undef accept4 #endif diff --git a/lib/curl_setup.h b/lib/curl_setup.h index ed328d679e..72c118affc 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -1084,6 +1084,9 @@ CURL_EXTERN ALLOC_FUNC #define CURL_FREEADDRINFO(data) \ curl_dbg_freeaddrinfo(data, __LINE__, __FILE__) +#define CURL_ACCEPT(sock,addr,len) \ + curl_dbg_accept(sock, addr, len, __LINE__, __FILE__) + #else /* !CURLDEBUG */ #define sclose(x) CURL_SCLOSE(x) @@ -1092,6 +1095,8 @@ CURL_EXTERN ALLOC_FUNC #define CURL_GETADDRINFO getaddrinfo #define CURL_FREEADDRINFO freeaddrinfo +#define CURL_ACCEPT accept + #endif /* CURLDEBUG */ /* Some versions of the Android NDK is missing the declaration */ diff --git a/lib/memdebug.c b/lib/memdebug.c index d063f94c32..c1121713ea 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -371,7 +371,7 @@ curl_socket_t curl_dbg_accept(curl_socket_t s, void *saddr, void *saddrlen, struct sockaddr *addr = (struct sockaddr *)saddr; curl_socklen_t *addrlen = (curl_socklen_t *)saddrlen; - curl_socket_t sockfd = (accept)(s, addr, addrlen); + curl_socket_t sockfd = accept(s, addr, addrlen); if(source && (sockfd != CURL_SOCKET_BAD)) curl_dbg_log("FD %s:%d accept() = %" FMT_SOCKET_T "\n", diff --git a/lib/memdebug.h b/lib/memdebug.h index d8d5f807d7..30469b99a5 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -59,9 +59,6 @@ #undef socket #define socket(domain,type,protocol) \ curl_dbg_socket((int)domain, type, protocol, __LINE__, __FILE__) -#undef accept /* for those with accept as a macro */ -#define accept(sock,addr,len) \ - curl_dbg_accept(sock, addr, len, __LINE__, __FILE__) #ifdef HAVE_ACCEPT4 #undef accept4 /* for those with accept4 as a macro */ #define accept4(sock,addr,len,flags) \ diff --git a/lib/socketpair.c b/lib/socketpair.c index 93df9071ef..4151a9bb97 100644 --- a/lib/socketpair.c +++ b/lib/socketpair.c @@ -201,7 +201,7 @@ int Curl_socketpair(int domain, int type, int protocol, pfd[0].events = POLLIN; pfd[0].revents = 0; (void)Curl_poll(pfd, 1, 1000); /* one second */ - socks[1] = accept(listener, NULL, NULL); + socks[1] = CURL_ACCEPT(listener, NULL, NULL); if(socks[1] == CURL_SOCKET_BAD) goto error; else { diff --git a/src/tool_doswin.c b/src/tool_doswin.c index 2b3233a277..4ed90ba8c5 100644 --- a/src/tool_doswin.c +++ b/src/tool_doswin.c @@ -765,8 +765,8 @@ static DWORD WINAPI win_stdin_thread_func(void *thread_data) SOCKADDR_IN clientAddr; int clientAddrLen = sizeof(clientAddr); - curl_socket_t socket_w = accept(tdata->socket_l, (SOCKADDR*)&clientAddr, - &clientAddrLen); + curl_socket_t socket_w = CURL_ACCEPT(tdata->socket_l, (SOCKADDR*)&clientAddr, + &clientAddrLen); if(socket_w == CURL_SOCKET_BAD) { errorf("accept error: %08lx", GetLastError());