[PATCH 2/2] Adds some resolv functionality (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 18 May 2015 21:40:37 +0000 (17:40 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 4 Jun 2015 13:40:02 +0000 (09:40 -0400)
Despite removing resolv, we still need some parts of it.  Things like
inet_addr() seem fine.  Likewise, we need a netdb.h header.  resolv was
providing it; now we provide a modified version manually.  resolv was
also providing resolv.h and the arpa nameser headers.  We'll see if
resolv.h ends up being a problem, since we don't implement any of the
various functions.  Long term, we'll probably need 9ns shims that use CS
or something.

Fully rebuild your toolchain.  I suggest removing the contents of the
installation directory first, since so much stuff was removed.

tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Makefile
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser.h [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser_compat.h [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_addr.c [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_ntop.c [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_pton.c [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/netdb.h [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/resolv.h [new file with mode: 0644]
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/bitypes.h [new file with mode: 0644]
user/bsd/priv.h

index c0c5c05..f9d3d33 100644 (file)
@@ -17,6 +17,14 @@ sysdep_routines += sa_len
 endif
 sysdep_headers += sys/syscall.h sys/vcore-tls.h
 
+# We don't have the resolv subdir, but we still want parts of it.  Since we
+# lack the subdir, we need to include the C files and headers manually.
+ifeq ($(subdir),inet)
+sysdep_routines += inet_addr inet_ntop inet_pton
+endif
+sysdep_headers += netdb.h resolv.h
+sysdep_headers += arpa/nameser.h arpa/nameser_compat.h sys/bitypes.h
+
 # plan 9 conversion routines.  all C files need to be in exactly one directory.
 # stdlib seems like a reasonable place. */
 ifeq ($(subdir),stdlib)
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser.h
new file mode 100644 (file)
index 0000000..fb8513b
--- /dev/null
@@ -0,0 +1,535 @@
+/*
+ * Copyright (c) 1983, 1989, 1993
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     $BINDId: nameser.h,v 8.37 2000/03/30 21:16:49 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_H_
+#define _ARPA_NAMESER_H_
+
+/*! \file */
+
+#define BIND_4_COMPAT
+
+#include <sys/param.h>
+#if (!defined(BSD)) || (BSD < 199306)
+# include <sys/bitypes.h>
+#else
+# include <sys/types.h>
+#endif
+#include <sys/cdefs.h>
+
+/*%
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__NAMESER > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your libbind.a
+ * contains a new enough lib/nameser/ to support the feature you need.
+ */
+
+#define __NAMESER      19991006        /*%< New interface version stamp. */
+/*
+ * Define constants based on RFC 883, RFC 1034, RFC 1035
+ */
+#define NS_PACKETSZ    512     /*%< default UDP packet size */
+#define NS_MAXDNAME    1025    /*%< maximum domain name */
+#define NS_MAXMSG      65535   /*%< maximum message size */
+#define NS_MAXCDNAME   255     /*%< maximum compressed domain name */
+#define NS_MAXLABEL    63      /*%< maximum length of domain label */
+#define NS_HFIXEDSZ    12      /*%< #/bytes of fixed data in header */
+#define NS_QFIXEDSZ    4       /*%< #/bytes of fixed data in query */
+#define NS_RRFIXEDSZ   10      /*%< #/bytes of fixed data in r record */
+#define NS_INT32SZ     4       /*%< #/bytes of data in a u_int32_t */
+#define NS_INT16SZ     2       /*%< #/bytes of data in a u_int16_t */
+#define NS_INT8SZ      1       /*%< #/bytes of data in a u_int8_t */
+#define NS_INADDRSZ    4       /*%< IPv4 T_A */
+#define NS_IN6ADDRSZ   16      /*%< IPv6 T_AAAA */
+#define NS_CMPRSFLGS   0xc0    /*%< Flag bits indicating name compression. */
+#define NS_DEFAULTPORT 53      /*%< For both TCP and UDP. */
+/*
+ * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord()
+ * in synch with it.
+ */
+typedef enum __ns_sect {
+       ns_s_qd = 0,            /*%< Query: Question. */
+       ns_s_zn = 0,            /*%< Update: Zone. */
+       ns_s_an = 1,            /*%< Query: Answer. */
+       ns_s_pr = 1,            /*%< Update: Prerequisites. */
+       ns_s_ns = 2,            /*%< Query: Name servers. */
+       ns_s_ud = 2,            /*%< Update: Update. */
+       ns_s_ar = 3,            /*%< Query|Update: Additional records. */
+       ns_s_max = 4
+} ns_sect;
+
+/*%
+ * This is a message handle.  It is caller allocated and has no dynamic data.
+ * This structure is intended to be opaque to all but ns_parse.c, thus the
+ * leading _'s on the member names.  Use the accessor functions, not the _'s.
+ */
+typedef struct __ns_msg {
+       const u_char    *_msg, *_eom;
+       u_int16_t       _id, _flags, _counts[ns_s_max];
+       const u_char    *_sections[ns_s_max];
+       ns_sect         _sect;
+       int             _rrnum;
+       const u_char    *_msg_ptr;
+} ns_msg;
+
+/* Private data structure - do not use from outside library. */
+struct _ns_flagdata {  int mask, shift;  };
+extern const struct _ns_flagdata _ns_flagdata[];
+
+/* Accessor macros - this is part of the public interface. */
+
+#define ns_msg_id(handle) ((handle)._id + 0)
+#define ns_msg_base(handle) ((handle)._msg + 0)
+#define ns_msg_end(handle) ((handle)._eom + 0)
+#define ns_msg_size(handle) ((handle)._eom - (handle)._msg)
+#define ns_msg_count(handle, section) ((handle)._counts[section] + 0)
+
+/*%
+ * This is a parsed record.  It is caller allocated and has no dynamic data.
+ */
+typedef        struct __ns_rr {
+       char            name[NS_MAXDNAME];
+       u_int16_t       type;
+       u_int16_t       rr_class;
+       u_int32_t       ttl;
+       u_int16_t       rdlength;
+       const u_char *  rdata;
+} ns_rr;
+
+/* Accessor macros - this is part of the public interface. */
+#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".")
+#define ns_rr_type(rr) ((ns_type)((rr).type + 0))
+#define ns_rr_class(rr)        ((ns_class)((rr).rr_class + 0))
+#define ns_rr_ttl(rr)  ((rr).ttl + 0)
+#define ns_rr_rdlen(rr)        ((rr).rdlength + 0)
+#define ns_rr_rdata(rr)        ((rr).rdata + 0)
+
+/*%
+ * These don't have to be in the same order as in the packet flags word,
+ * and they can even overlap in some cases, but they will need to be kept
+ * in synch with ns_parse.c:ns_flagdata[].
+ */
+typedef enum __ns_flag {
+       ns_f_qr,                /*%< Question/Response. */
+       ns_f_opcode,            /*%< Operation code. */
+       ns_f_aa,                /*%< Authoritative Answer. */
+       ns_f_tc,                /*%< Truncation occurred. */
+       ns_f_rd,                /*%< Recursion Desired. */
+       ns_f_ra,                /*%< Recursion Available. */
+       ns_f_z,                 /*%< MBZ. */
+       ns_f_ad,                /*%< Authentic Data (DNSSEC). */
+       ns_f_cd,                /*%< Checking Disabled (DNSSEC). */
+       ns_f_rcode,             /*%< Response code. */
+       ns_f_max
+} ns_flag;
+
+/*%
+ * Currently defined opcodes.
+ */
+typedef enum __ns_opcode {
+       ns_o_query = 0,         /*%< Standard query. */
+       ns_o_iquery = 1,        /*%< Inverse query (deprecated/unsupported). */
+       ns_o_status = 2,        /*%< Name server status query (unsupported). */
+                               /* Opcode 3 is undefined/reserved. */
+       ns_o_notify = 4,        /*%< Zone change notification. */
+       ns_o_update = 5,        /*%< Zone update message. */
+       ns_o_max = 6
+} ns_opcode;
+
+/*%
+ * Currently defined response codes.
+ */
+typedef        enum __ns_rcode {
+       ns_r_noerror = 0,       /*%< No error occurred. */
+       ns_r_formerr = 1,       /*%< Format error. */
+       ns_r_servfail = 2,      /*%< Server failure. */
+       ns_r_nxdomain = 3,      /*%< Name error. */
+       ns_r_notimpl = 4,       /*%< Unimplemented. */
+       ns_r_refused = 5,       /*%< Operation refused. */
+       /* these are for BIND_UPDATE */
+       ns_r_yxdomain = 6,      /*%< Name exists */
+       ns_r_yxrrset = 7,       /*%< RRset exists */
+       ns_r_nxrrset = 8,       /*%< RRset does not exist */
+       ns_r_notauth = 9,       /*%< Not authoritative for zone */
+       ns_r_notzone = 10,      /*%< Zone of record different from zone section */
+       ns_r_max = 11,
+       /* The following are EDNS extended rcodes */
+       ns_r_badvers = 16,
+       /* The following are TSIG errors */
+       ns_r_badsig = 16,
+       ns_r_badkey = 17,
+       ns_r_badtime = 18
+} ns_rcode;
+
+/* BIND_UPDATE */
+typedef enum __ns_update_operation {
+       ns_uop_delete = 0,
+       ns_uop_add = 1,
+       ns_uop_max = 2
+} ns_update_operation;
+
+/*%
+ * This structure is used for TSIG authenticated messages
+ */
+struct ns_tsig_key {
+        char name[NS_MAXDNAME], alg[NS_MAXDNAME];
+        unsigned char *data;
+        int len;
+};
+typedef struct ns_tsig_key ns_tsig_key;
+
+/*%
+ * This structure is used for TSIG authenticated TCP messages
+ */
+struct ns_tcp_tsig_state {
+       int counter;
+       struct dst_key *key;
+       void *ctx;
+       unsigned char sig[NS_PACKETSZ];
+       int siglen;
+};
+typedef struct ns_tcp_tsig_state ns_tcp_tsig_state;
+
+#define NS_TSIG_FUDGE 300
+#define NS_TSIG_TCP_COUNT 100
+#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT"
+
+#define NS_TSIG_ERROR_NO_TSIG -10
+#define NS_TSIG_ERROR_NO_SPACE -11
+#define NS_TSIG_ERROR_FORMERR -12
+
+/*%
+ * Currently defined type values for resources and queries.
+ */
+typedef enum __ns_type {
+       ns_t_invalid = 0,       /*%< Cookie. */
+       ns_t_a = 1,             /*%< Host address. */
+       ns_t_ns = 2,            /*%< Authoritative server. */
+       ns_t_md = 3,            /*%< Mail destination. */
+       ns_t_mf = 4,            /*%< Mail forwarder. */
+       ns_t_cname = 5,         /*%< Canonical name. */
+       ns_t_soa = 6,           /*%< Start of authority zone. */
+       ns_t_mb = 7,            /*%< Mailbox domain name. */
+       ns_t_mg = 8,            /*%< Mail group member. */
+       ns_t_mr = 9,            /*%< Mail rename name. */
+       ns_t_null = 10,         /*%< Null resource record. */
+       ns_t_wks = 11,          /*%< Well known service. */
+       ns_t_ptr = 12,          /*%< Domain name pointer. */
+       ns_t_hinfo = 13,        /*%< Host information. */
+       ns_t_minfo = 14,        /*%< Mailbox information. */
+       ns_t_mx = 15,           /*%< Mail routing information. */
+       ns_t_txt = 16,          /*%< Text strings. */
+       ns_t_rp = 17,           /*%< Responsible person. */
+       ns_t_afsdb = 18,        /*%< AFS cell database. */
+       ns_t_x25 = 19,          /*%< X_25 calling address. */
+       ns_t_isdn = 20,         /*%< ISDN calling address. */
+       ns_t_rt = 21,           /*%< Router. */
+       ns_t_nsap = 22,         /*%< NSAP address. */
+       ns_t_nsap_ptr = 23,     /*%< Reverse NSAP lookup (deprecated). */
+       ns_t_sig = 24,          /*%< Security signature. */
+       ns_t_key = 25,          /*%< Security key. */
+       ns_t_px = 26,           /*%< X.400 mail mapping. */
+       ns_t_gpos = 27,         /*%< Geographical position (withdrawn). */
+       ns_t_aaaa = 28,         /*%< Ip6 Address. */
+       ns_t_loc = 29,          /*%< Location Information. */
+       ns_t_nxt = 30,          /*%< Next domain (security). */
+       ns_t_eid = 31,          /*%< Endpoint identifier. */
+       ns_t_nimloc = 32,       /*%< Nimrod Locator. */
+       ns_t_srv = 33,          /*%< Server Selection. */
+       ns_t_atma = 34,         /*%< ATM Address */
+       ns_t_naptr = 35,        /*%< Naming Authority PoinTeR */
+       ns_t_kx = 36,           /*%< Key Exchange */
+       ns_t_cert = 37,         /*%< Certification record */
+       ns_t_a6 = 38,           /*%< IPv6 address (deprecated, use ns_t_aaaa) */
+       ns_t_dname = 39,        /*%< Non-terminal DNAME (for IPv6) */
+       ns_t_sink = 40,         /*%< Kitchen sink (experimentatl) */
+       ns_t_opt = 41,          /*%< EDNS0 option (meta-RR) */
+       ns_t_apl = 42,          /*%< Address prefix list (RFC3123) */
+       ns_t_tkey = 249,        /*%< Transaction key */
+       ns_t_tsig = 250,        /*%< Transaction signature. */
+       ns_t_ixfr = 251,        /*%< Incremental zone transfer. */
+       ns_t_axfr = 252,        /*%< Transfer zone of authority. */
+       ns_t_mailb = 253,       /*%< Transfer mailbox records. */
+       ns_t_maila = 254,       /*%< Transfer mail agent records. */
+       ns_t_any = 255,         /*%< Wildcard match. */
+       ns_t_zxfr = 256,        /*%< BIND-specific, nonstandard. */
+       ns_t_max = 65536
+} ns_type;
+
+/* Exclusively a QTYPE? (not also an RTYPE) */
+#define        ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \
+                     (t) == ns_t_mailb || (t) == ns_t_maila)
+/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */
+#define        ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt)
+/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */
+#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t))
+#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr)
+#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \
+                      (t) == ns_t_zxfr)
+
+/*%
+ * Values for class field
+ */
+typedef enum __ns_class {
+       ns_c_invalid = 0,       /*%< Cookie. */
+       ns_c_in = 1,            /*%< Internet. */
+       ns_c_2 = 2,             /*%< unallocated/unsupported. */
+       ns_c_chaos = 3,         /*%< MIT Chaos-net. */
+       ns_c_hs = 4,            /*%< MIT Hesiod. */
+       /* Query class values which do not appear in resource records */
+       ns_c_none = 254,        /*%< for prereq. sections in update requests */
+       ns_c_any = 255,         /*%< Wildcard match. */
+       ns_c_max = 65536
+} ns_class;
+
+/* DNSSEC constants. */
+
+typedef enum __ns_key_types {
+       ns_kt_rsa = 1,          /*%< key type RSA/MD5 */
+       ns_kt_dh  = 2,          /*%< Diffie Hellman */
+       ns_kt_dsa = 3,          /*%< Digital Signature Standard (MANDATORY) */
+       ns_kt_private = 254     /*%< Private key type starts with OID */
+} ns_key_types;
+
+typedef enum __ns_cert_types {
+       cert_t_pkix = 1,        /*%< PKIX (X.509v3) */
+       cert_t_spki = 2,        /*%< SPKI */
+       cert_t_pgp  = 3,        /*%< PGP */
+       cert_t_url  = 253,      /*%< URL private type */
+       cert_t_oid  = 254       /*%< OID private type */
+} ns_cert_types;
+
+/* Flags field of the KEY RR rdata. */
+#define        NS_KEY_TYPEMASK         0xC000  /*%< Mask for "type" bits */
+#define        NS_KEY_TYPE_AUTH_CONF   0x0000  /*%< Key usable for both */
+#define        NS_KEY_TYPE_CONF_ONLY   0x8000  /*%< Key usable for confidentiality */
+#define        NS_KEY_TYPE_AUTH_ONLY   0x4000  /*%< Key usable for authentication */
+#define        NS_KEY_TYPE_NO_KEY      0xC000  /*%< No key usable for either; no key */
+/* The type bits can also be interpreted independently, as single bits: */
+#define        NS_KEY_NO_AUTH          0x8000  /*%< Key unusable for authentication */
+#define        NS_KEY_NO_CONF          0x4000  /*%< Key unusable for confidentiality */
+#define        NS_KEY_RESERVED2        0x2000  /* Security is *mandatory* if bit=0 */
+#define        NS_KEY_EXTENDED_FLAGS   0x1000  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED4        0x0800  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED5        0x0400  /*%< reserved - must be zero */
+#define        NS_KEY_NAME_TYPE        0x0300  /*%< these bits determine the type */
+#define        NS_KEY_NAME_USER        0x0000  /*%< key is assoc. with user */
+#define        NS_KEY_NAME_ENTITY      0x0200  /*%< key is assoc. with entity eg host */
+#define        NS_KEY_NAME_ZONE        0x0100  /*%< key is zone key */
+#define        NS_KEY_NAME_RESERVED    0x0300  /*%< reserved meaning */
+#define        NS_KEY_RESERVED8        0x0080  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED9        0x0040  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED10       0x0020  /*%< reserved - must be zero */
+#define        NS_KEY_RESERVED11       0x0010  /*%< reserved - must be zero */
+#define        NS_KEY_SIGNATORYMASK    0x000F  /*%< key can sign RR's of same name */
+#define        NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \
+                                 NS_KEY_RESERVED4 | \
+                                 NS_KEY_RESERVED5 | \
+                                 NS_KEY_RESERVED8 | \
+                                 NS_KEY_RESERVED9 | \
+                                 NS_KEY_RESERVED10 | \
+                                 NS_KEY_RESERVED11 )
+#define NS_KEY_RESERVED_BITMASK2 0xFFFF /*%< no bits defined here */
+/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */
+#define        NS_ALG_MD5RSA           1       /*%< MD5 with RSA */
+#define        NS_ALG_DH               2       /*%< Diffie Hellman KEY */
+#define        NS_ALG_DSA              3       /*%< DSA KEY */
+#define        NS_ALG_DSS              NS_ALG_DSA
+#define        NS_ALG_EXPIRE_ONLY      253     /*%< No alg, no security */
+#define        NS_ALG_PRIVATE_OID      254     /*%< Key begins with OID giving alg */
+/* Protocol values  */
+/* value 0 is reserved */
+#define NS_KEY_PROT_TLS         1
+#define NS_KEY_PROT_EMAIL       2
+#define NS_KEY_PROT_DNSSEC      3
+#define NS_KEY_PROT_IPSEC       4
+#define NS_KEY_PROT_ANY                255
+
+/* Signatures */
+#define        NS_MD5RSA_MIN_BITS       512    /*%< Size of a mod or exp in bits */
+#define        NS_MD5RSA_MAX_BITS      4096
+       /* Total of binary mod and exp */
+#define        NS_MD5RSA_MAX_BYTES     ((NS_MD5RSA_MAX_BITS+7/8)*2+3)
+       /* Max length of text sig block */
+#define        NS_MD5RSA_MAX_BASE64    (((NS_MD5RSA_MAX_BYTES+2)/3)*4)
+#define NS_MD5RSA_MIN_SIZE     ((NS_MD5RSA_MIN_BITS+7)/8)
+#define NS_MD5RSA_MAX_SIZE     ((NS_MD5RSA_MAX_BITS+7)/8)
+
+#define NS_DSA_SIG_SIZE         41
+#define NS_DSA_MIN_SIZE         213
+#define NS_DSA_MAX_BYTES        405
+
+/* Offsets into SIG record rdata to find various values */
+#define        NS_SIG_TYPE     0       /*%< Type flags */
+#define        NS_SIG_ALG      2       /*%< Algorithm */
+#define        NS_SIG_LABELS   3       /*%< How many labels in name */
+#define        NS_SIG_OTTL     4       /*%< Original TTL */
+#define        NS_SIG_EXPIR    8       /*%< Expiration time */
+#define        NS_SIG_SIGNED   12      /*%< Signature time */
+#define        NS_SIG_FOOT     16      /*%< Key footprint */
+#define        NS_SIG_SIGNER   18      /*%< Domain name of who signed it */
+/* How RR types are represented as bit-flags in NXT records */
+#define        NS_NXT_BITS 8
+#define        NS_NXT_BIT_SET(  n,p) (p[(n)/NS_NXT_BITS] |=  (0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS)))
+#define        NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] &   (0x80>>((n)%NS_NXT_BITS)))
+#define NS_NXT_MAX 127
+
+/*%
+ * EDNS0 extended flags and option codes, host order.
+ */
+#define NS_OPT_DNSSEC_OK        0x8000U
+#define NS_OPT_NSID            3
+
+/*%
+ * Inline versions of get/put short/long.  Pointer is advanced.
+ */
+#define NS_GET16(s, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (s) = ((u_int16_t)t_cp[0] << 8) \
+           | ((u_int16_t)t_cp[1]) \
+           ; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_GET32(l, cp) do { \
+       const u_char *t_cp = (const u_char *)(cp); \
+       (l) = ((u_int32_t)t_cp[0] << 24) \
+           | ((u_int32_t)t_cp[1] << 16) \
+           | ((u_int32_t)t_cp[2] << 8) \
+           | ((u_int32_t)t_cp[3]) \
+           ; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+#define NS_PUT16(s, cp) do { \
+       u_int16_t t_s = (u_int16_t)(s); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_s >> 8; \
+       *t_cp   = t_s; \
+       (cp) += NS_INT16SZ; \
+} while (0)
+
+#define NS_PUT32(l, cp) do { \
+       u_int32_t t_l = (u_int32_t)(l); \
+       u_char *t_cp = (u_char *)(cp); \
+       *t_cp++ = t_l >> 24; \
+       *t_cp++ = t_l >> 16; \
+       *t_cp++ = t_l >> 8; \
+       *t_cp   = t_l; \
+       (cp) += NS_INT32SZ; \
+} while (0)
+
+__BEGIN_DECLS
+int            ns_msg_getflag (ns_msg, int) __THROW;
+u_int          ns_get16 (const u_char *) __THROW;
+u_long         ns_get32 (const u_char *) __THROW;
+void           ns_put16 (u_int, u_char *) __THROW;
+void           ns_put32 (u_long, u_char *) __THROW;
+int            ns_initparse (const u_char *, int, ns_msg *) __THROW;
+int            ns_skiprr (const u_char *, const u_char *, ns_sect, int)
+     __THROW;
+int            ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __THROW;
+int            ns_sprintrr (const ns_msg *, const ns_rr *,
+                            const char *, const char *, char *, size_t)
+     __THROW;
+int            ns_sprintrrf (const u_char *, size_t, const char *,
+                             ns_class, ns_type, u_long, const u_char *,
+                             size_t, const char *, const char *,
+                             char *, size_t) __THROW;
+int            ns_format_ttl (u_long, char *, size_t) __THROW;
+int            ns_parse_ttl (const char *, u_long *) __THROW;
+u_int32_t      ns_datetosecs (const char *, int *) __THROW;
+int            ns_name_ntol (const u_char *, u_char *, size_t) __THROW;
+int            ns_name_ntop (const u_char *, char *, size_t) __THROW;
+int            ns_name_pton (const char *, u_char *, size_t) __THROW;
+int            ns_name_unpack (const u_char *, const u_char *,
+                               const u_char *, u_char *, size_t) __THROW;
+int            ns_name_pack (const u_char *, u_char *, int,
+                             const u_char **, const u_char **) __THROW;
+int            ns_name_uncompress (const u_char *, const u_char *,
+                                   const u_char *, char *, size_t) __THROW;
+int            ns_name_compress (const char *, u_char *, size_t,
+                                 const u_char **, const u_char **) __THROW;
+int            ns_name_skip (const u_char **, const u_char *) __THROW;
+void           ns_name_rollback (const u_char *, const u_char **,
+                                 const u_char **) __THROW;
+int            ns_sign (u_char *, int *, int, int, void *,
+                        const u_char *, int, u_char *, int *, time_t) __THROW;
+int            ns_sign2 (u_char *, int *, int, int, void *,
+                         const u_char *, int, u_char *, int *, time_t,
+                         u_char **, u_char **) __THROW;
+int            ns_sign_tcp (u_char *, int *, int, int,
+                            ns_tcp_tsig_state *, int) __THROW;
+int            ns_sign_tcp2 (u_char *, int *, int, int,
+                             ns_tcp_tsig_state *, int,
+                             u_char **, u_char **) __THROW;
+int            ns_sign_tcp_init (void *, const u_char *, int,
+                                 ns_tcp_tsig_state *) __THROW;
+u_char         *ns_find_tsig (u_char *, u_char *) __THROW;
+int            ns_verify (u_char *, int *, void *, const u_char *, int,
+                          u_char *, int *, time_t *, int) __THROW;
+int            ns_verify_tcp (u_char *, int *, ns_tcp_tsig_state *, int)
+     __THROW;
+int            ns_verify_tcp_init (void *, const u_char *, int,
+                                   ns_tcp_tsig_state *) __THROW;
+int            ns_samedomain (const char *, const char *) __THROW;
+int            ns_subdomain (const char *, const char *) __THROW;
+int            ns_makecanon (const char *, char *, size_t) __THROW;
+int            ns_samename (const char *, const char *) __THROW;
+__END_DECLS
+
+#ifdef BIND_4_COMPAT
+#include <arpa/nameser_compat.h>
+#endif
+
+#endif /* !_ARPA_NAMESER_H_ */
+/*! \file */
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser_compat.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/arpa/nameser_compat.h
new file mode 100644 (file)
index 0000000..d59c9e4
--- /dev/null
@@ -0,0 +1,187 @@
+/* Copyright (c) 1983, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*%
+ *      from nameser.h 8.1 (Berkeley) 6/2/93
+ *     $BINDId: nameser_compat.h,v 8.11 1999/01/02 08:00:58 vixie Exp $
+ */
+
+#ifndef _ARPA_NAMESER_COMPAT_
+#define        _ARPA_NAMESER_COMPAT_
+
+#define        __BIND          19950621        /*%< (DEAD) interface version stamp. */
+
+#include <endian.h>
+
+/*%
+ * Structure for query header.  The order of the fields is machine- and
+ * compiler-dependent, depending on the byte/bit order and the layout
+ * of bit fields.  We use bit fields only in int variables, as this
+ * is all ANSI requires.  This requires a somewhat confusing rearrangement.
+ */
+
+typedef struct {
+       unsigned        id :16;         /*%< query identification number */
+#if BYTE_ORDER == BIG_ENDIAN
+                       /* fields in third byte */
+       unsigned        qr: 1;          /*%< response flag */
+       unsigned        opcode: 4;      /*%< purpose of message */
+       unsigned        aa: 1;          /*%< authoritive answer */
+       unsigned        tc: 1;          /*%< truncated message */
+       unsigned        rd: 1;          /*%< recursion desired */
+                       /* fields in fourth byte */
+       unsigned        ra: 1;          /*%< recursion available */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        rcode :4;       /*%< response code */
+#endif
+#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
+                       /* fields in third byte */
+       unsigned        rd :1;          /*%< recursion desired */
+       unsigned        tc :1;          /*%< truncated message */
+       unsigned        aa :1;          /*%< authoritive answer */
+       unsigned        opcode :4;      /*%< purpose of message */
+       unsigned        qr :1;          /*%< response flag */
+                       /* fields in fourth byte */
+       unsigned        rcode :4;       /*%< response code */
+       unsigned        cd: 1;          /*%< checking disabled by resolver */
+       unsigned        ad: 1;          /*%< authentic data from named */
+       unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+       unsigned        ra :1;          /*%< recursion available */
+#endif
+                       /* remaining bytes */
+       unsigned        qdcount :16;    /*%< number of question entries */
+       unsigned        ancount :16;    /*%< number of answer entries */
+       unsigned        nscount :16;    /*%< number of authority entries */
+       unsigned        arcount :16;    /*%< number of resource entries */
+} HEADER;
+
+#define PACKETSZ       NS_PACKETSZ
+#define MAXDNAME       NS_MAXDNAME
+#define MAXCDNAME      NS_MAXCDNAME
+#define MAXLABEL       NS_MAXLABEL
+#define        HFIXEDSZ        NS_HFIXEDSZ
+#define QFIXEDSZ       NS_QFIXEDSZ
+#define RRFIXEDSZ      NS_RRFIXEDSZ
+#define        INT32SZ         NS_INT32SZ
+#define        INT16SZ         NS_INT16SZ
+#define INT8SZ         NS_INT8SZ
+#define        INADDRSZ        NS_INADDRSZ
+#define        IN6ADDRSZ       NS_IN6ADDRSZ
+#define        INDIR_MASK      NS_CMPRSFLGS
+#define NAMESERVER_PORT        NS_DEFAULTPORT
+
+#define S_ZONE         ns_s_zn
+#define S_PREREQ       ns_s_pr
+#define S_UPDATE       ns_s_ud
+#define S_ADDT         ns_s_ar
+
+#define QUERY          ns_o_query
+#define IQUERY         ns_o_iquery
+#define STATUS         ns_o_status
+#define        NS_NOTIFY_OP    ns_o_notify
+#define        NS_UPDATE_OP    ns_o_update
+
+#define NOERROR                ns_r_noerror
+#define FORMERR                ns_r_formerr
+#define SERVFAIL       ns_r_servfail
+#define NXDOMAIN       ns_r_nxdomain
+#define NOTIMP         ns_r_notimpl
+#define REFUSED                ns_r_refused
+#define YXDOMAIN       ns_r_yxdomain
+#define YXRRSET                ns_r_yxrrset
+#define NXRRSET                ns_r_nxrrset
+#define NOTAUTH                ns_r_notauth
+#define NOTZONE                ns_r_notzone
+/*#define BADSIG               ns_r_badsig*/
+/*#define BADKEY               ns_r_badkey*/
+/*#define BADTIME              ns_r_badtime*/
+
+
+#define DELETE         ns_uop_delete
+#define ADD            ns_uop_add
+
+#define T_A            ns_t_a
+#define T_NS           ns_t_ns
+#define T_MD           ns_t_md
+#define T_MF           ns_t_mf
+#define T_CNAME                ns_t_cname
+#define T_SOA          ns_t_soa
+#define T_MB           ns_t_mb
+#define T_MG           ns_t_mg
+#define T_MR           ns_t_mr
+#define T_NULL         ns_t_null
+#define T_WKS          ns_t_wks
+#define T_PTR          ns_t_ptr
+#define T_HINFO                ns_t_hinfo
+#define T_MINFO                ns_t_minfo
+#define T_MX           ns_t_mx
+#define T_TXT          ns_t_txt
+#define        T_RP            ns_t_rp
+#define T_AFSDB                ns_t_afsdb
+#define T_X25          ns_t_x25
+#define T_ISDN         ns_t_isdn
+#define T_RT           ns_t_rt
+#define T_NSAP         ns_t_nsap
+#define T_NSAP_PTR     ns_t_nsap_ptr
+#define        T_SIG           ns_t_sig
+#define        T_KEY           ns_t_key
+#define        T_PX            ns_t_px
+#define        T_GPOS          ns_t_gpos
+#define        T_AAAA          ns_t_aaaa
+#define        T_LOC           ns_t_loc
+#define        T_NXT           ns_t_nxt
+#define        T_EID           ns_t_eid
+#define        T_NIMLOC        ns_t_nimloc
+#define        T_SRV           ns_t_srv
+#define T_ATMA         ns_t_atma
+#define T_NAPTR                ns_t_naptr
+#define T_A6           ns_t_a6
+#define T_DNAME                ns_t_dname
+#define        T_TSIG          ns_t_tsig
+#define        T_IXFR          ns_t_ixfr
+#define T_AXFR         ns_t_axfr
+#define T_MAILB                ns_t_mailb
+#define T_MAILA                ns_t_maila
+#define T_ANY          ns_t_any
+
+#define C_IN           ns_c_in
+#define C_CHAOS                ns_c_chaos
+#define C_HS           ns_c_hs
+/* BIND_UPDATE */
+#define C_NONE         ns_c_none
+#define C_ANY          ns_c_any
+
+#define        GETSHORT                NS_GET16
+#define        GETLONG                 NS_GET32
+#define        PUTSHORT                NS_PUT16
+#define        PUTLONG                 NS_PUT32
+
+#endif /* _ARPA_NAMESER_COMPAT_ */
+/*! \file */
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_addr.c b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_addr.c
new file mode 100644 (file)
index 0000000..27248af
--- /dev/null
@@ -0,0 +1,229 @@
+/* AKAROS_PORT: copied from resolv/, no changes.  We don't build resolv, but we
+ * still needed this file. */
+
+/*
+ * Copyright (c) 1983, 1990, 1993
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char sccsid[] = "@(#)inet_addr.c  8.1 (Berkeley) 6/17/93";
+static const char rcsid[] = "$BINDId: inet_addr.c,v 8.11 1999/10/13 16:39:25 vixie Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/types.h>
+#include <sys/param.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <ctype.h>
+
+#ifdef _LIBC
+# include <endian.h>
+# include <stdint.h>
+# include <stdlib.h>
+# include <limits.h>
+# include <errno.h>
+#endif
+
+/*
+ * Ascii internet address interpretation routine.
+ * The value returned is in network order.
+ */
+in_addr_t
+inet_addr(const char *cp) {
+       struct in_addr val;
+
+       if (__inet_aton(cp, &val))
+               return (val.s_addr);
+       return (INADDR_NONE);
+}
+
+/*
+ * Check whether "cp" is a valid ascii representation
+ * of an Internet address and convert to a binary address.
+ * Returns 1 if the address is valid, 0 if not.
+ * This replaces inet_addr, the return value from which
+ * cannot distinguish between failure and a local broadcast address.
+ */
+int
+__inet_aton(const char *cp, struct in_addr *addr)
+{
+       static const in_addr_t max[4] = { 0xffffffff, 0xffffff, 0xffff, 0xff };
+       in_addr_t val;
+#ifndef _LIBC
+       int base;
+#endif
+       char c;
+       union iaddr {
+         uint8_t bytes[4];
+         uint32_t word;
+       } res;
+       uint8_t *pp = res.bytes;
+       int digit;
+
+#ifdef _LIBC
+       int saved_errno = errno;
+       __set_errno (0);
+#endif
+
+       res.word = 0;
+
+       c = *cp;
+       for (;;) {
+               /*
+                * Collect number up to ``.''.
+                * Values are specified as for C:
+                * 0x=hex, 0=octal, isdigit=decimal.
+                */
+               if (!isdigit(c))
+                       goto ret_0;
+#ifdef _LIBC
+               {
+                       char *endp;
+                       unsigned long ul = strtoul (cp, (char **) &endp, 0);
+                       if (ul == ULONG_MAX && errno == ERANGE)
+                               goto ret_0;
+                       if (ul > 0xfffffffful)
+                               goto ret_0;
+                       val = ul;
+                       digit = cp != endp;
+                       cp = endp;
+               }
+               c = *cp;
+#else
+               val = 0; base = 10; digit = 0;
+               if (c == '0') {
+                       c = *++cp;
+                       if (c == 'x' || c == 'X')
+                               base = 16, c = *++cp;
+                       else {
+                               base = 8;
+                               digit = 1 ;
+                       }
+               }
+               for (;;) {
+                       if (isascii(c) && isdigit(c)) {
+                               if (base == 8 && (c == '8' || c == '9'))
+                                       return (0);
+                               val = (val * base) + (c - '0');
+                               c = *++cp;
+                               digit = 1;
+                       } else if (base == 16 && isascii(c) && isxdigit(c)) {
+                               val = (val << 4) |
+                                       (c + 10 - (islower(c) ? 'a' : 'A'));
+                               c = *++cp;
+                               digit = 1;
+                       } else
+                               break;
+               }
+#endif
+               if (c == '.') {
+                       /*
+                        * Internet format:
+                        *      a.b.c.d
+                        *      a.b.c   (with c treated as 16 bits)
+                        *      a.b     (with b treated as 24 bits)
+                        */
+                       if (pp > res.bytes + 2 || val > 0xff)
+                               goto ret_0;
+                       *pp++ = val;
+                       c = *++cp;
+               } else
+                       break;
+       }
+       /*
+        * Check for trailing characters.
+        */
+       if (c != '\0' && (!isascii(c) || !isspace(c)))
+               goto ret_0;
+       /*
+        * Did we get a valid digit?
+        */
+       if (!digit)
+               goto ret_0;
+
+       /* Check whether the last part is in its limits depending on
+          the number of parts in total.  */
+       if (val > max[pp - res.bytes])
+         goto ret_0;
+
+       if (addr != NULL)
+               addr->s_addr = res.word | htonl (val);
+
+#ifdef _LIBC
+       __set_errno (saved_errno);
+#endif
+       return (1);
+
+ret_0:
+#ifdef _LIBC
+       __set_errno (saved_errno);
+#endif
+       return (0);
+}
+weak_alias (__inet_aton, inet_aton)
+libc_hidden_def (__inet_aton)
+libc_hidden_weak (inet_aton)
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_ntop.c b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_ntop.c
new file mode 100644 (file)
index 0000000..e633903
--- /dev/null
@@ -0,0 +1,206 @@
+/* AKAROS_PORT: copied from resolv/, no changes.  We don't build resolv, but we
+ * still needed this file. */
+
+/*
+ * Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$BINDId: inet_ntop.c,v 1.8 1999/10/13 16:39:28 vixie Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <arpa/nameser.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifdef SPRINTF_CHAR
+# define SPRINTF(x) strlen(sprintf/**/x)
+#else
+# define SPRINTF(x) ((size_t)sprintf x)
+#endif
+
+/*
+ * WARNING: Don't even consider trying to compile this on a system where
+ * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
+ */
+
+static const char *inet_ntop4 (const u_char *src, char *dst, socklen_t size)
+     internal_function;
+static const char *inet_ntop6 (const u_char *src, char *dst, socklen_t size)
+     internal_function;
+
+/* char *
+ * inet_ntop(af, src, dst, size)
+ *     convert a network format address to presentation format.
+ * return:
+ *     pointer to presentation format address (`dst'), or NULL (see errno).
+ * author:
+ *     Paul Vixie, 1996.
+ */
+const char *
+inet_ntop(af, src, dst, size)
+       int af;
+       const void *src;
+       char *dst;
+       socklen_t size;
+{
+       switch (af) {
+       case AF_INET:
+               return (inet_ntop4(src, dst, size));
+       case AF_INET6:
+               return (inet_ntop6(src, dst, size));
+       default:
+               __set_errno (EAFNOSUPPORT);
+               return (NULL);
+       }
+       /* NOTREACHED */
+}
+libc_hidden_def (inet_ntop)
+
+/* const char *
+ * inet_ntop4(src, dst, size)
+ *     format an IPv4 address
+ * return:
+ *     `dst' (as a const)
+ * notes:
+ *     (1) uses no statics
+ *     (2) takes a u_char* not an in_addr as input
+ * author:
+ *     Paul Vixie, 1996.
+ */
+static const char *
+internal_function
+inet_ntop4(src, dst, size)
+       const u_char *src;
+       char *dst;
+       socklen_t size;
+{
+       static const char fmt[] = "%u.%u.%u.%u";
+       char tmp[sizeof "255.255.255.255"];
+
+       if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) >= size) {
+               __set_errno (ENOSPC);
+               return (NULL);
+       }
+       return strcpy(dst, tmp);
+}
+
+/* const char *
+ * inet_ntop6(src, dst, size)
+ *     convert IPv6 binary address into presentation (printable) format
+ * author:
+ *     Paul Vixie, 1996.
+ */
+static const char *
+internal_function
+inet_ntop6(src, dst, size)
+       const u_char *src;
+       char *dst;
+       socklen_t size;
+{
+       /*
+        * Note that int32_t and int16_t need only be "at least" large enough
+        * to contain a value of the specified size.  On some systems, like
+        * Crays, there is no such thing as an integer variable with 16 bits.
+        * Keep this in mind if you think this function should have been coded
+        * to use pointer overlays.  All the world's not a VAX.
+        */
+       char tmp[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"], *tp;
+       struct { int base, len; } best, cur;
+       u_int words[NS_IN6ADDRSZ / NS_INT16SZ];
+       int i;
+
+       /*
+        * Preprocess:
+        *      Copy the input (bytewise) array into a wordwise array.
+        *      Find the longest run of 0x00's in src[] for :: shorthanding.
+        */
+       memset(words, '\0', sizeof words);
+       for (i = 0; i < NS_IN6ADDRSZ; i += 2)
+               words[i / 2] = (src[i] << 8) | src[i + 1];
+       best.base = -1;
+       cur.base = -1;
+       best.len = 0;
+       cur.len = 0;
+       for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
+               if (words[i] == 0) {
+                       if (cur.base == -1)
+                               cur.base = i, cur.len = 1;
+                       else
+                               cur.len++;
+               } else {
+                       if (cur.base != -1) {
+                               if (best.base == -1 || cur.len > best.len)
+                                       best = cur;
+                               cur.base = -1;
+                       }
+               }
+       }
+       if (cur.base != -1) {
+               if (best.base == -1 || cur.len > best.len)
+                       best = cur;
+       }
+       if (best.base != -1 && best.len < 2)
+               best.base = -1;
+
+       /*
+        * Format the result.
+        */
+       tp = tmp;
+       for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
+               /* Are we inside the best run of 0x00's? */
+               if (best.base != -1 && i >= best.base &&
+                   i < (best.base + best.len)) {
+                       if (i == best.base)
+                               *tp++ = ':';
+                       continue;
+               }
+               /* Are we following an initial run of 0x00s or any real hex? */
+               if (i != 0)
+                       *tp++ = ':';
+               /* Is this address an encapsulated IPv4? */
+               if (i == 6 && best.base == 0 &&
+                   (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
+                       if (!inet_ntop4(src+12, tp, sizeof tmp - (tp - tmp)))
+                               return (NULL);
+                       tp += strlen(tp);
+                       break;
+               }
+               tp += SPRINTF((tp, "%x", words[i]));
+       }
+       /* Was it a trailing run of 0x00's? */
+       if (best.base != -1 && (best.base + best.len) ==
+           (NS_IN6ADDRSZ / NS_INT16SZ))
+               *tp++ = ':';
+       *tp++ = '\0';
+
+       /*
+        * Check for overflow, copy, and we're done.
+        */
+       if ((socklen_t)(tp - tmp) > size) {
+               __set_errno (ENOSPC);
+               return (NULL);
+       }
+       return strcpy(dst, tmp);
+}
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_pton.c b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/inet_pton.c
new file mode 100644 (file)
index 0000000..5afa8e3
--- /dev/null
@@ -0,0 +1,224 @@
+/* AKAROS_PORT: copied from resolv/, no changes.  We don't build resolv, but we
+ * still needed this file. */
+
+/*
+ * Copyright (c) 1996,1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static const char rcsid[] = "$BINDId: inet_pton.c,v 1.7 1999/10/13 16:39:28 vixie Exp $";
+#endif /* LIBC_SCCS and not lint */
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <arpa/nameser.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+
+/*
+ * WARNING: Don't even consider trying to compile this on a system where
+ * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.
+ */
+
+static int inet_pton4 (const char *src, u_char *dst) internal_function;
+static int inet_pton6 (const char *src, u_char *dst) internal_function;
+
+/* int
+ * inet_pton(af, src, dst)
+ *     convert from presentation format (which usually means ASCII printable)
+ *     to network format (which is usually some kind of binary format).
+ * return:
+ *     1 if the address was valid for the specified address family
+ *     0 if the address wasn't valid (`dst' is untouched in this case)
+ *     -1 if some other error occurred (`dst' is untouched in this case, too)
+ * author:
+ *     Paul Vixie, 1996.
+ */
+int
+inet_pton(af, src, dst)
+       int af;
+       const char *src;
+       void *dst;
+{
+       switch (af) {
+       case AF_INET:
+               return (inet_pton4(src, dst));
+       case AF_INET6:
+               return (inet_pton6(src, dst));
+       default:
+               __set_errno (EAFNOSUPPORT);
+               return (-1);
+       }
+       /* NOTREACHED */
+}
+libc_hidden_def (inet_pton)
+
+/* int
+ * inet_pton4(src, dst)
+ *     like inet_aton() but without all the hexadecimal, octal (with the
+ *     exception of 0) and shorthand.
+ * return:
+ *     1 if `src' is a valid dotted quad, else 0.
+ * notice:
+ *     does not touch `dst' unless it's returning 1.
+ * author:
+ *     Paul Vixie, 1996.
+ */
+static int
+internal_function
+inet_pton4(src, dst)
+       const char *src;
+       u_char *dst;
+{
+       int saw_digit, octets, ch;
+       u_char tmp[NS_INADDRSZ], *tp;
+
+       saw_digit = 0;
+       octets = 0;
+       *(tp = tmp) = 0;
+       while ((ch = *src++) != '\0') {
+
+               if (ch >= '0' && ch <= '9') {
+                       u_int new = *tp * 10 + (ch - '0');
+
+                       if (saw_digit && *tp == 0)
+                               return (0);
+                       if (new > 255)
+                               return (0);
+                       *tp = new;
+                       if (! saw_digit) {
+                               if (++octets > 4)
+                                       return (0);
+                               saw_digit = 1;
+                       }
+               } else if (ch == '.' && saw_digit) {
+                       if (octets == 4)
+                               return (0);
+                       *++tp = 0;
+                       saw_digit = 0;
+               } else
+                       return (0);
+       }
+       if (octets < 4)
+               return (0);
+       memcpy(dst, tmp, NS_INADDRSZ);
+       return (1);
+}
+
+/* int
+ * inet_pton6(src, dst)
+ *     convert presentation level address to network order binary form.
+ * return:
+ *     1 if `src' is a valid [RFC1884 2.2] address, else 0.
+ * notice:
+ *     (1) does not touch `dst' unless it's returning 1.
+ *     (2) :: in a full address is silently ignored.
+ * credit:
+ *     inspired by Mark Andrews.
+ * author:
+ *     Paul Vixie, 1996.
+ */
+static int
+internal_function
+inet_pton6(src, dst)
+       const char *src;
+       u_char *dst;
+{
+       static const char xdigits[] = "0123456789abcdef";
+       u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
+       const char *curtok;
+       int ch, saw_xdigit;
+       u_int val;
+
+       tp = memset(tmp, '\0', NS_IN6ADDRSZ);
+       endp = tp + NS_IN6ADDRSZ;
+       colonp = NULL;
+       /* Leading :: requires some special handling. */
+       if (*src == ':')
+               if (*++src != ':')
+                       return (0);
+       curtok = src;
+       saw_xdigit = 0;
+       val = 0;
+       while ((ch = tolower (*src++)) != '\0') {
+               const char *pch;
+
+               pch = strchr(xdigits, ch);
+               if (pch != NULL) {
+                       val <<= 4;
+                       val |= (pch - xdigits);
+                       if (val > 0xffff)
+                               return (0);
+                       saw_xdigit = 1;
+                       continue;
+               }
+               if (ch == ':') {
+                       curtok = src;
+                       if (!saw_xdigit) {
+                               if (colonp)
+                                       return (0);
+                               colonp = tp;
+                               continue;
+                       } else if (*src == '\0') {
+                               return (0);
+                       }
+                       if (tp + NS_INT16SZ > endp)
+                               return (0);
+                       *tp++ = (u_char) (val >> 8) & 0xff;
+                       *tp++ = (u_char) val & 0xff;
+                       saw_xdigit = 0;
+                       val = 0;
+                       continue;
+               }
+               if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
+                   inet_pton4(curtok, tp) > 0) {
+                       tp += NS_INADDRSZ;
+                       saw_xdigit = 0;
+                       break;  /* '\0' was seen by inet_pton4(). */
+               }
+               return (0);
+       }
+       if (saw_xdigit) {
+               if (tp + NS_INT16SZ > endp)
+                       return (0);
+               *tp++ = (u_char) (val >> 8) & 0xff;
+               *tp++ = (u_char) val & 0xff;
+       }
+       if (colonp != NULL) {
+               /*
+                * Since some memmove()'s erroneously fail to handle
+                * overlapping regions, we'll do the shift by hand.
+                */
+               const int n = tp - colonp;
+               int i;
+
+               if (tp == endp)
+                       return (0);
+               for (i = 1; i <= n; i++) {
+                       endp[- i] = colonp[n - i];
+                       colonp[n - i] = 0;
+               }
+               tp = endp;
+       }
+       if (tp != endp)
+               return (0);
+       memcpy(dst, tmp, NS_IN6ADDRSZ);
+       return (1);
+}
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/netdb.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/netdb.h
new file mode 100644 (file)
index 0000000..424cd6c
--- /dev/null
@@ -0,0 +1,667 @@
+/* AKAROS_PORT: copied from resolv/, with minor modifications.  We don't build
+ * resolv, but we still needed this header file. */
+
+  /* Copyright (C) 1996-2014 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/>.  */
+
+/* All data returned by the network data base library are supplied in
+   host order and returned in network order (suitable for use in
+   system calls).  */
+
+#ifndef        _NETDB_H
+#define        _NETDB_H        1
+
+#include <features.h>
+
+#include <netinet/in.h>
+#include <stdint.h>
+
+/* Description of data base entry for a single network.  NOTE: here a
+   poor assumption is made.  The network number is expected to fit
+   into an unsigned long int variable.  */
+struct netent
+{
+  char *n_name;                        /* Official name of network.  */
+  char **n_aliases;            /* Alias list.  */
+  int n_addrtype;              /* Net address type.  */
+  uint32_t n_net;              /* Network number.  */
+};
+
+/* Absolute file name for network data base files.  */
+#define        _PATH_HEQUIV            "/etc/hosts.equiv"
+#define        _PATH_HOSTS             "/etc/hosts"
+#define        _PATH_NETWORKS          "/etc/networks"
+#define        _PATH_NSSWITCH_CONF     "/etc/nsswitch.conf"
+#define        _PATH_PROTOCOLS         "/etc/protocols"
+#define        _PATH_SERVICES          "/etc/services"
+
+
+__BEGIN_DECLS
+
+#if defined __USE_MISC || !defined __USE_XOPEN2K8
+/* Error status for non-reentrant lookup functions.
+   We use a macro to access always the thread-specific `h_errno' variable.  */
+# define h_errno (*__h_errno_location ())
+
+/* Function to get address of global `h_errno' variable.  */
+extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
+
+
+/* Possible values left in `h_errno'.  */
+# define HOST_NOT_FOUND        1       /* Authoritative Answer Host not found.  */
+# define TRY_AGAIN     2       /* Non-Authoritative Host not found,
+                                  or SERVERFAIL.  */
+# define NO_RECOVERY   3       /* Non recoverable errors, FORMERR, REFUSED,
+                                  NOTIMP.  */
+# define NO_DATA       4       /* Valid name, no data record of requested
+                                  type.  */
+#endif
+#if defined __USE_MISC || defined __USE_GNU
+# define NETDB_INTERNAL        -1      /* See errno.  */
+# define NETDB_SUCCESS 0       /* No problem.  */
+# define NO_ADDRESS    NO_DATA /* No address, look for MX record.  */
+#endif
+
+#if defined __USE_XOPEN2K || defined __USE_XOPEN_EXTENDED
+/* Highest reserved Internet port number.  */
+# define IPPORT_RESERVED       1024
+#endif
+
+#ifdef __USE_GNU
+/* Scope delimiter for getaddrinfo(), getnameinfo().  */
+# define SCOPE_DELIMITER       '%'
+#endif
+
+#ifdef __USE_MISC
+/* Print error indicated by `h_errno' variable on standard error.  STR
+   if non-null is printed before the error string.  */
+extern void herror (const char *__str) __THROW;
+
+/* Return string associated with error ERR_NUM.  */
+extern const char *hstrerror (int __err_num) __THROW;
+#endif
+
+
+/* Description of data base entry for a single host.  */
+struct hostent
+{
+  char *h_name;                        /* Official name of host.  */
+  char **h_aliases;            /* Alias list.  */
+  int h_addrtype;              /* Host address type.  */
+  int h_length;                        /* Length of address.  */
+  char **h_addr_list;          /* List of addresses from name server.  */
+#if defined __USE_MISC || defined __USE_GNU
+# define       h_addr  h_addr_list[0] /* Address, for backward compatibility.*/
+#endif
+};
+
+/* Open host data base files and mark them as staying open even after
+   a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void sethostent (int __stay_open);
+
+/* Close host data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endhostent (void);
+
+/* Get next entry from host data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostent (void);
+
+/* Return entry from host data base which address match ADDR with
+   length LEN and type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyaddr (const void *__addr, __socklen_t __len,
+                                     int __type);
+
+/* Return entry from host data base for host with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct hostent *gethostbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Return entry from host data base for host with NAME.  AF must be
+   set to the address type which is `AF_INET' for IPv4 or `AF_INET6'
+   for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern struct hostent *gethostbyname2 (const char *__name, int __af);
+
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int gethostent_r (struct hostent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct hostent **__restrict __result,
+                        int *__restrict __h_errnop);
+
+extern int gethostbyaddr_r (const void *__restrict __addr, __socklen_t __len,
+                           int __type,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname_r (const char *__restrict __name,
+                           struct hostent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct hostent **__restrict __result,
+                           int *__restrict __h_errnop);
+
+extern int gethostbyname2_r (const char *__restrict __name, int __af,
+                            struct hostent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct hostent **__restrict __result,
+                            int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Open network data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setnetent (int __stay_open);
+
+/* Close network data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endnetent (void);
+
+/* Get next entry from network data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetent (void);
+
+/* Return entry from network data base which address match NET and
+   type TYPE.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyaddr (uint32_t __net, int __type);
+
+/* Return entry from network data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct netent *getnetbyname (const char *__name);
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.  The last
+   argument is a pointer to a variable which gets the value which
+   would be stored in the global variable `herrno' by the
+   non-reentrant functions.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getnetent_r (struct netent *__restrict __result_buf,
+                       char *__restrict __buf, size_t __buflen,
+                       struct netent **__restrict __result,
+                       int *__restrict __h_errnop);
+
+extern int getnetbyaddr_r (uint32_t __net, int __type,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+
+extern int getnetbyname_r (const char *__restrict __name,
+                          struct netent *__restrict __result_buf,
+                          char *__restrict __buf, size_t __buflen,
+                          struct netent **__restrict __result,
+                          int *__restrict __h_errnop);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct servent
+{
+  char *s_name;                        /* Official service name.  */
+  char **s_aliases;            /* Alias list.  */
+  int s_port;                  /* Port number.  */
+  char *s_proto;               /* Protocol to use.  */
+};
+
+/* Open service data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setservent (int __stay_open);
+
+/* Close service data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endservent (void);
+
+/* Get next entry from service data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservent (void);
+
+/* Return entry from network data base for network with NAME and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyname (const char *__name, const char *__proto);
+
+/* Return entry from service data base which matches port PORT and
+   protocol PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct servent *getservbyport (int __port, const char *__proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getservent_r (struct servent *__restrict __result_buf,
+                        char *__restrict __buf, size_t __buflen,
+                        struct servent **__restrict __result);
+
+extern int getservbyname_r (const char *__restrict __name,
+                           const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+
+extern int getservbyport_r (int __port, const char *__restrict __proto,
+                           struct servent *__restrict __result_buf,
+                           char *__restrict __buf, size_t __buflen,
+                           struct servent **__restrict __result);
+#endif /* misc */
+
+
+/* Description of data base entry for a single service.  */
+struct protoent
+{
+  char *p_name;                        /* Official protocol name.  */
+  char **p_aliases;            /* Alias list.  */
+  int p_proto;                 /* Protocol number.  */
+};
+
+/* Open protocol data base files and mark them as staying open even
+   after a later search if STAY_OPEN is non-zero.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void setprotoent (int __stay_open);
+
+/* Close protocol data base files and clear `stay open' flag.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern void endprotoent (void);
+
+/* Get next entry from protocol data base file.  Open data base if
+   necessary.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotoent (void);
+
+/* Return entry from protocol data base for network with NAME.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobyname (const char *__name);
+
+/* Return entry from protocol data base which number is PROTO.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern struct protoent *getprotobynumber (int __proto);
+
+
+#ifdef __USE_MISC
+/* Reentrant versions of the functions above.  The additional
+   arguments specify a buffer of BUFLEN starting at BUF.
+
+   These functions are not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation they are cancellation points and
+   therefore not marked with __THROW.  */
+extern int getprotoent_r (struct protoent *__restrict __result_buf,
+                         char *__restrict __buf, size_t __buflen,
+                         struct protoent **__restrict __result);
+
+extern int getprotobyname_r (const char *__restrict __name,
+                            struct protoent *__restrict __result_buf,
+                            char *__restrict __buf, size_t __buflen,
+                            struct protoent **__restrict __result);
+
+extern int getprotobynumber_r (int __proto,
+                              struct protoent *__restrict __result_buf,
+                              char *__restrict __buf, size_t __buflen,
+                              struct protoent **__restrict __result);
+
+
+/* Establish network group NETGROUP for enumeration.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int setnetgrent (const char *__netgroup);
+
+/* Free all space allocated by previous `setnetgrent' call.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern void endnetgrent (void);
+
+/* Get next member of netgroup established by last `setnetgrent' call
+   and return pointers to elements in HOSTP, USERP, and DOMAINP.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent (char **__restrict __hostp,
+                       char **__restrict __userp,
+                       char **__restrict __domainp);
+
+
+/* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN).
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int innetgr (const char *__netgroup, const char *__host,
+                   const char *__user, const char *__domain);
+
+/* Reentrant version of `getnetgrent' where result is placed in BUFFER.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int getnetgrent_r (char **__restrict __hostp,
+                         char **__restrict __userp,
+                         char **__restrict __domainp,
+                         char *__restrict __buffer, size_t __buflen);
+#endif /* misc */
+
+
+#ifdef __USE_BSD
+/* Call `rshd' at port RPORT on remote machine *AHOST to execute CMD.
+   The local user is LOCUSER, on the remote machine the command is
+   executed as REMUSER.  In *FD2P the descriptor to the socket for the
+   connection is returned.  The caller must have the right to use a
+   reserved port.  When the function returns *AHOST contains the
+   official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
+                const char *__restrict __locuser,
+                const char *__restrict __remuser,
+                const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
+                   const char *__restrict __locuser,
+                   const char *__restrict __remuser,
+                   const char *__restrict __cmd, int *__restrict __fd2p,
+                   sa_family_t __af);
+
+/* Call `rexecd' at port RPORT on remote machine *AHOST to execute
+   CMD.  The process runs at the remote machine using the ID of user
+   NAME whose cleartext password is PASSWD.  In *FD2P the descriptor
+   to the socket for the connection is returned.  When the function
+   returns *AHOST contains the official host name.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec (char **__restrict __ahost, int __rport,
+                 const char *__restrict __name,
+                 const char *__restrict __pass,
+                 const char *__restrict __cmd, int *__restrict __fd2p);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rexec_af (char **__restrict __ahost, int __rport,
+                    const char *__restrict __name,
+                    const char *__restrict __pass,
+                    const char *__restrict __cmd, int *__restrict __fd2p,
+                    sa_family_t __af);
+
+/* Check whether user REMUSER on system RHOST is allowed to login as LOCUSER.
+   If SUSER is not zero the user tries to become superuser.  Return 0 if
+   it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok (const char *__rhost, int __suser,
+                   const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int ruserok_af (const char *__rhost, int __suser,
+                      const char *__remuser, const char *__locuser,
+                      sa_family_t __af);
+
+/* Check whether user REMUSER on system indicated by IPv4 address
+   RADDR is allowed to login as LOCUSER.  Non-IPv4 (e.g., IPv6) are
+   not supported.  If SUSER is not zero the user tries to become
+   superuser.  Return 0 if it is possible.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok (uint32_t __raddr, int __suser,
+                    const char *__remuser, const char *__locuser);
+
+/* This is the equivalent function where the pfamiliy if the address
+   pointed to by RADDR is determined by the value of AF.  It therefore
+   can be used for IPv6
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int iruserok_af (const void *__raddr, int __suser,
+                       const char *__remuser, const char *__locuser,
+                       sa_family_t __af);
+
+/* Try to allocate reserved port, returning a descriptor for a socket opened
+   at this port or -1 if unsuccessful.  The search for an available port
+   will start at ALPORT and continues with lower numbers.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport (int *__alport);
+
+/* This is the equivalent function where the protocol can be selected
+   and which therefore can be used for IPv6.
+
+   This function is not part of POSIX and therefore no official
+   cancellation point.  But due to similarity with an POSIX interface
+   or due to the implementation it is a cancellation point and
+   therefore not marked with __THROW.  */
+extern int rresvport_af (int *__alport, sa_family_t __af);
+#endif
+
+
+/* Extension from POSIX.1g.  */
+#ifdef __USE_POSIX
+/* Structure to contain information about address of a service provider.  */
+struct addrinfo
+{
+  int ai_flags;                        /* Input flags.  */
+  int ai_family;               /* Protocol family for socket.  */
+  int ai_socktype;             /* Socket type.  */
+  int ai_protocol;             /* Protocol for socket.  */
+  socklen_t ai_addrlen;                /* Length of socket address.  */
+  struct sockaddr *ai_addr;    /* Socket address for socket.  */
+  char *ai_canonname;          /* Canonical name for service location.  */
+  struct addrinfo *ai_next;    /* Pointer to next in list.  */
+};
+
+/* Possible values for `ai_flags' field in `addrinfo' structure.  */
+# define AI_PASSIVE    0x0001  /* Socket address is intended for `bind'.  */
+# define AI_CANONNAME  0x0002  /* Request for canonical name.  */
+# define AI_NUMERICHOST        0x0004  /* Don't use name resolution.  */
+# define AI_V4MAPPED   0x0008  /* IPv4 mapped addresses are acceptable.  */
+# define AI_ALL                0x0010  /* Return IPv4 mapped and IPv6 addresses.  */
+# define AI_ADDRCONFIG 0x0020  /* Use configuration of this host to choose
+                                  returned address type..  */
+# ifdef __USE_GNU
+#  define AI_IDN       0x0040  /* IDN encode input (assuming it is encoded
+                                  in the current locale's character set)
+                                  before looking it up. */
+#  define AI_CANONIDN  0x0080  /* Translate canonical name from IDN format. */
+#  define AI_IDN_ALLOW_UNASSIGNED 0x0100 /* Don't reject unassigned Unicode
+                                           code points.  */
+#  define AI_IDN_USE_STD3_ASCII_RULES 0x0200 /* Validate strings according to
+                                               STD3 rules.  */
+# endif
+# define AI_NUMERICSERV        0x0400  /* Don't use name resolution.  */
+
+/* Error values for `getaddrinfo' function.  */
+# define EAI_BADFLAGS    -1    /* Invalid value for `ai_flags' field.  */
+# define EAI_NONAME      -2    /* NAME or SERVICE is unknown.  */
+# define EAI_AGAIN       -3    /* Temporary failure in name resolution.  */
+# define EAI_FAIL        -4    /* Non-recoverable failure in name res.  */
+# define EAI_FAMILY      -6    /* `ai_family' not supported.  */
+# define EAI_SOCKTYPE    -7    /* `ai_socktype' not supported.  */
+# define EAI_SERVICE     -8    /* SERVICE not supported for `ai_socktype'.  */
+# define EAI_MEMORY      -10   /* Memory allocation failure.  */
+# define EAI_SYSTEM      -11   /* System error returned in `errno'.  */
+# define EAI_OVERFLOW    -12   /* Argument buffer overflow.  */
+# ifdef __USE_GNU
+#  define EAI_NODATA     -5    /* No address associated with NAME.  */
+#  define EAI_ADDRFAMILY  -9   /* Address family for NAME not supported.  */
+#  define EAI_INPROGRESS  -100 /* Processing request in progress.  */
+#  define EAI_CANCELED   -101  /* Request canceled.  */
+#  define EAI_NOTCANCELED -102 /* Request not canceled.  */
+#  define EAI_ALLDONE    -103  /* All requests done.  */
+#  define EAI_INTR       -104  /* Interrupted by a signal.  */
+#  define EAI_IDN_ENCODE  -105 /* IDN encoding failed.  */
+# endif
+
+# ifdef __USE_MISC
+#  define NI_MAXHOST      1025
+#  define NI_MAXSERV      32
+# endif
+
+# define NI_NUMERICHOST        1       /* Don't try to look up hostname.  */
+# define NI_NUMERICSERV 2      /* Don't convert port number to name.  */
+# define NI_NOFQDN     4       /* Only return nodename portion.  */
+# define NI_NAMEREQD   8       /* Don't return numeric addresses.  */
+# define NI_DGRAM      16      /* Look up UDP service rather than TCP.  */
+# ifdef __USE_GNU
+#  define NI_IDN       32      /* Convert name from IDN format.  */
+#  define NI_IDN_ALLOW_UNASSIGNED 64 /* Don't reject unassigned Unicode
+                                       code points.  */
+#  define NI_IDN_USE_STD3_ASCII_RULES 128 /* Validate strings according to
+                                            STD3 rules.  */
+# endif
+
+/* Translate name of a service location and/or a service name to set of
+   socket addresses.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getaddrinfo (const char *__restrict __name,
+                       const char *__restrict __service,
+                       const struct addrinfo *__restrict __req,
+                       struct addrinfo **__restrict __pai);
+
+/* Free `addrinfo' structure AI including associated storage.  */
+extern void freeaddrinfo (struct addrinfo *__ai) __THROW;
+
+/* Convert error return from getaddrinfo() to a string.  */
+extern const char *gai_strerror (int __ecode) __THROW;
+
+/* Translate a socket address to a location and service name.
+
+   This function is a possible cancellation point and therefore not
+   marked with __THROW.  */
+extern int getnameinfo (const struct sockaddr *__restrict __sa,
+                       socklen_t __salen, char *__restrict __host,
+                       socklen_t __hostlen, char *__restrict __serv,
+                       socklen_t __servlen, int __flags);
+#endif /* POSIX */
+
+__END_DECLS
+
+#endif /* netdb.h */
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/resolv.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/resolv.h
new file mode 100644 (file)
index 0000000..53c3bba
--- /dev/null
@@ -0,0 +1,389 @@
+/*
+ * Copyright (c) 1983, 1987, 1989
+ *    The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+/*
+ *     @(#)resolv.h    8.1 (Berkeley) 6/2/93
+ *     $BINDId: resolv.h,v 8.31 2000/03/30 20:16:50 vixie Exp $
+ */
+
+#ifndef _RESOLV_H_
+
+/* These headers are needed for types used in the `struct res_state'
+   declaration.  */
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#ifndef __need_res_state
+# define _RESOLV_H_
+
+# include <sys/param.h>
+# include <sys/cdefs.h>
+# include <stdio.h>
+# include <arpa/nameser.h>
+#endif
+
+#ifndef __res_state_defined
+# define __res_state_defined
+
+typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error }
+       res_sendhookact;
+
+typedef res_sendhookact (*res_send_qhook) (struct sockaddr_in * const *__ns,
+                                          const u_char **__query,
+                                          int *__querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+typedef res_sendhookact (*res_send_rhook) (const struct sockaddr_in *__ns,
+                                          const u_char *__query,
+                                          int __querylen,
+                                          u_char *__ans,
+                                          int __anssiz,
+                                          int *__resplen);
+
+/*
+ * Global defines and variables for resolver stub.
+ */
+# define MAXNS                 3       /* max # name servers we'll track */
+# define MAXDFLSRCH            3       /* # default domain levels to try */
+# define MAXDNSRCH             6       /* max # domains in search path */
+# define LOCALDOMAINPARTS      2       /* min levels in name that is "local" */
+
+# define RES_TIMEOUT           5       /* min. seconds between retries */
+# define MAXRESOLVSORT         10      /* number of net to sort on */
+# define RES_MAXNDOTS          15      /* should reflect bit field size */
+# define RES_MAXRETRANS                30      /* only for resolv.conf/RES_OPTIONS */
+# define RES_MAXRETRY          5       /* only for resolv.conf/RES_OPTIONS */
+# define RES_DFLRETRY          2       /* Default #/tries. */
+# define RES_MAXTIME           65535   /* Infinity, in milliseconds. */
+
+struct __res_state {
+       int     retrans;                /* retransmition time interval */
+       int     retry;                  /* number of times to retransmit */
+       u_long  options;                /* option flags - see below. */
+       int     nscount;                /* number of name servers */
+       struct sockaddr_in
+               nsaddr_list[MAXNS];     /* address of name server */
+# define nsaddr        nsaddr_list[0]          /* for backward compatibility */
+       u_short id;                     /* current message id */
+       /* 2 byte hole here.  */
+       char    *dnsrch[MAXDNSRCH+1];   /* components of domain to search */
+       char    defdname[256];          /* default domain (deprecated) */
+       u_long  pfcode;                 /* RES_PRF_ flags - see below. */
+       unsigned ndots:4;               /* threshold for initial abs. query */
+       unsigned nsort:4;               /* number of elements in sort_list[] */
+       unsigned ipv6_unavail:1;        /* connecting to IPv6 server failed */
+       unsigned unused:23;
+       struct {
+               struct in_addr  addr;
+               u_int32_t       mask;
+       } sort_list[MAXRESOLVSORT];
+       /* 4 byte hole here on 64-bit architectures.  */
+       res_send_qhook qhook;           /* query hook */
+       res_send_rhook rhook;           /* response hook */
+       int     res_h_errno;            /* last one set for this context */
+       int     _vcsock;                /* PRIVATE: for res_send VC i/o */
+       u_int   _flags;                 /* PRIVATE: see below */
+       /* 4 byte hole here on 64-bit architectures.  */
+       union {
+               char    pad[52];        /* On an i386 this means 512b total. */
+               struct {
+                       u_int16_t               nscount;
+                       u_int16_t               nsmap[MAXNS];
+                       int                     nssocks[MAXNS];
+                       u_int16_t               nscount6;
+                       u_int16_t               nsinit;
+                       struct sockaddr_in6     *nsaddrs[MAXNS];
+#ifdef _LIBC
+                       unsigned long long int  initstamp
+                         __attribute__((packed));
+#else
+                       unsigned int            _initstamp[2];
+#endif
+               } _ext;
+       } _u;
+};
+
+typedef struct __res_state *res_state;
+# undef __need_res_state
+#endif
+
+#ifdef _RESOLV_H_
+/*
+ * Revision information.  This is the release date in YYYYMMDD format.
+ * It can change every day so the right thing to do with it is use it
+ * in preprocessor commands such as "#if (__RES > 19931104)".  Do not
+ * compare for equality; rather, use it to determine whether your resolver
+ * is new enough to contain a certain feature.
+ */
+
+#define        __RES   19991006
+
+/*
+ * Resolver configuration file.
+ * Normally not present, but may contain the address of the
+ * inital name server(s) to query and the domain search list.
+ */
+
+#ifndef _PATH_RESCONF
+#define _PATH_RESCONF        "/etc/resolv.conf"
+#endif
+
+struct res_sym {
+       int     number;         /* Identifying number, like T_MX */
+       char *  name;           /* Its symbolic name, like "MX" */
+       char *  humanname;      /* Its fun name, like "mail exchanger" */
+};
+
+/*
+ * Resolver flags (used to be discrete per-module statics ints).
+ */
+#define        RES_F_VC        0x00000001      /* socket is TCP */
+#define        RES_F_CONN      0x00000002      /* socket is connected */
+#define RES_F_EDNS0ERR 0x00000004      /* EDNS0 caused errors */
+
+/* res_findzonecut() options */
+#define        RES_EXHAUSTIVE  0x00000001      /* always do all queries */
+
+/*
+ * Resolver options (keep these in synch with res_debug.c, please)
+ */
+#define RES_INIT       0x00000001      /* address initialized */
+#define RES_DEBUG      0x00000002      /* print debug messages */
+#define RES_AAONLY     0x00000004      /* authoritative answers only (!IMPL)*/
+#define RES_USEVC      0x00000008      /* use virtual circuit */
+#define RES_PRIMARY    0x00000010      /* query primary server only (!IMPL) */
+#define RES_IGNTC      0x00000020      /* ignore trucation errors */
+#define RES_RECURSE    0x00000040      /* recursion desired */
+#define RES_DEFNAMES   0x00000080      /* use default domain name */
+#define RES_STAYOPEN   0x00000100      /* Keep TCP socket open */
+#define RES_DNSRCH     0x00000200      /* search up local domain tree */
+#define        RES_INSECURE1   0x00000400      /* type 1 security disabled */
+#define        RES_INSECURE2   0x00000800      /* type 2 security disabled */
+#define        RES_NOALIASES   0x00001000      /* shuts off HOSTALIASES feature */
+#define        RES_USE_INET6   0x00002000      /* use/map IPv6 in gethostbyname() */
+#define RES_ROTATE     0x00004000      /* rotate ns list after each query */
+#define        RES_NOCHECKNAME 0x00008000      /* do not check names for sanity (!IMPL) */
+#define        RES_KEEPTSIG    0x00010000      /* do not strip TSIG records */
+#define        RES_BLAST       0x00020000      /* blast all recursive servers */
+#define RES_USEBSTRING 0x00040000      /* IPv6 reverse lookup with byte
+                                          strings */
+#define RES_NOIP6DOTINT        0x00080000      /* Do not use .ip6.int in IPv6
+                                          reverse lookup */
+#define RES_USE_EDNS0  0x00100000      /* Use EDNS0.  */
+#define RES_SNGLKUP    0x00200000      /* one outstanding request at a time */
+#define RES_SNGLKUPREOP        0x00400000      /* -"-, but open new socket for each
+                                          request */
+#define RES_USE_DNSSEC 0x00800000      /* use DNSSEC using OK bit in OPT */
+#define RES_NOTLDQUERY 0x01000000      /* Do not look up unqualified name
+                                          as a TLD.  */
+
+#define RES_DEFAULT    (RES_RECURSE|RES_DEFNAMES|RES_DNSRCH|RES_NOIP6DOTINT)
+
+/*
+ * Resolver "pfcode" values.  Used by dig.
+ */
+#define RES_PRF_STATS  0x00000001
+#define RES_PRF_UPDATE 0x00000002
+#define RES_PRF_CLASS   0x00000004
+#define RES_PRF_CMD    0x00000008
+#define RES_PRF_QUES   0x00000010
+#define RES_PRF_ANS    0x00000020
+#define RES_PRF_AUTH   0x00000040
+#define RES_PRF_ADD    0x00000080
+#define RES_PRF_HEAD1  0x00000100
+#define RES_PRF_HEAD2  0x00000200
+#define RES_PRF_TTLID  0x00000400
+#define RES_PRF_HEADX  0x00000800
+#define RES_PRF_QUERY  0x00001000
+#define RES_PRF_REPLY  0x00002000
+#define RES_PRF_INIT   0x00004000
+/*                     0x00008000      */
+
+/* Things involving an internal (static) resolver context. */
+__BEGIN_DECLS
+extern struct __res_state *__res_state(void) __attribute__ ((__const__));
+__END_DECLS
+#define _res (*__res_state())
+
+#ifndef __BIND_NOSTATIC
+#define fp_nquery              __fp_nquery
+#define fp_query               __fp_query
+#define hostalias              __hostalias
+#define p_query                        __p_query
+#define res_close              __res_close
+#define res_init               __res_init
+#define res_isourserver                __res_isourserver
+#define res_mkquery            __res_mkquery
+#define res_query              __res_query
+#define res_querydomain                __res_querydomain
+#define res_search             __res_search
+#define res_send               __res_send
+
+__BEGIN_DECLS
+void           fp_nquery (const u_char *, int, FILE *) __THROW;
+void           fp_query (const u_char *, FILE *) __THROW;
+const char *   hostalias (const char *) __THROW;
+void           p_query (const u_char *) __THROW;
+void           res_close (void) __THROW;
+int            res_init (void) __THROW;
+int            res_isourserver (const struct sockaddr_in *) __THROW;
+int            res_mkquery (int, const char *, int, int, const u_char *,
+                            int, const u_char *, u_char *, int) __THROW;
+int            res_query (const char *, int, int, u_char *, int) __THROW;
+int            res_querydomain (const char *, const char *, int, int,
+                                u_char *, int) __THROW;
+int            res_search (const char *, int, int, u_char *, int) __THROW;
+int            res_send (const u_char *, int, u_char *, int) __THROW;
+__END_DECLS
+#endif
+
+#define b64_ntop               __b64_ntop
+#define b64_pton               __b64_pton
+#define dn_comp                        __dn_comp
+#define dn_count_labels                __dn_count_labels
+#define dn_expand              __dn_expand
+#define dn_skipname            __dn_skipname
+#define fp_resstat             __fp_resstat
+#define loc_aton               __loc_aton
+#define loc_ntoa               __loc_ntoa
+#define p_cdname               __p_cdname
+#define p_cdnname              __p_cdnname
+#define p_class                        __p_class
+#define p_fqname               __p_fqname
+#define p_fqnname              __p_fqnname
+#define p_option               __p_option
+#define p_secstodate           __p_secstodate
+#define p_section              __p_section
+#define p_time                 __p_time
+#define p_type                 __p_type
+#define p_rcode                        __p_rcode
+#define putlong                        __putlong
+#define putshort               __putshort
+#define res_dnok               __res_dnok
+#define res_hnok               __res_hnok
+#define res_hostalias          __res_hostalias
+#define res_mailok             __res_mailok
+#define res_nameinquery                __res_nameinquery
+#define res_nclose             __res_nclose
+#define res_ninit              __res_ninit
+#define res_nmkquery           __res_nmkquery
+#define res_npquery            __res_npquery
+#define res_nquery             __res_nquery
+#define res_nquerydomain       __res_nquerydomain
+#define res_nsearch            __res_nsearch
+#define res_nsend              __res_nsend
+#define res_nisourserver       __res_nisourserver
+#define res_ownok              __res_ownok
+#define res_queriesmatch       __res_queriesmatch
+#define res_randomid           __res_randomid
+#define sym_ntop               __sym_ntop
+#define sym_ntos               __sym_ntos
+#define sym_ston               __sym_ston
+__BEGIN_DECLS
+int            res_hnok (const char *) __THROW;
+int            res_ownok (const char *) __THROW;
+int            res_mailok (const char *) __THROW;
+int            res_dnok (const char *) __THROW;
+int            sym_ston (const struct res_sym *, const char *, int *) __THROW;
+const char *   sym_ntos (const struct res_sym *, int, int *) __THROW;
+const char *   sym_ntop (const struct res_sym *, int, int *) __THROW;
+int            b64_ntop (u_char const *, size_t, char *, size_t) __THROW;
+int            b64_pton (char const *, u_char *, size_t) __THROW;
+int            loc_aton (const char *__ascii, u_char *__binary) __THROW;
+const char *   loc_ntoa (const u_char *__binary, char *__ascii) __THROW;
+int            dn_skipname (const u_char *, const u_char *) __THROW;
+void           putlong (u_int32_t, u_char *) __THROW;
+void           putshort (u_int16_t, u_char *) __THROW;
+const char *   p_class (int) __THROW;
+const char *   p_time (u_int32_t) __THROW;
+const char *   p_type (int) __THROW;
+const char *   p_rcode (int) __THROW;
+const u_char * p_cdnname (const u_char *, const u_char *, int, FILE *)
+     __THROW;
+const u_char * p_cdname (const u_char *, const u_char *, FILE *) __THROW;
+const u_char * p_fqnname (const u_char *__cp, const u_char *__msg,
+                          int, char *, int) __THROW;
+const u_char * p_fqname (const u_char *, const u_char *, FILE *) __THROW;
+const char *   p_option (u_long __option) __THROW;
+char *         p_secstodate (u_long) __THROW;
+int            dn_count_labels (const char *) __THROW;
+int            dn_comp (const char *, u_char *, int, u_char **, u_char **)
+     __THROW;
+int            dn_expand (const u_char *, const u_char *, const u_char *,
+                          char *, int) __THROW;
+u_int          res_randomid (void) __THROW;
+int            res_nameinquery (const char *, int, int,
+                                const u_char *, const u_char *) __THROW;
+int            res_queriesmatch (const u_char *, const u_char *,
+                                 const u_char *, const u_char *) __THROW;
+const char *   p_section (int __section, int __opcode) __THROW;
+/* Things involving a resolver context. */
+int            res_ninit (res_state) __THROW;
+int            res_nisourserver (const res_state,
+                                 const struct sockaddr_in *) __THROW;
+void           fp_resstat (const res_state, FILE *) __THROW;
+void           res_npquery (const res_state, const u_char *, int, FILE *)
+     __THROW;
+const char *   res_hostalias (const res_state, const char *, char *, size_t)
+     __THROW;
+int            res_nquery (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nsearch (res_state, const char *, int, int, u_char *, int)
+     __THROW;
+int            res_nquerydomain (res_state, const char *, const char *, int,
+                                 int, u_char *, int) __THROW;
+int            res_nmkquery (res_state, int, const char *, int, int,
+                             const u_char *, int, const u_char *, u_char *,
+                             int) __THROW;
+int            res_nsend (res_state, const u_char *, int, u_char *, int)
+     __THROW;
+void           res_nclose (res_state) __THROW;
+__END_DECLS
+#endif
+
+#endif /* !_RESOLV_H_ */
diff --git a/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/bitypes.h b/tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/bitypes.h
new file mode 100644 (file)
index 0000000..3a9860f
--- /dev/null
@@ -0,0 +1,3 @@
+/* The GNU <sys/types.h> defines all the necessary types.  */
+
+#include <sys/types.h>
index 82472ac..f4cef3a 100644 (file)
@@ -17,6 +17,7 @@
 #include <sys/socket.h>
 
 #include <netinet/in.h>
+#include <netdb.h>
 
 __BEGIN_DECLS