On 01.11.21 00:24, Andres Freund wrote:
- remaining hardcoded configure tests (e.g. ACCEPT_TYPE_ARG*)

I think we can get rid of that one.

That test originally catered to some strange edge cases where the third argument was size_t that was not the same size as int. That is long gone, if it ever really existed. All systems currently of interest use either socklen_t or int, and socklen_t is always int. (A few build farm animals report size_t, but they are all 32-bit.)

I think we can change the code to use socklen_t and add a simple check to typedef socklen_t as int if not available. See attached patch.
>From 6229ba9973134dfb184eb21bc62822d83ba554d8 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pe...@eisentraut.org>
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
-# <http://research.cys.de/autoconf-archive/>
-
-
-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. <sk...@mit.edu>
-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 <sys/types.h>
-#include <sys/socket.h>
-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 
<sys/socket.h>
+"
+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 <sys/types.h>
@@ -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 <sys/types.h>
-#include <sys/socket.h>
-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 <sys/socket.h>])
 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

Reply via email to