Another longstanding part of the sys/socket.h specification:
* The <sys/socket.h> header shall define the socklen_t type, which
is an integer type of width of at least 32 bits; see APPLICATION
USAGE.
* The <sys/socket.h> header shall define the sa_family_t unsigned
integer type.
On mingw I see 'typedef int socklen_t' in ws2tcpip.h. But sa_family_t is
undefined so Gnulib uses 'unsigned short' which is conforming.
I've committed a test for this to catch any other platforms. If Windows
satisfies it then hopefully nowhere else should be a problem.
Collin
>From 24e4b2dca4ac04795211d307a2ee20c62184d2b5 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 23 Jul 2024 19:00:28 -0700
Subject: [PATCH] sys_socket tests: Improve checks for socklen_t and
sa_family_t.
* modules/sys_socket-tests (Depends-on): Add intprops.
* tests/test-sys_socket.c: Check that socklen_t is at least 32 bits
wide. Check that sa_family_t is unsigned.
---
ChangeLog | 7 +++++++
modules/sys_socket-tests | 1 +
tests/test-sys_socket.c | 10 ++++++++++
3 files changed, 18 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 0c252e22d0..cf51073474 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-07-23 Collin Funk <[email protected]>
+
+ sys_socket tests: Improve checks for socklen_t and sa_family_t.
+ * modules/sys_socket-tests (Depends-on): Add intprops.
+ * tests/test-sys_socket.c: Check that socklen_t is at least 32 bits
+ wide. Check that sa_family_t is unsigned.
+
2024-07-23 Bruno Haible <[email protected]>
getopt-posix, getopt-gnu tests: Avoid test failure on mingw.
diff --git a/modules/sys_socket-tests b/modules/sys_socket-tests
index b0bb4356ca..0e0ef6c45e 100644
--- a/modules/sys_socket-tests
+++ b/modules/sys_socket-tests
@@ -3,6 +3,7 @@ tests/test-sys_socket.c
Depends-on:
assert-h
+intprops
sys_socket-c++-tests
configure.ac:
diff --git a/tests/test-sys_socket.c b/tests/test-sys_socket.c
index 6fbfb98a70..5c1ad11540 100644
--- a/tests/test-sys_socket.c
+++ b/tests/test-sys_socket.c
@@ -38,6 +38,16 @@ struct msghdr msg;
#include <errno.h>
+#include "intprops.h"
+
+/* POSIX requires that 'socklen_t' is an integer type with a width of at
+ least 32 bits. */
+static_assert (32 <= TYPE_WIDTH (socklen_t));
+
+/* POSIX requires that sa_family_t is an unsigned integer type. */
+static_assert (! TYPE_SIGNED (sa_family_t));
+
+
int
main (void)
{
--
2.45.2