xref: /aosp_15_r20/bionic/libc/dns/include/hostent.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*	$NetBSD: hostent.h,v 1.2 2013/08/27 09:56:12 christos Exp $	*/
2*8d67ca89SAndroid Build Coastguard Worker 
3*8d67ca89SAndroid Build Coastguard Worker /*-
4*8d67ca89SAndroid Build Coastguard Worker  * Copyright (c) 2013 The NetBSD Foundation, Inc.
5*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
6*8d67ca89SAndroid Build Coastguard Worker  *
7*8d67ca89SAndroid Build Coastguard Worker  * This code is derived from software contributed to The NetBSD Foundation
8*8d67ca89SAndroid Build Coastguard Worker  * by Christos Zoulas.
9*8d67ca89SAndroid Build Coastguard Worker  *
10*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
11*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
12*8d67ca89SAndroid Build Coastguard Worker  * are met:
13*8d67ca89SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
14*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
15*8d67ca89SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
16*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
17*8d67ca89SAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
18*8d67ca89SAndroid Build Coastguard Worker  *
19*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20*8d67ca89SAndroid Build Coastguard Worker  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21*8d67ca89SAndroid Build Coastguard Worker  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22*8d67ca89SAndroid Build Coastguard Worker  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23*8d67ca89SAndroid Build Coastguard Worker  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*8d67ca89SAndroid Build Coastguard Worker  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*8d67ca89SAndroid Build Coastguard Worker  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*8d67ca89SAndroid Build Coastguard Worker  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*8d67ca89SAndroid Build Coastguard Worker  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*8d67ca89SAndroid Build Coastguard Worker  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*8d67ca89SAndroid Build Coastguard Worker  * POSSIBILITY OF SUCH DAMAGE.
30*8d67ca89SAndroid Build Coastguard Worker  */
31*8d67ca89SAndroid Build Coastguard Worker #ifndef _DNS_NET_HOSTENT_H
32*8d67ca89SAndroid Build Coastguard Worker #define _DNS_NET_HOSTENT_H
33*8d67ca89SAndroid Build Coastguard Worker 
34*8d67ca89SAndroid Build Coastguard Worker #include <stdio.h>
35*8d67ca89SAndroid Build Coastguard Worker #include <netdb.h>
36*8d67ca89SAndroid Build Coastguard Worker #include <stdarg.h>
37*8d67ca89SAndroid Build Coastguard Worker 
38*8d67ca89SAndroid Build Coastguard Worker /*
39*8d67ca89SAndroid Build Coastguard Worker  * These are not being advertised because the interfaces are non-standard.
40*8d67ca89SAndroid Build Coastguard Worker  * There are versions by linux, aix, qnx, sun, etc. Our versions are used
41*8d67ca89SAndroid Build Coastguard Worker  * internally to provide thread safety; they mostly resemble qnx.
42*8d67ca89SAndroid Build Coastguard Worker  */
43*8d67ca89SAndroid Build Coastguard Worker void sethostent_r(FILE **);
44*8d67ca89SAndroid Build Coastguard Worker struct hostent	*netbsd_gethostent_r(FILE *, struct hostent *, char *, size_t, int *);
45*8d67ca89SAndroid Build Coastguard Worker void endhostent_r(FILE **);
46*8d67ca89SAndroid Build Coastguard Worker 
47*8d67ca89SAndroid Build Coastguard Worker /*
48*8d67ca89SAndroid Build Coastguard Worker  * The following are internal API's and are used only for testing.
49*8d67ca89SAndroid Build Coastguard Worker  */
50*8d67ca89SAndroid Build Coastguard Worker struct getnamaddr {
51*8d67ca89SAndroid Build Coastguard Worker 	struct hostent *hp;
52*8d67ca89SAndroid Build Coastguard Worker 	char *buf;
53*8d67ca89SAndroid Build Coastguard Worker 	size_t buflen;
54*8d67ca89SAndroid Build Coastguard Worker 	int *he;
55*8d67ca89SAndroid Build Coastguard Worker };
56*8d67ca89SAndroid Build Coastguard Worker 
57*8d67ca89SAndroid Build Coastguard Worker /* /etc/hosts lookup */
58*8d67ca89SAndroid Build Coastguard Worker int _hf_gethtbyaddr(void *, void *, va_list);
59*8d67ca89SAndroid Build Coastguard Worker int _hf_gethtbyname(void *, void *, va_list);
60*8d67ca89SAndroid Build Coastguard Worker 
61*8d67ca89SAndroid Build Coastguard Worker #ifdef YP
62*8d67ca89SAndroid Build Coastguard Worker /* NIS lookup */
63*8d67ca89SAndroid Build Coastguard Worker int _yp_gethtbyaddr(void *, void *, va_list);
64*8d67ca89SAndroid Build Coastguard Worker int _yp_gethtbyname(void *, void *, va_list);
65*8d67ca89SAndroid Build Coastguard Worker #endif
66*8d67ca89SAndroid Build Coastguard Worker 
67*8d67ca89SAndroid Build Coastguard Worker #define HENT_ARRAY(dst, anum, ptr, len) \
68*8d67ca89SAndroid Build Coastguard Worker 	do { \
69*8d67ca89SAndroid Build Coastguard Worker 		size_t _len = (anum + 1) * sizeof(*dst); \
70*8d67ca89SAndroid Build Coastguard Worker 		if (_len > len) \
71*8d67ca89SAndroid Build Coastguard Worker 			goto nospc; \
72*8d67ca89SAndroid Build Coastguard Worker 		dst = (void *)ptr; \
73*8d67ca89SAndroid Build Coastguard Worker 		ptr += _len; \
74*8d67ca89SAndroid Build Coastguard Worker 		len -= _len; \
75*8d67ca89SAndroid Build Coastguard Worker 	} while (/*CONSTCOND*/0)
76*8d67ca89SAndroid Build Coastguard Worker 
77*8d67ca89SAndroid Build Coastguard Worker #define HENT_COPY(dst, src, slen, ptr, len) \
78*8d67ca89SAndroid Build Coastguard Worker 	do { \
79*8d67ca89SAndroid Build Coastguard Worker 		if ((size_t)slen > len) \
80*8d67ca89SAndroid Build Coastguard Worker 			goto nospc; \
81*8d67ca89SAndroid Build Coastguard Worker 		memcpy(ptr, src, (size_t)slen); \
82*8d67ca89SAndroid Build Coastguard Worker 		dst = ptr; \
83*8d67ca89SAndroid Build Coastguard Worker 		ptr += slen; \
84*8d67ca89SAndroid Build Coastguard Worker 		len -= slen; \
85*8d67ca89SAndroid Build Coastguard Worker 	} while (/* CONSTCOND */0)
86*8d67ca89SAndroid Build Coastguard Worker 
87*8d67ca89SAndroid Build Coastguard Worker #define HENT_SCOPY(dst, src, ptr, len) \
88*8d67ca89SAndroid Build Coastguard Worker 	do { \
89*8d67ca89SAndroid Build Coastguard Worker 		size_t _len = strlen(src) + 1; \
90*8d67ca89SAndroid Build Coastguard Worker 		HENT_COPY(dst, src, _len, ptr, len); \
91*8d67ca89SAndroid Build Coastguard Worker 	} while (/* CONSTCOND */0)
92*8d67ca89SAndroid Build Coastguard Worker 
93*8d67ca89SAndroid Build Coastguard Worker #endif /* _DNS_NET_HOSTENT_H */
94