aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2014-02-01 01:03:33 -0200
committerAlexandre Oliva <aoliva@redhat.com>2014-02-01 01:03:33 -0200
commit973f180bd5e3084367ebc75e380bfb79ec5346ba (patch)
tree385cffb9d6aa54da3a74d2052dfdefc3bd767eb7
parent8f3c25c8d9e883e5a785b43799e58b1d1fb4be6b (diff)
downloadglibc-973f180bd5e3084367ebc75e380bfb79ec5346ba.tar.xz
glibc-973f180bd5e3084367ebc75e380bfb79ec5346ba.zip
* manual/socket.texi: Document MTASC-safety properties.
-rw-r--r--ChangeLog4
-rw-r--r--manual/socket.texi569
2 files changed, 573 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 70dd3cfae1..e3df7167f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2014-02-01 Alexandre Oliva <aoliva@redhat.com>
+ * manual/socket.texi: Document MTASC-safety properties.
+
+2014-02-01 Alexandre Oliva <aoliva@redhat.com>
+
* manual/signal.texi: Document MTASC-safety properties.
2014-01-31 Alexandre Oliva <aoliva@redhat.com>
diff --git a/manual/socket.texi b/manual/socket.texi
index 4c7e623b29..6ee82010f7 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -394,6 +394,8 @@ For examples of use, see @ref{Local Socket Example}, or see @ref{Inet Example}.
@comment sys/socket.h
@comment BSD
@deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Direct syscall, except on Hurd.
The @code{bind} function assigns an address to the socket
@var{socket}. The @var{addr} and @var{length} arguments specify the
address; the detailed format of the address depends on the namespace.
@@ -442,6 +444,9 @@ Internet socket. The prototype for this function is in the header file
@comment sys/socket.h
@comment BSD
@deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsmem{/hurd}}}
+@c Direct syscall, except on Hurd, where it seems like it might leak
+@c VM if cancelled.
The @code{getsockname} function returns information about the
address of the socket @var{socket} in the locations specified by the
@var{addr} and @var{length-ptr} arguments. Note that the
@@ -501,6 +506,14 @@ interface name, including its terminating zero byte.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {unsigned int} if_nametoindex (const char *@var{ifname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c It opens a socket to use ioctl on the fd to get the index.
+@c opensock may call socket and access multiple times until it finds a
+@c socket family that works. The Linux implementation has a potential
+@c concurrency issue WRT last_type and last_family not being updated
+@c atomically, but it is harmless; the generic implementation, OTOH,
+@c takes a lock, which makes all callers AS- and AC-Unsafe.
+@c opensock @asulock @aculock @acsfd
This function yields the interface index corresponding to a particular
name. If no interface exists with the name given, it returns 0.
@end deftypefun
@@ -508,6 +521,9 @@ name. If no interface exists with the name given, it returns 0.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {char *} if_indextoname (unsigned int @var{ifindex}, char *@var{ifname})
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+@c It opens a socket with opensock to use ioctl on the fd to get the
+@c name from the index.
This function maps an interface index to its corresponding name. The
returned name is placed in the buffer pointed to by @code{ifname}, which
must be at least @code{IFNAMSIZ} bytes in length. If the index was
@@ -534,6 +550,39 @@ This is the null-terminated index name.
@comment net/if.h
@comment IPv6 basic API
@deftypefun {struct if_nameindex *} if_nameindex (void)
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@aculock{/hurd} @acsfd{} @acsmem{}}}
+@c if_nameindex @ascuheap @asulock/hurd @aculock/hurd @acsfd @acsmem
+@c [linux]
+@c netlink_open @acsfd @acsmem/hurd
+@c socket dup @acsfd
+@c memset dup ok
+@c bind dup ok
+@c netlink_close dup @acsfd
+@c getsockname dup @acsmem/hurd
+@c netlink_request @ascuheap @acsmem
+@c getpagesize dup ok
+@c malloc dup @ascuheap @acsmem
+@c netlink_sendreq ok
+@c memset dup ok
+@c sendto dup ok
+@c recvmsg dup ok
+@c memcpy dup ok
+@c free dup @ascuheap @acsmem
+@c netlink_free_handle @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c netlink_close @acsfd
+@c close dup @acsfd
+@c malloc dup @asuheap @acsmem
+@c strndup @ascuheap @acsmem
+@c if_freenameindex @ascuheap @acsmem
+@c [hurd]
+@c opensock dup @asulock @aculock @acsfd
+@c hurd_socket_server ok
+@c pfinet_siocgifconf ok
+@c malloc @ascuheap @acsmem
+@c strdup @ascuheap @acsmem
+@c ioctl dup ok
+@c free @ascuheap @acsmem
This function returns an array of @code{if_nameindex} structures, one
for every interface that is present. The end of the list is indicated
by a structure with an interface of 0 and a null name pointer. If an
@@ -546,6 +595,9 @@ use.
@comment net/if.h
@comment IPv6 basic API
@deftypefun void if_freenameindex (struct if_nameindex *@var{ptr})
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+@c if_freenameindex @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
This function frees the structure returned by an earlier call to
@code{if_nameindex}.
@end deftypefun
@@ -660,6 +712,7 @@ the file name string. This can be done using the macro @code{SUN_LEN}:
@comment sys/un.h
@comment BSD
@deftypefn {Macro} int SUN_LEN (@emph{struct sockaddr_un *} @var{ptr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
The macro computes the length of socket address in the local namespace.
@end deftypefn
@@ -1035,6 +1088,13 @@ Order}, for an explanation of network and host byte order.
@comment arpa/inet.h
@comment BSD
@deftypefun int inet_aton (const char *@var{name}, struct in_addr *@var{addr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_aton @mtslocale
+@c isdigit dup @mtslocale
+@c strtoul dup @mtslocale
+@c isascii dup @mtslocale
+@c isspace dup @mtslocale
+@c htonl dup ok
This function converts the IPv4 Internet host address @var{name}
from the standard numbers-and-dots notation into binary data and stores
it in the @code{struct in_addr} that @var{addr} points to.
@@ -1044,6 +1104,9 @@ it in the @code{struct in_addr} that @var{addr} points to.
@comment arpa/inet.h
@comment BSD
@deftypefun {uint32_t} inet_addr (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_addr @mtslocale
+@c inet_aton dup @mtslocale
This function converts the IPv4 Internet host address @var{name} from the
standard numbers-and-dots notation into binary data. If the input is
not valid, @code{inet_addr} returns @code{INADDR_NONE}. This is an
@@ -1056,6 +1119,12 @@ indicate error return.
@comment arpa/inet.h
@comment BSD
@deftypefun {uint32_t} inet_network (const char *@var{name})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_network @mtslocale
+@c isdigit dup @mtslocale
+@c isxdigit dup @mtslocale
+@c tolower dup @mtslocale
+@c isspace dup @mtslocale
This function extracts the network number from the address @var{name},
given in the standard numbers-and-dots notation. The returned address is
in host order. If the input is not valid, @code{inet_network} returns
@@ -1069,6 +1138,10 @@ anymore.
@comment arpa/inet.h
@comment BSD
@deftypefun {char *} inet_ntoa (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asurace{}}@acsafe{}}
+@c inet_ntoa @mtslocale @asurace
+@c writes to a thread-local static buffer
+@c snprintf @mtslocale [no @ascuheap or @acsmem]
This function converts the IPv4 Internet host address @var{addr} to a
string in the standard numbers-and-dots notation. The return value is
a pointer into a statically-allocated buffer. Subsequent calls will
@@ -1087,6 +1160,9 @@ addresses.
@comment arpa/inet.h
@comment BSD
@deftypefun {struct in_addr} inet_makeaddr (uint32_t @var{net}, uint32_t @var{local})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_makeaddr ok
+@c htonl dup ok
This function makes an IPv4 Internet host address by combining the network
number @var{net} with the local-address-within-network number
@var{local}.
@@ -1095,6 +1171,11 @@ number @var{net} with the local-address-within-network number
@comment arpa/inet.h
@comment BSD
@deftypefun uint32_t inet_lnaof (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_lnaof ok
+@c ntohl dup ok
+@c IN_CLASSA ok
+@c IN_CLASSB ok
This function returns the local-address-within-network part of the
Internet host address @var{addr}.
@@ -1106,6 +1187,11 @@ anymore.
@comment arpa/inet.h
@comment BSD
@deftypefun uint32_t inet_netof (struct in_addr @var{addr})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c inet_netof ok
+@c ntohl dup ok
+@c IN_CLASSA ok
+@c IN_CLASSB ok
This function returns the network number part of the Internet host
address @var{addr}.
@@ -1117,6 +1203,16 @@ anymore.
@comment arpa/inet.h
@comment IPv6 basic API
@deftypefun int inet_pton (int @var{af}, const char *@var{cp}, void *@var{buf})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_pton @mtslocale
+@c inet_pton4 ok
+@c memcpy dup ok
+@c inet_pton6 @mtslocale
+@c memset dup ok
+@c tolower dup @mtslocale
+@c strchr dup ok
+@c inet_pton4 dup ok
+@c memcpy dup ok
This function converts an Internet address (either IPv4 or IPv6) from
presentation (textual) to network (binary) format. @var{af} should be
either @code{AF_INET} or @code{AF_INET6}, as appropriate for the type of
@@ -1128,6 +1224,16 @@ responsibility to make sure the buffer is large enough.
@comment arpa/inet.h
@comment IPv6 basic API
@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, socklen_t @var{len})
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+@c inet_ntop @mtslocale
+@c inet_ntop4 @mtslocale
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem]
+@c strcpy dup ok
+@c inet_ntop6 @mtslocale
+@c memset dup ok
+@c inet_ntop4 dup @mtslocale
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem]
+@c strcpy dup ok
This function converts an Internet address (either IPv4 or IPv6) from
network (binary) to presentation (textual) form. @var{af} should be
either @code{AF_INET} or @code{AF_INET6}, as appropriate. @var{cp} is a
@@ -1211,6 +1317,71 @@ need to save it across calls. You can also use @code{getaddrinfo} and
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostbyname (const char *@var{name})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname @mtasurace:hostbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c nss_hostname_digits_dots @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_maybe_init(!preinit) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_iclose @acsuheap @acsmem @acsfd
+@c close_not_cancel_no_status dup @acsfd
+@c free dup @acsuheap @acsmem
+@c res_vinit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_randomid ok
+@c getpid dup ok
+@c getenv dup @mtsenv
+@c strncpy dup ok
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no concurrent uses]
+@c fgets_unlocked dup ok [no concurrent uses]
+@c MATCH ok
+@c strncmp dup ok
+@c strpbrk dup ok
+@c strchr dup ok
+@c inet_aton dup @mtslocale
+@c htons dup
+@c inet_pton dup @mtslocale
+@c malloc dup @ascuheap @acsmem
+@c IN6_IS_ADDR_LINKLOCAL ok
+@c htonl dup ok
+@c IN6_IS_ADDR_MC_LINKLOCAL ok
+@c if_nametoindex dup @asulock @aculock @acsfd
+@c strtoul dup @mtslocale
+@c ISSORTMASK ok
+@c strchr dup ok
+@c isascii dup @mtslocale
+@c isspace dup @mtslocale
+@c net_mask ok
+@c ntohl dup ok
+@c IN_CLASSA dup ok
+@c htonl dup ok
+@c IN_CLASSB dup ok
+@c res_setoptions @mtslocale
+@c strncmp dup ok
+@c atoi dup @mtslocale
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+@c inet_makeaddr dup ok
+@c gethostname dup ok
+@c strcpy dup ok
+@c rawmemchr dup ok
+@c res_ninit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_vinit dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c isdigit dup @mtslocale
+@c isxdigit dup @mtslocale
+@c strlen dup ok
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c memset dup ok
+@c inet_aton dup @mtslocale
+@c inet_pton dup @mtslocale
+@c strcpy dup ok
+@c memcpy dup ok
+@c strchr dup ok
+@c gethostbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno ok
The @code{gethostbyname} function returns information about the host
named @var{name}. If the lookup fails, it returns a null pointer.
@end deftypefun
@@ -1218,6 +1389,16 @@ named @var{name}. If the lookup fails, it returns a null pointer.
@comment netdb.h
@comment IPv6 Basic API
@deftypefun {struct hostent *} gethostbyname2 (const char *@var{name}, int @var{af})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname2} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname2 @mtasurace:hostbyname2 @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c gethostbyname2_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno dup ok
The @code{gethostbyname2} function is like @code{gethostbyname}, but
allows the caller to specify the desired address family (e.g.@:
@code{AF_INET} or @code{AF_INET6}) of the result.
@@ -1226,6 +1407,15 @@ allows the caller to specify the desired address family (e.g.@:
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostbyaddr (const void *@var{addr}, socklen_t @var{length}, int @var{format})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyaddr} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyaddr @mtasurace:hostbyaddr @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c malloc dup @ascuheap @acsmem
+@c gethostbyaddr_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c set_h_errno dup ok
The @code{gethostbyaddr} function returns information about the host
with Internet address @var{addr}. The parameter @var{addr} is not
really a pointer to char - it can be a pointer to an IPv4 or an IPv6
@@ -1282,6 +1472,76 @@ used in this context.
@comment netdb.h
@comment GNU
@deftypefun int gethostbyname_r (const char *restrict @var{name}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nscd_gethostbyname_r @mtsenv @ascuheap @acsfd @acsmem
+@c nscd_gethst_r @mtsenv @ascuheap @acsfd @acsmem
+@c getenv dup @mtsenv
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem
+@c nscd_cache_search dup ok
+@c memcpy dup ok
+@c nscd_open_socket dup @acsfd
+@c readvall dup ok
+@c readall dup ok
+@c close_not_cancel_no_status dup @acsfd
+@c nscd_drop_map_ref dup @ascuheap @acsmem
+@c nscd_unmap dup @ascuheap @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c res_hconf.c:do_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c memset dup ok
+@c getenv dup @mtsenv
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c fsetlocking dup ok [no concurrent uses]
+@c fgets_unlocked dup ok [no concurrent uses]
+@c strchrnul dup ok
+@c res_hconf.c:parse_line @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c skip_ws dup @mtslocale
+@c skip_string dup @mtslocale
+@c strncasecmp dup @mtslocale
+@c strlen dup ok
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c arg_trimdomain_list dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c arg_spoof dup @mtslocale
+@c arg_bool dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c isspace dup @mtslocale
+@c fclose dup @ascuheap @asulock @acsmem @acsfd @aculock
+@c arg_spoof @mtslocale
+@c skip_string @mtslocale
+@c isspace dup @mtslocale
+@c strncasecmp dup @mtslocale
+@c arg_bool @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c strncasecmp dup @mtslocale
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c arg_trimdomain_list @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
+@c skip_string dup @mtslocale
+@c asprintf dup @mtslocale @ascuheap @acsmem
+@c fxprintf dup @asucorrupt @aculock @acucorrupt
+@c free dup @ascuheap @acsmem
+@c strndup dup @ascuheap @acsmem
+@c skip_ws @mtslocale
+@c isspace dup @mtslocale
+@c nss_hosts_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyname_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs @asulock @ascuheap @aculock @acsmem @acsfd
+@c socket dup @acsfd
+@c libc_lock_lock dup @asulock @aculock
+@c ifreq @ascuheap @acsmem
+@c malloc dup @ascuheap @acsmem
+@c if_nextreq dup ok
+@c ioctl dup ok
+@c realloc dup @ascuheap @acsmem
+@c if_freereq dup @acsmem
+@c libc_lock_unlock dup @aculock
+@c close dup @acsfd
The @code{gethostbyname_r} function returns information about the host
named @var{name}. The caller must pass a pointer to an object of type
@code{struct hostent} in the @var{result_buf} parameter. In addition
@@ -1337,6 +1597,17 @@ gethostname (char *host)
@comment netdb.h
@comment GNU
@deftypefun int gethostbyname2_r (const char *@var{name}, int @var{af}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyname2_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c nscd_gethostbyname2_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyname2_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
The @code{gethostbyname2_r} function is like @code{gethostbyname_r}, but
allows the caller to specify the desired address family (e.g.@:
@code{AF_INET} or @code{AF_INET6}) for the result.
@@ -1345,6 +1616,21 @@ allows the caller to specify the desired address family (e.g.@:
@comment netdb.h
@comment GNU
@deftypefun int gethostbyaddr_r (const void *@var{addr}, socklen_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
+@c gethostbyaddr_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
+@c memcmp dup ok
+@c nscd_gethostbyaddr_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.l -> _nss_*_gethostbyaddr_r @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
+@c res_hconf_trim_domains @mtslocale
+@c res_hconf_trim_domain @mtslocale
+@c strlen dup ok
+@c strcasecmp dup @mtslocale
The @code{gethostbyaddr_r} function returns information about the host
with Internet address @var{addr}. The parameter @var{addr} is not
really a pointer to char - it can be a pointer to an IPv4 or an IPv6
@@ -1367,6 +1653,18 @@ when using these functions because they are not reentrant.
@comment netdb.h
@comment BSD
@deftypefun void sethostent (int @var{stayopen})
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c sethostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_setent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c set_h_errno dup ok
+@c setup(nss_hosts_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *lookup_fct = nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock dup @aculock
This function opens the hosts database to begin scanning it. You can
then call @code{gethostent} to read the entries.
@@ -1382,6 +1680,27 @@ reopening the database for each call.
@comment netdb.h
@comment BSD
@deftypefun {struct hostent *} gethostent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtasurace{:hostentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c gethostent @mtasurace:hostent @mtasurace:hostentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent(gethostent_r) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c malloc dup @ascuheap @acsmem
+@c *func = gethostent_r dup @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c realloc dup @ascuheap @acsmem
+@c free dup @ascuheap @acsmem
+@c libc_lock_unlock dup @aculock
+@c
+@c gethostent_r @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock dup @asulock @aculock
+@c nss_getent_r(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_hosts_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *sfct.f @mtasurace:hostent @ascuplugin
+@c libc_lock_unlock dup @aculock
+
This function returns the next entry in the hosts database. It
returns a null pointer if there are no more entries.
@end deftypefun
@@ -1389,6 +1708,15 @@ returns a null pointer if there are no more entries.
@comment netdb.h
@comment BSD
@deftypefun void endhostent (void)
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+@c endhostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_lock @asulock @aculock
+@c nss_endent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c *fct.f @mtasurace:hostent @ascuplugin
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+@c libc_lock_unlock @