]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/libkern/inet_ntop.c
xnu-2422.1.72.tar.gz
[apple/xnu.git] / bsd / libkern / inet_ntop.c
diff --git a/bsd/libkern/inet_ntop.c b/bsd/libkern/inet_ntop.c
deleted file mode 100644 (file)
index dc07273..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. The rights granted to you under the License
- * may not be used to create, or enable the creation or redistribution of,
- * unlawful or unlicensed copies of an Apple operating system, or to
- * circumvent, violate, or enable the circumvention or violation of, any
- * terms of an Apple operating system software license agreement.
- * 
- * Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
- */
-
-/*
- * Copyright 1994, 1995 Massachusetts Institute of Technology
- *
- * Permission to use, copy, modify, and distribute this software and
- * its documentation for any purpose and without fee is hereby
- * granted, provided that both the above copyright notice and this
- * permission notice appear in all copies, that both the above
- * copyright notice and this permission notice appear in all
- * supporting documentation, and that the name of M.I.T. not be used
- * in advertising or publicity pertaining to distribution of the
- * software without specific, written prior permission.  M.I.T. makes
- * no representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''.  M.I.T. DISCLAIMS
- * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
- * SHALL M.I.T. 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/param.h>
-#include <sys/systm.h>
-
-#include <netinet/in.h>
-
-static const char *hexchars = "0123456789abcdef";
-
-static const char *
-inet_ntop4(const struct in_addr *addr, char *buf, socklen_t len)
-{
-       const u_int8_t *ap = (const u_int8_t *)&addr->s_addr;
-       char tmp[MAX_IPv4_STR_LEN]; /* max length of ipv4 addr string */
-       int fulllen;
-       
-       /*
-        * snprintf returns number of bytes printed (not including NULL) or
-        * number of bytes that would have been printed if more than would
-        * fit
-        */
-       fulllen = snprintf(tmp, sizeof(tmp), "%d.%d.%d.%d",
-                                          ap[0], ap[1], ap[2], ap[3]);
-       if (fulllen >= (int)len) {
-               return NULL;
-       }
-       
-       bcopy(tmp, buf, fulllen + 1);
-       
-       return buf;
-}
-
-static const char *
-inet_ntop6(const struct in6_addr *addr, char *dst, socklen_t size)
-{
-       char hexa[8][5], tmp[MAX_IPv6_STR_LEN];
-       int zr[8];
-       size_t len;
-       int32_t i, j, k, skip;
-       uint8_t x8, hx8;
-       uint16_t x16;
-       struct in_addr a4;
-       
-       if (addr == NULL) return NULL;
-       
-       bzero(tmp, sizeof(tmp));
-       
-       /*  check for mapped or compat addresses */
-       i = IN6_IS_ADDR_V4MAPPED(addr);
-       j = IN6_IS_ADDR_V4COMPAT(addr);
-       if ((i != 0) || (j != 0))
-       {
-               char tmp2[16]; /* max length of ipv4 addr string */
-               a4.s_addr = addr->__u6_addr.__u6_addr32[3];
-               len = snprintf(tmp, sizeof(tmp), "::%s%s", (i != 0) ? "ffff:" : "",
-                                          inet_ntop4(&a4, tmp2, sizeof(tmp2)));
-               if (len >= size) return NULL;
-               bcopy(tmp, dst, len + 1);
-               return dst;
-       }
-       
-       k = 0;
-       for (i = 0; i < 16; i += 2)
-       {
-               j = 0;
-               skip = 1;
-               
-               bzero(hexa[k], 5);
-               
-               x8 = addr->__u6_addr.__u6_addr8[i];
-               
-               hx8 = x8 >> 4;
-               if (hx8 != 0)
-               {
-                       skip = 0;
-                       hexa[k][j++] = hexchars[hx8];
-               }
-               
-               hx8 = x8 & 0x0f;
-               if ((skip == 0) || ((skip == 1) && (hx8 != 0)))
-               {
-                       skip = 0;
-                       hexa[k][j++] = hexchars[hx8];
-               }
-               
-               x8 = addr->__u6_addr.__u6_addr8[i + 1];
-               
-               hx8 = x8 >> 4;
-               if ((skip == 0) || ((skip == 1) && (hx8 != 0)))
-               {
-                       hexa[k][j++] = hexchars[hx8];
-               }
-               
-               hx8 = x8 & 0x0f;
-               hexa[k][j++] = hexchars[hx8];
-               
-               k++;
-       }
-       
-       /* find runs of zeros for :: convention */
-       j = 0;
-       for (i = 7; i >= 0; i--)
-       {
-               zr[i] = j;
-               x16 = addr->__u6_addr.__u6_addr16[i];
-               if (x16 == 0) j++;
-               else j = 0;
-               zr[i] = j;
-       }
-       
-       /* find longest run of zeros */
-       k = -1;
-       j = 0;
-       for(i = 0; i < 8; i++)
-       {
-               if (zr[i] > j)
-               {
-                       k = i;
-                       j = zr[i];
-               }
-       }
-       
-       for(i = 0; i < 8; i++)
-       {
-               if (i != k) zr[i] = 0;
-       }
-       
-       len = 0;
-       for (i = 0; i < 8; i++)
-       {
-               if (zr[i] != 0)
-               {
-                       /* check for leading zero */
-                       if (i == 0) tmp[len++] = ':';
-                       tmp[len++] = ':';
-                       i += (zr[i] - 1);
-                       continue;
-               }
-               for (j = 0; hexa[i][j] != '\0'; j++) tmp[len++] = hexa[i][j];
-               if (i != 7) tmp[len++] = ':';
-       }
-
-       /* trailing NULL */
-       len++;
-
-       if (len > size) return NULL;
-       bcopy(tmp, dst, len);
-       return dst;
-}
-
-const char *
-inet_ntop(int af, const void *addr, char *buf, socklen_t len)
-{
-       if(af==AF_INET6)
-               return inet_ntop6(addr, buf, len);
-       if(af==AF_INET)
-               return inet_ntop4(addr, buf, len);
-       return NULL;
-}