(root)/
glibc-2.38/
socket/
sa_len.c
       1  /* Helper for SA_LEN macro.
       2     Copyright (C) 2013-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <sys/socket.h>
      20  
      21  /* If _HAVE_SA_LEN is defined, then SA_LEN just uses sockaddr.sa_len
      22     and there is no need for a helper function.  */
      23  
      24  #ifndef _HAVE_SA_LEN
      25  
      26  /* All configurations have at least these two headers
      27     and their associated address families.  */
      28  
      29  # include <netinet/in.h>
      30  # include <sys/un.h>
      31  
      32  /* More-specific sa_len.c files #define these various HAVE_*_H
      33     macros and then #include this file.  */
      34  
      35  # ifdef HAVE_NETASH_ASH_H
      36  #  include <netash/ash.h>
      37  # endif
      38  # ifdef HAVE_NETATALK_AT_H
      39  #  include <netatalk/at.h>
      40  # endif
      41  # ifdef HAVE_NETAX25_AX25_H
      42  #  include <netax25/ax25.h>
      43  # endif
      44  # ifdef HAVE_NETECONET_EC_H
      45  #  include <neteconet/ec.h>
      46  # endif
      47  # ifdef HAVE_NETIPX_IPX_H
      48  #  include <netipx/ipx.h>
      49  # endif
      50  # ifdef HAVE_NETPACKET_PACKET_H
      51  #  include <netpacket/packet.h>
      52  # endif
      53  # ifdef HAVE_NETROSE_ROSE_H
      54  #  include <netrose/rose.h>
      55  # endif
      56  # ifdef HAVE_NETIUCV_IUCV_H
      57  #  include <netiucv/iucv.h>
      58  # endif
      59  
      60  int
      61  __libc_sa_len (sa_family_t af)
      62  {
      63    switch (af)
      64      {
      65  # ifdef HAVE_NETATALK_AT_H
      66      case AF_APPLETALK:
      67        return sizeof (struct sockaddr_at);
      68  # endif
      69  # ifdef HAVE_NETASH_ASH_H
      70      case AF_ASH:
      71        return sizeof (struct sockaddr_ash);
      72  # endif
      73  # ifdef HAVE_NETAX25_AX25_H
      74      case AF_AX25:
      75        return sizeof (struct sockaddr_ax25);
      76  # endif
      77  # ifdef HAVE_NETECONET_EC_H
      78      case AF_ECONET:
      79        return sizeof (struct sockaddr_ec);
      80  # endif
      81      case AF_INET:
      82        return sizeof (struct sockaddr_in);
      83      case AF_INET6:
      84        return sizeof (struct sockaddr_in6);
      85  # ifdef HAVE_NETIPX_IPX_H
      86      case AF_IPX:
      87        return sizeof (struct sockaddr_ipx);
      88  # endif
      89  # ifdef HAVE_NETIUCV_IUCV_H
      90      case AF_IUCV:
      91        return sizeof (struct sockaddr_iucv);
      92  # endif
      93      case AF_LOCAL:
      94        return sizeof (struct sockaddr_un);
      95  # ifdef HAVE_NETPACKET_PACKET_H
      96      case AF_PACKET:
      97        return sizeof (struct sockaddr_ll);
      98  # endif
      99  # ifdef HAVE_NETROSE_ROSE_H
     100      case AF_ROSE:
     101        return sizeof (struct sockaddr_rose);
     102  # endif
     103      }
     104    return 0;
     105  }
     106  libc_hidden_def (__libc_sa_len)
     107  
     108  #endif  /* Not _HAVE_SA_LEN.  */