From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: Andres Freund <andres@anarazel.de>
To: pgsql-hackers@postgresql.org
Cc: Thomas Munro <thomas.munro@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Peter Eisentraut <peter_e@gmx.net>
Cc: John Naylor <john.naylor@enterprisedb.com>
Cc: Andrew Dunstan <andrew@dunslane.net>
Cc: Josef Šimánek <josef.simanek@gmail.com>
Subject: Re: [RFC] building postgres with meson -v
Date: Thu, 4 Nov 2021 19:17:05 +0100
Message-ID: <3538f4c4-1886-64f2-dcff-aaad8267fb82@enterprisedb.com> (raw)
In-Reply-To: <20211031232448.wsma7sggfwyxppjc@alap3.anarazel.de>
References: <20211012083721.hvixq4pnh2pixr3j@alap3.anarazel.de>
<20211031232448.wsma7sggfwyxppjc@alap3.anarazel.de>
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 <peter@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.m4index 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.m4deleted file mode 100644index 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. <skunk@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/configureindex 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.acindex 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.cindex 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.cindex 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.cindex 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.hindex 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.hindex 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.inindex 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.cindex 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.cindex 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.pmindex 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
Attachments:
[text/plain] 0001-Remove-check-for-accept-argument-types.patch (15.0K, ../3538f4c4-1886-64f2-dcff-aaad8267fb82@enterprisedb.com/2-0001-Remove-check-for-accept-argument-types.patch)
download | inline diff:
From 6229ba9973134dfb184eb21bc62822d83ba554d8 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@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.m4index 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.m4deleted file mode 100644index 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. <skunk@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/configureindex 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.acindex 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.cindex 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.cindex 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.cindex 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.hindex 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.hindex 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.inindex 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.cindex 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.cindex 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.pmindex 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 instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: peter.eisentraut@enterprisedb.com, andres@anarazel.de, thomas.munro@gmail.com, tgl@sss.pgh.pa.us, peter_e@gmx.net, john.naylor@enterprisedb.com, andrew@dunslane.net, josef.simanek@gmail.com
Subject: Re: [RFC] building postgres with meson -v
In-Reply-To: <3538f4c4-1886-64f2-dcff-aaad8267fb82@enterprisedb.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox