1/* Copyright (C) 1997-2025 Free Software Foundation, Inc.
  2   This file is part of the GNU C Library.
  3
  4   The GNU C Library is free software; you can redistribute it and/or
  5   modify it under the terms of the GNU Lesser General Public
  6   License as published by the Free Software Foundation; either
  7   version 2.1 of the License, or (at your option) any later version.
  8
  9   The GNU C Library is distributed in the hope that it will be useful,
 10   but WITHOUT ANY WARRANTY; without even the implied warranty of
 11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 12   Lesser General Public License for more details.
 13
 14   You should have received a copy of the GNU Lesser General Public
 15   License along with the GNU C Library; if not, see
 16   <https://www.gnu.org/licenses/>.  */
 17
 18#ifndef _ARPA_INET_H
 19#define	_ARPA_INET_H	1
 20
 21#include <features.h>
 22#include <netinet/in.h>		/* To define `struct in_addr'.  */
 23
 24/* Type for length arguments in socket calls.  */
 25#ifndef __socklen_t_defined
 26typedef __socklen_t socklen_t;
 27# define __socklen_t_defined
 28#endif
 29
 30__BEGIN_DECLS
 31
 32/* Convert Internet host address from numbers-and-dots notation in CP
 33   into binary data in network byte order.  */
 34extern in_addr_t inet_addr (const char *__cp) __THROW;
 35
 36/* Return the local host address part of the Internet address in IN.  */
 37extern in_addr_t inet_lnaof (struct in_addr __in) __THROW;
 38
 39/* Make Internet host address in network byte order by combining the
 40   network number NET with the local address HOST.  */
 41extern struct in_addr inet_makeaddr (in_addr_t __net, in_addr_t __host)
 42     __THROW;
 43
 44/* Return network number part of the Internet address IN.  */
 45extern in_addr_t inet_netof (struct in_addr __in) __THROW;
 46
 47/* Extract the network number in network byte order from the address
 48   in numbers-and-dots natation starting at CP.  */
 49extern in_addr_t inet_network (const char *__cp) __THROW;
 50
 51/* Convert Internet number in IN to ASCII representation.  The return value
 52   is a pointer to an internal array containing the string.  */
 53extern char *inet_ntoa (struct in_addr __in) __THROW;
 54
 55/* Convert from presentation format of an Internet number in buffer
 56   starting at CP to the binary network format and store result for
 57   interface type AF in buffer starting at BUF.  */
 58extern int inet_pton (int __af, const char *__restrict __cp,
 59		      void *__restrict __buf) __THROW;
 60
 61/* Convert a Internet address in binary network format for interface
 62   type AF in buffer starting at CP to presentation form and place
 63   result in buffer of length LEN astarting at BUF.  */
 64extern const char *inet_ntop (int __af, const void *__restrict __cp,
 65			      char *__restrict __buf, socklen_t __len)
 66     __THROW;
 67
 68
 69/* The following functions are not part of XNS 5.2.  */
 70#ifdef __USE_MISC
 71/* Convert Internet host address from numbers-and-dots notation in CP
 72   into binary data and store the result in the structure INP.  */
 73extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW;
 74
 75/* Format a network number NET into presentation format and place result
 76   in buffer starting at BUF with length of LEN bytes.  */
 77extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW
 78  __attribute_deprecated_msg__ ("Use inet_ntop instead");
 79
 80/* Convert network number for interface type AF in buffer starting at
 81   CP to presentation format.  The result will specify BITS bits of
 82   the number.  */
 83extern char *inet_net_ntop (int __af, const void *__cp, int __bits,
 84			    char *__buf, size_t __len) __THROW;
 85
 86/* Convert network number for interface type AF from presentation in
 87   buffer starting at CP to network format and store result int
 88   buffer starting at BUF of size LEN.  */
 89extern int inet_net_pton (int __af, const char *__cp,
 90			  void *__buf, size_t __len) __THROW;
 91
 92/* Convert ASCII representation in hexadecimal form of the Internet
 93   address to binary form and place result in buffer of length LEN
 94   starting at BUF.  */
 95extern unsigned int inet_nsap_addr (const char *__cp,
 96				    unsigned char *__buf, int __len) __THROW;
 97
 98/* Convert internet address in binary form in LEN bytes starting at CP
 99   a presentation form and place result in BUF.  */
100extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
101			     char *__buf) __THROW;
102#endif
103
104// zig patch: inet was fortified in glibc 2.42
105#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 42) || __GLIBC__ > 2
106#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
107/* Include functions with security checks.  */
108#  include <bits/inet-fortified.h>
109#endif
110#endif
111
112__END_DECLS
113
114#endif /* arpa/inet.h */