diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | socket/Makefile | 2 | ||||
-rw-r--r-- | socket/sa_len.c | 108 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/sa_len.c | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sa_len.c | 72 |
6 files changed, 131 insertions, 67 deletions
@@ -1,5 +1,14 @@ 2013-08-27 Roland McGrath <roland@hack.frob.com> + * socket/sa_len.c: New file. + * socket/Makefile (aux): Add it. + * sysdeps/unix/sysv/linux/Makefile + [$(subdir) = socket] (sysdep_routines): Don't add sa_len here. + * sysdeps/unix/sysv/linux/sa_len.c: Just #define HAVE_NET*_H + and #include <socket/sa_len.c>. + * sysdeps/unix/sysv/linux/s390/sa_len.c: Just #define + HAVE_NETIUCV_IUCV_H and #include <sysdeps/unix/sysv/linux/sa_len.c>. + * sysdeps/unix/bsd/bsd4.4/bits/socket.h: Moved to ... * bits/socket.h: ... here. diff --git a/socket/Makefile b/socket/Makefile index ad9c063a65..dc8bbde5c4 100644 --- a/socket/Makefile +++ b/socket/Makefile @@ -28,6 +28,6 @@ routines := accept bind connect getpeername getsockname getsockopt \ setsockopt shutdown socket socketpair isfdtype opensock \ sockatmark accept4 recvmmsg sendmmsg -aux := have_sock_cloexec +aux := have_sock_cloexec sa_len include ../Rules diff --git a/socket/sa_len.c b/socket/sa_len.c new file mode 100644 index 0000000000..5cbcf4b586 --- /dev/null +++ b/socket/sa_len.c @@ -0,0 +1,108 @@ +/* Helper for SA_LEN macro. + Copyright (C) 2013 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library 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. + + The GNU C Library 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 the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <sys/socket.h> + +/* If _HAVE_SA_LEN is defined, then SA_LEN just uses sockaddr.sa_len + and there is no need for a helper function. */ + +#ifndef _HAVE_SA_LEN + +/* All configurations have at least these two headers + and their associated address families. */ + +# include <netinet/in.h> +# include <sys/un.h> + +/* More-specific sa_len.c files #define these various HAVE_*_H + macros and then #include this file. */ + +# ifdef HAVE_NETASH_ASH_H +# include <netash/ash.h> +# endif +# ifdef HAVE_NETATALK_AT_H +# include <netatalk/at.h> +# endif +# ifdef HAVE_NETAX25_AX25_H +# include <netax25/ax25.h> +# endif +# ifdef HAVE_NETECONET_EC_H +# include <neteconet/ec.h> +# endif +# ifdef HAVE_NETIPX_IPX_H +# include <netipx/ipx.h> +# endif +# ifdef HAVE_NETPACKET_PACKET_H +# include <netpacket/packet.h> +# endif +# ifdef HAVE_NETROSE_ROSE_H +# include <netrose/rose.h> +# endif +# ifdef HAVE_NETIUCV_IUCV_H +# include <netiucv/iucv.h> +# endif + +int +__libc_sa_len (sa_family_t af) +{ + switch (af) + { +# ifdef HAVE_NETATALK_AT_H + case AF_APPLETALK: + return sizeof (struct sockaddr_at); +# endif +# ifdef HAVE_NETASH_ASH_H + case AF_ASH: + return sizeof (struct sockaddr_ash); +# endif +# ifdef HAVE_NETAX25_AX25_H + case AF_AX25: + return sizeof (struct sockaddr_ax25); +# endif +# ifdef HAVE_NETECONET_EC_H + case AF_ECONET: + return sizeof (struct sockaddr_ec); +# endif + case AF_INET: + return sizeof (struct sockaddr_in); + case AF_INET6: + return sizeof (struct sockaddr_in6); +# ifdef HAVE_NETIPX_IPX_H + case AF_IPX: + return sizeof (struct sockaddr_ipx); +# endif +# ifdef HAVE_NETIUCV_IUCV_H + case AF_IUCV: + return sizeof (struct sockaddr_iucv); +# endif + case AF_LOCAL: + return sizeof (struct sockaddr_un); +# ifdef HAVE_NETPACKET_PACKET_H + case AF_PACKET: + return sizeof (struct sockaddr_ll); +# endif +# ifdef HAVE_NETROSE_ROSE_H + case AF_ROSE: + return sizeof (struct sockaddr_rose); +# endif + } + return 0; +} +libc_hidden_def (__libc_sa_len) + +#endif /* Not _HAVE_SA_LEN. */ diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 94916a2b13..247cb9c111 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -120,7 +120,7 @@ ifeq ($(subdir),socket) sysdep_headers += net/if_ppp.h net/ppp-comp.h \ net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \ net/if_slip.h net/if_packet.h net/if_shaper.h -sysdep_routines += cmsg_nxthdr sa_len +sysdep_routines += cmsg_nxthdr endif ifeq ($(subdir),sunrpc) diff --git a/sysdeps/unix/sysv/linux/s390/sa_len.c b/sysdeps/unix/sysv/linux/s390/sa_len.c index 6575b83e9c..7b47aa8d67 100644 --- a/sysdeps/unix/sysv/linux/s390/sa_len.c +++ b/sysdeps/unix/sysv/linux/s390/sa_len.c @@ -1,2 +1,3 @@ -#define NEED_AF_IUCV 1 -#include "../sa_len.c" +#define HAVE_NETIUCV_IUCV_H + +#include <sysdeps/unix/sysv/linux/sa_len.c> diff --git a/sysdeps/unix/sysv/linux/sa_len.c b/sysdeps/unix/sysv/linux/sa_len.c index 09fc8eb9b6..0e657fa094 100644 --- a/sysdeps/unix/sysv/linux/sa_len.c +++ b/sysdeps/unix/sysv/linux/sa_len.c @@ -1,63 +1,9 @@ -/* Copyright (C) 1998-2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library 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. - - The GNU C Library 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 the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/socket.h> - -#include <netash/ash.h> -#include <netatalk/at.h> -#include <netax25/ax25.h> -#include <neteconet/ec.h> -#include <netinet/in.h> -#include <netipx/ipx.h> -#include <netpacket/packet.h> -#include <netrose/rose.h> -#include <netiucv/iucv.h> -#include <sys/un.h> - -int -__libc_sa_len (sa_family_t af) -{ - switch (af) - { - case AF_APPLETALK: - return sizeof (struct sockaddr_at); - case AF_ASH: - return sizeof (struct sockaddr_ash); - case AF_AX25: - return sizeof (struct sockaddr_ax25); - case AF_ECONET: - return sizeof (struct sockaddr_ec); - case AF_INET: - return sizeof (struct sockaddr_in); - case AF_INET6: - return sizeof (struct sockaddr_in6); - case AF_IPX: - return sizeof (struct sockaddr_ipx); -#ifdef NEED_AF_IUCV - case AF_IUCV: - return sizeof (struct sockaddr_iucv); -#endif - case AF_LOCAL: - return sizeof (struct sockaddr_un); - case AF_PACKET: - return sizeof (struct sockaddr_ll); - case AF_ROSE: - return sizeof (struct sockaddr_rose); - } - return 0; -} -libc_hidden_def (__libc_sa_len) +#define HAVE_NETASH_ASH_H +#define HAVE_NETATALK_AT_H +#define HAVE_NETAX25_AX25_H +#define HAVE_NETECONET_EC_H +#define HAVE_NETIPX_IPX_H +#define HAVE_NETPACKET_PACKET_H +#define HAVE_NETROSE_ROSE_H + +#include <socket/sa_len.c> |