diff options
| author | matt <matt@NetBSD.org> | 2006-08-26 16:07:01 +0000 |
|---|---|---|
| committer | matt <matt@NetBSD.org> | 2006-08-26 16:07:01 +0000 |
| commit | 95ff9c00a4ed1523fc02c779fe58eb77862efc31 (patch) | |
| tree | ea3eaf0af61eed0784d7fbff691a3908764e291d /lib/libc/net | |
| parent | a5db20545841c9efa57cd3855ce628049a52590b (diff) | |
Move ns_addr and ns_ntoa to compat libc. Add a stripped version of
<netns/ns.h> which only include struct ns_addr and the ns_addr and ns_ntoa
function prototypes.
Diffstat (limited to 'lib/libc/net')
| -rw-r--r-- | lib/libc/net/Makefile.inc | 4 | ||||
| -rw-r--r-- | lib/libc/net/ns_addr.c | 250 | ||||
| -rw-r--r-- | lib/libc/net/ns_ntoa.c | 111 |
3 files changed, 2 insertions, 363 deletions
diff --git a/lib/libc/net/Makefile.inc b/lib/libc/net/Makefile.inc index f3d25b743a0..f65a02f1d5d 100644 --- a/lib/libc/net/Makefile.inc +++ b/lib/libc/net/Makefile.inc @@ -1,4 +1,4 @@ -# $NetBSD: Makefile.inc,v 1.69 2006/05/05 00:03:21 rpaulo Exp $ +# $NetBSD: Makefile.inc,v 1.70 2006/08/26 16:07:01 matt Exp $ # @(#)Makefile.inc 8.2 (Berkeley) 9/5/93 # net sources @@ -11,7 +11,7 @@ SRCS+= __cmsg_alignbytes.c base64.c ethers.c gethnamaddr.c getifaddrs.c \ getservbyname.c getservbyport.c getservent.c \ getservbyname_r.c getservbyport_r.c getservent_r.c \ iso_addr.c linkaddr.c \ - nsdispatch.c nslexer.l nsparser.y ns_addr.c ns_ntoa.c nsap_addr.c \ + nsdispatch.c nslexer.l nsparser.y nsap_addr.c \ rcmd.c recv.c send.c sethostent.c \ sockatmark.c diff --git a/lib/libc/net/ns_addr.c b/lib/libc/net/ns_addr.c deleted file mode 100644 index adde50b79f1..00000000000 --- a/lib/libc/net/ns_addr.c +++ /dev/null @@ -1,250 +0,0 @@ -/* $NetBSD: ns_addr.c,v 1.17 2004/05/09 11:25:20 kleink Exp $ */ - -/* - * Copyright (c) 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * J.Q. Johnson. - * - * 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. - * 3. 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. - */ - -#include <sys/cdefs.h> -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)ns_addr.c 8.1 (Berkeley) 6/7/93"; -#else -__RCSID("$NetBSD: ns_addr.c,v 1.17 2004/05/09 11:25:20 kleink Exp $"); -#endif -#endif /* LIBC_SCCS and not lint */ - -#include "namespace.h" -#include <sys/param.h> -#include <netns/ns.h> - -#include <assert.h> -#include <stdio.h> -#include <string.h> - -static void Field __P((char *, u_int8_t *, int)); -static void cvtbase __P((long, int, int[], int, u_int8_t[], int)); - -struct ns_addr -ns_addr(name) - const char *name; -{ - char separator; - char *hostname, *socketname, *cp; - char buf[50]; - static struct ns_addr addr; - - _DIAGASSERT(name != NULL); - - (void)strlcpy(buf, name, sizeof(buf)); - - /* - * First, figure out what he intends as a field separtor. - * Despite the way this routine is written, the prefered - * form 2-272.AA001234H.01777, i.e. XDE standard. - * Great efforts are made to insure backward compatibility. - */ - if ((hostname = strchr(buf, '#')) != NULL) - separator = '#'; - else { - hostname = strchr(buf, '.'); - if ((cp = strchr(buf, ':')) && - ((hostname && cp < hostname) || (hostname == 0))) { - hostname = cp; - separator = ':'; - } else - separator = '.'; - } - if (hostname) - *hostname++ = 0; - - memset(&addr, '\0', sizeof(addr)); - Field(buf, addr.x_net.c_net, 4); - if (hostname == 0) - return (addr); /* No separator means net only */ - - socketname = strchr(hostname, separator); - if (socketname) { - *socketname++ = 0; - Field(socketname, (u_int8_t *)(void *)&addr.x_port, 2); - } - - Field(hostname, addr.x_host.c_host, 6); - - return (addr); -} - -static void -Field(buf, out, len) - char *buf; - u_int8_t *out; - int len; -{ - register char *bp = buf; - int i, ibase, base16 = 0, base10 = 0, clen = 0; - int hb[6], *hp; - - _DIAGASSERT(buf != NULL); - _DIAGASSERT(out != NULL); - - /* - * first try 2-273#2-852-151-014#socket - */ - if ((*buf != '-') && - (1 < (i = sscanf(buf, "%d-%d-%d-%d-%d", - &hb[0], &hb[1], &hb[2], &hb[3], &hb[4])))) { - cvtbase(1000L, 256, hb, i, out, len); - return; - } - /* - * try form 8E1#0.0.AA.0.5E.E6#socket - */ - if (1 < (i = sscanf(buf,"%x.%x.%x.%x.%x.%x", - &hb[0], &hb[1], &hb[2], &hb[3], &hb[4], &hb[5]))) { - cvtbase(256L, 256, hb, i, out, len); - return; - } - /* - * try form 8E1#0:0:AA:0:5E:E6#socket - */ - if (1 < (i = sscanf(buf,"%x:%x:%x:%x:%x:%x", - &hb[0], &hb[1], &hb[2], &hb[3], &hb[4], &hb[5]))) { - cvtbase(256L, 256, hb, i, out, len); - return; - } - /* - * This is REALLY stretching it but there was a - * comma notation separting shorts -- definitely non standard - */ - if (1 < (i = sscanf(buf,"%x,%x,%x", - &hb[0], &hb[1], &hb[2]))) { - hb[0] = htons(hb[0]); hb[1] = htons(hb[1]); - hb[2] = htons(hb[2]); - cvtbase(65536L, 256, hb, i, out, len); - return; - } - - /* Need to decide if base 10, 16 or 8 */ - while (*bp) switch (*bp++) { - - case '0': case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '-': - break; - - case '8': case '9': - base10 = 1; - break; - - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - base16 = 1; - break; - - case 'x': case 'X': - *--bp = '0'; - base16 = 1; - break; - - case 'h': case 'H': - base16 = 1; - /* FALLTHROUGH */ - - default: - *--bp = 0; /* Ends Loop */ - } - if (base16) { - ibase = 4096; - } else if (base10 == 0 && *buf == '0') { - ibase = 512; - } else { - base10 = 1; - ibase = 1000; - } - - for (bp = buf; *bp++; ) clen++; - if (clen == 0) clen++; - if (clen > 18) clen = 18; - i = ((clen - 1) / 3) + 1; - bp = clen + buf - 3; - hp = hb + i - 1; - - while (hp > hb) { - if (base16) - (void)sscanf(bp, "%3x", hp); - else if (base10) - (void)sscanf(bp, "%3d", hp); - else - (void)sscanf(bp, "%3o", hp); - - bp[0] = 0; - hp--; - bp -= 3; - } - if (base16) - (void)sscanf(buf, "%3x", hp); - else if (base10) - (void)sscanf(buf, "%3d", hp); - else - (void)sscanf(buf, "%3o", hp); - - cvtbase((long)ibase, 256, hb, i, out, len); -} - -static void -cvtbase(oldbase,newbase,input,inlen,result,reslen) - long oldbase; - int newbase; - int input[]; - int inlen; - unsigned char result[]; - int reslen; -{ - int d, e; - long sum; - - _DIAGASSERT(input != NULL); - _DIAGASSERT(result != NULL); - - e = 1; - while (e > 0 && reslen > 0) { - d = 0; e = 0; sum = 0; - /* long division: input=input/newbase */ - while (d < inlen) { - sum = sum*oldbase + (long) input[d]; - e += (sum > 0); - input[d++] = (int) (sum / newbase); - sum %= newbase; - } - /* accumulate remainder */ - result[--reslen] = (unsigned char)sum; - } - for (d=0; d < reslen; d++) - result[d] = 0; -} diff --git a/lib/libc/net/ns_ntoa.c b/lib/libc/net/ns_ntoa.c deleted file mode 100644 index 7faa9f94a36..00000000000 --- a/lib/libc/net/ns_ntoa.c +++ /dev/null @@ -1,111 +0,0 @@ -/* $NetBSD: ns_ntoa.c,v 1.12 2003/09/23 03:19:28 itojun Exp $ */ - -/* - * Copyright (c) 1986, 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. - * 3. 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. - */ - -#include <sys/cdefs.h> -#if defined(LIBC_SCCS) && !defined(lint) -#if 0 -static char sccsid[] = "@(#)ns_ntoa.c 8.1 (Berkeley) 6/4/93"; -#else -__RCSID("$NetBSD: ns_ntoa.c,v 1.12 2003/09/23 03:19:28 itojun Exp $"); -#endif -#endif /* LIBC_SCCS and not lint */ - -#include <sys/param.h> -#include <netns/ns.h> - -#include <assert.h> -#include <stdio.h> - -static char *spectHex __P((char *)); - -char * -ns_ntoa(addr) - struct ns_addr addr; -{ - static char obuf[40]; - union { union ns_net net_e; u_int32_t long_e; } net; - u_int16_t port = htons(addr.x_port); - char *cp; - char *cp2; - u_int8_t *up = addr.x_host.c_host; - u_int8_t *uplim = up + 6; - - net.net_e = addr.x_net; - sprintf(obuf, "%x", ntohl(net.long_e)); - cp = spectHex(obuf); - cp2 = cp + 1; - while (up < uplim && *up==0) - up++; - if (up == uplim) { - if (port) { - sprintf(cp, ".0"); - cp += 2; - } - } else { - sprintf(cp, ".%x", *up++); - while (up < uplim) { - while (*cp) cp++; - sprintf(cp, "%02x", *up++); - } - cp = spectHex(cp2); - } - if (port) { - sprintf(cp, ".%x", port); - spectHex(cp + 1); - } - return (obuf); -} - -static char * -spectHex(p0) - char *p0; -{ - int ok = 0; - int nonzero = 0; - char *p = p0; - - _DIAGASSERT(p0 != NULL); - - for (; *p; p++) - switch (*p) { - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - *p += ('A' - 'a'); - /* FALLTHROUGH */ - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - ok = 1; - /* FALLTHROUGH */ - case '1': case '2': case '3': case '4': case '5': - case '6': case '7': case '8': case '9': - nonzero = 1; - } - if (nonzero && !ok) { *p++ = 'H'; *p = 0; } - return (p); -} |
