From 6229ba9973134dfb184eb21bc62822d83ba554d8 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 4 Nov 2021 13:50:25 +0100 Subject: [PATCH] Remove check for accept() argument types --- aclocal.m4 | 1 - config/ac_func_accept_argtypes.m4 | 78 ----------------------------- configure | 82 +++++-------------------------- configure.ac | 2 +- src/backend/libpq/auth.c | 2 +- src/backend/libpq/pqcomm.c | 8 +-- src/backend/postmaster/pgstat.c | 4 +- src/include/c.h | 4 ++ src/include/libpq/pqcomm.h | 2 +- src/include/pg_config.h.in | 15 ++---- src/interfaces/libpq/fe-connect.c | 2 +- src/port/getpeereid.c | 4 +- src/tools/msvc/Solution.pm | 5 +- 13 files changed, 31 insertions(+), 178 deletions(-) delete mode 100644 config/ac_func_accept_argtypes.m4 diff --git a/aclocal.m4 b/aclocal.m4 index 5e22482cd5..58ade65046 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,5 +1,4 @@ dnl aclocal.m4 -m4_include([config/ac_func_accept_argtypes.m4]) m4_include([config/ax_prog_perl_modules.m4]) m4_include([config/ax_pthread.m4]) m4_include([config/c-compiler.m4]) diff --git a/config/ac_func_accept_argtypes.m4 b/config/ac_func_accept_argtypes.m4 deleted file mode 100644 index 178ef67818..0000000000 --- a/config/ac_func_accept_argtypes.m4 +++ /dev/null @@ -1,78 +0,0 @@ -# config/ac_func_accept_argtypes.m4 -# This comes from the official Autoconf macro archive at -# - - -dnl @synopsis AC_FUNC_ACCEPT_ARGTYPES -dnl -dnl Checks the data types of the three arguments to accept(). Results are -dnl placed into the symbols ACCEPT_TYPE_RETURN and ACCEPT_TYPE_ARG[123], -dnl consistent with the following example: -dnl -dnl #define ACCEPT_TYPE_RETURN int -dnl #define ACCEPT_TYPE_ARG1 int -dnl #define ACCEPT_TYPE_ARG2 struct sockaddr * -dnl #define ACCEPT_TYPE_ARG3 socklen_t -dnl -dnl NOTE: This is just a modified version of the AC_FUNC_SELECT_ARGTYPES -dnl macro. Credit for that one goes to David MacKenzie et. al. -dnl -dnl @version $Id: ac_func_accept_argtypes.m4,v 1.1 1999/12/03 11:29:29 simons Exp $ -dnl @author Daniel Richard G. -dnl - -# PostgreSQL local changes: In the original version ACCEPT_TYPE_ARG3 -# is a pointer type. That's kind of useless because then you can't -# use the macro to define a corresponding variable. We also make the -# reasonable(?) assumption that you can use arg3 for getsocktype etc. -# as well (i.e., anywhere POSIX.2 has socklen_t). -# -# arg2 can also be `const' (e.g., RH 4.2). Change the order of tests -# for arg3 so that `int' is first, in case there is no prototype at all. -# -# Solaris 7 and 8 have arg3 as 'void *' (disguised as 'Psocklen_t' -# which is *not* 'socklen_t *'). If we detect that, then we assume -# 'int' as the result, because that ought to work best. -# -# On Win32, accept() returns 'unsigned int PASCAL' -# Win64 uses SOCKET for return and arg1 - -AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES], -[AC_MSG_CHECKING([types of arguments for accept()]) - AC_CACHE_VAL(ac_cv_func_accept_return,dnl - [AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl - [AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl - [AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl - [for ac_cv_func_accept_return in 'int' 'SOCKET WSAAPI' 'unsigned int PASCAL'; do - for ac_cv_func_accept_arg1 in 'int' 'SOCKET' 'unsigned int'; do - for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do - for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do - AC_COMPILE_IFELSE([AC_LANG_SOURCE( -[#include -#include -extern $ac_cv_func_accept_return accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *);])], - [ac_not_found=no; break 4], [ac_not_found=yes]) - done - done - done - done - if test "$ac_not_found" = yes; then - AC_MSG_ERROR([could not determine argument types]) - fi - if test "$ac_cv_func_accept_arg3" = "void"; then - ac_cv_func_accept_arg3=int - fi - ])dnl AC_CACHE_VAL - ])dnl AC_CACHE_VAL - ])dnl AC_CACHE_VAL - ])dnl AC_CACHE_VAL - AC_MSG_RESULT([$ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *]) - AC_DEFINE_UNQUOTED(ACCEPT_TYPE_RETURN, $ac_cv_func_accept_return, - [Define to the return type of 'accept']) - AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG1, $ac_cv_func_accept_arg1, - [Define to the type of arg 1 of 'accept']) - AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG2, $ac_cv_func_accept_arg2, - [Define to the type of arg 2 of 'accept']) - AC_DEFINE_UNQUOTED(ACCEPT_TYPE_ARG3, $ac_cv_func_accept_arg3, - [Define to the type of arg 3 of 'accept']) -]) diff --git a/configure b/configure index 4ffefe4655..e60e78efdf 100755 --- a/configure +++ b/configure @@ -14615,6 +14615,17 @@ cat >>confdefs.h <<_ACEOF _ACEOF +fi + +ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include +" +if test "x$ac_cv_type_socklen_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKLEN_T 1 +_ACEOF + + fi ac_fn_c_check_type "$LINENO" "struct sockaddr_un" "ac_cv_type_struct_sockaddr_un" "#include @@ -15327,77 +15338,6 @@ if test x"$pgac_cv_var_int_timezone" = xyes ; then $as_echo "#define HAVE_INT_TIMEZONE 1" >>confdefs.h fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for accept()" >&5 -$as_echo_n "checking types of arguments for accept()... " >&6; } - if ${ac_cv_func_accept_return+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ${ac_cv_func_accept_arg1+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ${ac_cv_func_accept_arg2+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ${ac_cv_func_accept_arg3+:} false; then : - $as_echo_n "(cached) " >&6 -else - for ac_cv_func_accept_return in 'int' 'SOCKET WSAAPI' 'unsigned int PASCAL'; do - for ac_cv_func_accept_arg1 in 'int' 'SOCKET' 'unsigned int'; do - for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do - for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -extern $ac_cv_func_accept_return accept ($ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *); -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_not_found=no; break 4 -else - ac_not_found=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done - done - done - done - if test "$ac_not_found" = yes; then - as_fn_error $? "could not determine argument types" "$LINENO" 5 - fi - if test "$ac_cv_func_accept_arg3" = "void"; then - ac_cv_func_accept_arg3=int - fi - -fi - -fi - -fi - -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&5 -$as_echo "$ac_cv_func_accept_return, $ac_cv_func_accept_arg1, $ac_cv_func_accept_arg2, $ac_cv_func_accept_arg3 *" >&6; } - -cat >>confdefs.h <<_ACEOF -#define ACCEPT_TYPE_RETURN $ac_cv_func_accept_return -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define ACCEPT_TYPE_ARG1 $ac_cv_func_accept_arg1 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define ACCEPT_TYPE_ARG2 $ac_cv_func_accept_arg2 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define ACCEPT_TYPE_ARG3 $ac_cv_func_accept_arg3 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday takes only one argument" >&5 $as_echo_n "checking whether gettimeofday takes only one argument... " >&6; } if ${pgac_cv_func_gettimeofday_1arg+:} false; then : diff --git a/configure.ac b/configure.ac index 44ee3ebe2f..22cabe1b60 100644 --- a/configure.ac +++ b/configure.ac @@ -1552,6 +1552,7 @@ PGAC_C_BUILTIN_UNREACHABLE PGAC_C_COMPUTED_GOTO PGAC_STRUCT_TIMEZONE PGAC_UNION_SEMUN +AC_CHECK_TYPES(socklen_t, [], [], [#include ]) PGAC_STRUCT_SOCKADDR_UN PGAC_STRUCT_SOCKADDR_STORAGE PGAC_STRUCT_SOCKADDR_STORAGE_MEMBERS @@ -1686,7 +1687,6 @@ fi ## PGAC_VAR_INT_TIMEZONE -AC_FUNC_ACCEPT_ARGTYPES PGAC_FUNC_GETTIMEOFDAY_1ARG PGAC_FUNC_WCSTOMBS_L diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index a317aef1c9..7bcf52523b 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -3026,7 +3026,7 @@ PerformRadiusTransaction(const char *server, const char *secret, const char *por struct addrinfo hint; struct addrinfo *serveraddrs; int port; - ACCEPT_TYPE_ARG3 addrsize; + socklen_t addrsize; fd_set fdset; struct timeval endtime; int i, diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 89a5f901aa..6f2b2bbb37 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1620,7 +1620,7 @@ pq_getkeepalivesidle(Port *port) if (port->default_keepalives_idle == 0) { #ifndef WIN32 - ACCEPT_TYPE_ARG3 size = sizeof(port->default_keepalives_idle); + socklen_t size = sizeof(port->default_keepalives_idle); if (getsockopt(port->sock, IPPROTO_TCP, PG_TCP_KEEPALIVE_IDLE, (char *) &port->default_keepalives_idle, @@ -1705,7 +1705,7 @@ pq_getkeepalivesinterval(Port *port) if (port->default_keepalives_interval == 0) { #ifndef WIN32 - ACCEPT_TYPE_ARG3 size = sizeof(port->default_keepalives_interval); + socklen_t size = sizeof(port->default_keepalives_interval); if (getsockopt(port->sock, IPPROTO_TCP, TCP_KEEPINTVL, (char *) &port->default_keepalives_interval, @@ -1788,7 +1788,7 @@ pq_getkeepalivescount(Port *port) if (port->default_keepalives_count == 0) { - ACCEPT_TYPE_ARG3 size = sizeof(port->default_keepalives_count); + socklen_t size = sizeof(port->default_keepalives_count); if (getsockopt(port->sock, IPPROTO_TCP, TCP_KEEPCNT, (char *) &port->default_keepalives_count, @@ -1863,7 +1863,7 @@ pq_gettcpusertimeout(Port *port) if (port->default_tcp_user_timeout == 0) { - ACCEPT_TYPE_ARG3 size = sizeof(port->default_tcp_user_timeout); + socklen_t size = sizeof(port->default_tcp_user_timeout); if (getsockopt(port->sock, IPPROTO_TCP, TCP_USER_TIMEOUT, (char *) &port->default_tcp_user_timeout, diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index b7d0fbaefd..8c166e5e16 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -391,7 +391,7 @@ static void pgstat_recv_tempfile(PgStat_MsgTempFile *msg, int len); void pgstat_init(void) { - ACCEPT_TYPE_ARG3 alen; + socklen_t alen; struct addrinfo *addrs = NULL, *addr, hints; @@ -624,7 +624,7 @@ pgstat_init(void) { int old_rcvbuf; int new_rcvbuf; - ACCEPT_TYPE_ARG3 rcvbufsize = sizeof(old_rcvbuf); + socklen_t rcvbufsize = sizeof(old_rcvbuf); if (getsockopt(pgStatSock, SOL_SOCKET, SO_RCVBUF, (char *) &old_rcvbuf, &rcvbufsize) < 0) diff --git a/src/include/c.h b/src/include/c.h index c8ede08273..7c790f557e 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -408,6 +408,10 @@ typedef unsigned char bool; * ---------------------------------------------------------------- */ +#ifndef HAVE_SOCKLEN_T +typedef socklen_t int; +#endif + /* * Pointer * Variable holding address of any memory resident object. diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h index be9d970574..1bcc189dee 100644 --- a/src/include/libpq/pqcomm.h +++ b/src/include/libpq/pqcomm.h @@ -62,7 +62,7 @@ struct sockaddr_storage typedef struct { struct sockaddr_storage addr; - ACCEPT_TYPE_ARG3 salen; + socklen_t salen; } SockAddr; /* Configure the UNIX socket location for the well known port. */ diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 15ffdd895a..ca3592465e 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -1,17 +1,5 @@ /* src/include/pg_config.h.in. Generated from configure.ac by autoheader. */ -/* Define to the type of arg 1 of 'accept' */ -#undef ACCEPT_TYPE_ARG1 - -/* Define to the type of arg 2 of 'accept' */ -#undef ACCEPT_TYPE_ARG2 - -/* Define to the type of arg 3 of 'accept' */ -#undef ACCEPT_TYPE_ARG3 - -/* Define to the return type of 'accept' */ -#undef ACCEPT_TYPE_RETURN - /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD @@ -518,6 +506,9 @@ /* Define to 1 if you have the `shm_open' function. */ #undef HAVE_SHM_OPEN +/* Define to 1 if the system has the type `socklen_t'. */ +#undef HAVE_SOCKLEN_T + /* Define to 1 if you have spinlocks. */ #undef HAVE_SPINLOCKS diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index b288d346f9..0b7ee3e3c8 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -2744,7 +2744,7 @@ PQconnectPoll(PGconn *conn) case CONNECTION_STARTED: { - ACCEPT_TYPE_ARG3 optlen = sizeof(optval); + socklen_t optlen = sizeof(optval); /* * Write ready, since we've made it here, so the connection diff --git a/src/port/getpeereid.c b/src/port/getpeereid.c index d6aa755d30..4631869180 100644 --- a/src/port/getpeereid.c +++ b/src/port/getpeereid.c @@ -37,7 +37,7 @@ getpeereid(int sock, uid_t *uid, gid_t *gid) #if defined(SO_PEERCRED) /* Linux: use getsockopt(SO_PEERCRED) */ struct ucred peercred; - ACCEPT_TYPE_ARG3 so_len = sizeof(peercred); + socklen_t so_len = sizeof(peercred); if (getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &peercred, &so_len) != 0 || so_len != sizeof(peercred)) @@ -48,7 +48,7 @@ getpeereid(int sock, uid_t *uid, gid_t *gid) #elif defined(LOCAL_PEERCRED) /* Debian with FreeBSD kernel: use getsockopt(LOCAL_PEERCRED) */ struct xucred peercred; - ACCEPT_TYPE_ARG3 so_len = sizeof(peercred); + socklen_t so_len = sizeof(peercred); if (getsockopt(sock, 0, LOCAL_PEERCRED, &peercred, &so_len) != 0 || so_len != sizeof(peercred) || diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 43fd1be088..a013951e0d 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -205,10 +205,6 @@ sub GenerateFiles # Every symbol in pg_config.h.in must be accounted for here. Set # to undef if the symbol should not be defined. my %define = ( - ACCEPT_TYPE_ARG1 => 'unsigned int', - ACCEPT_TYPE_ARG2 => 'struct sockaddr *', - ACCEPT_TYPE_ARG3 => 'int', - ACCEPT_TYPE_RETURN => 'unsigned int PASCAL', ALIGNOF_DOUBLE => 8, ALIGNOF_INT => 4, ALIGNOF_LONG => 4, @@ -365,6 +361,7 @@ sub GenerateFiles HAVE_SETPROCTITLE_FAST => undef, HAVE_SETSID => undef, HAVE_SHM_OPEN => undef, + HAVE_SOCKLEN_T => 1, HAVE_SPINLOCKS => 1, HAVE_SRANDOM => undef, HAVE_STDBOOL_H => 1, -- 2.33.1