Branch
Hash :
d3a9a1f7
Author :
Date :
2025-01-10T23:52:54
sys_un-h: Ensure that <sys/un.h> defines sa_family_t. * lib/sys_un.in.h: Include <sys/socket.h> or define sa_family_t explicitly. * m4/sys_socket_h.m4 (gl_PREREQ_SYS_SA_FAMILY): New macro, extracted from gl_SYS_SOCKET_H. (gl_SYS_SOCKET_H): Invoke it. (gl_SYS_SOCKET_H_DEFAULTS): Don't initialize HAVE_SA_FAMILY_T. * m4/sys_un_h.m4 (gl_SYS_UN_H): Invoke gl_PREREQ_SYS_SA_FAMILY. Test whether <sys/un.h> defines sa_family_t. If not, set GL_GENERATE_SYS_UN_H to true. * modules/sys_un-h (Makefile.am): Substitute HAVE_SA_FAMILY_T, HAVE_SA_FAMILY_T_IN_SYS_UN_H. * tests/test-sys_un-h.c: Include intprops.h. Verify that sa_family_t is defined and an unsigned integer type. * modules/sys_un-h-tests (Depends-on): Add intprops. * doc/posix-headers/sys_un.texi: Mention the problem with sa_family_t.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/* sys/un.h - definitions for UNIX domain sockets
Copyright 2024-2025 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Collin Funk. */
#ifndef _@GUARD_PREFIX@_SYS_UN_H
#if __GNUC__ >= 3
@PRAGMA_SYSTEM_HEADER@
#endif
@PRAGMA_COLUMNS@
#if @HAVE_SYS_UN_H@
/* On glibc, in C++ mode with clang, <stddef.h> and <string.h> need to be
included before <sys/un.h>, because otherwise <sys/un.h> includes them inside
an 'extern "C" { ... }' block, which leads to compilation errors in gnulib's
<string.h> override. */
# if defined __cplusplus
# include <stddef.h>
# include <string.h>
# endif
/* The include_next requires a split double-inclusion guard. */
# @INCLUDE_NEXT@ @NEXT_SYS_UN_H@
#endif
#ifndef _@GUARD_PREFIX@_SYS_UN_H
#define _@GUARD_PREFIX@_SYS_UN_H 1
#if !@HAVE_SYS_UN_H@
/* A platform that lacks <sys/un.h>. */
/* Windows requires <winsock2.h> to be included before <afunix.h>. */
# if @HAVE_WINSOCK2_H@
# include <winsock2.h>
# endif
# if @HAVE_AFUNIX_H@
# include <afunix.h>
# endif
/* If a platform does not support AF_UNIX sockets 'struct sockaddr_un' will
not be defined. You may use HAVE_UNIXSOCKET after including <config.h>. */
#endif
#if !@HAVE_SA_FAMILY_T_IN_SYS_UN_H@
# if @HAVE_SA_FAMILY_T@
/* A platform that has <sys/un.h> but which — unlike <sys/socket.h> — does not
define the 'sa_family_t' type. */
# include <sys/socket.h>
# else
/* A platform which does not define the 'sa_family_t' type at all.
Define it here in the same way as in <sys/socket.h>. */
# if !GNULIB_defined_sa_family_t
/* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */
# if !defined __KLIBC__ || defined TCPV40HDRS
typedef unsigned short sa_family_t;
# else
typedef unsigned char sa_family_t;
# endif
# define GNULIB_defined_sa_family_t 1
# endif
# endif
#endif
#endif /* _@GUARD_PREFIX@_SYS_UN_H */
#endif /* _@GUARD_PREFIX@_SYS_UN_H */