summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/string/fmtip6.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/string/fmtip6.c')
-rw-r--r--usr/src/lib/libast/common/string/fmtip6.c175
1 files changed, 0 insertions, 175 deletions
diff --git a/usr/src/lib/libast/common/string/fmtip6.c b/usr/src/lib/libast/common/string/fmtip6.c
deleted file mode 100644
index 5b1133a12d..0000000000
--- a/usr/src/lib/libast/common/string/fmtip6.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/***********************************************************************
-* *
-* This software is part of the ast package *
-* Copyright (c) 1985-2010 AT&T Intellectual Property *
-* and is licensed under the *
-* Common Public License, Version 1.0 *
-* by AT&T Intellectual Property *
-* *
-* A copy of the License is available at *
-* http://www.opensource.org/licenses/cpl1.0.txt *
-* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
-* *
-* Information and Software Systems Research *
-* AT&T Research *
-* Florham Park NJ *
-* *
-* Glenn Fowler <gsf@research.att.com> *
-* David Korn <dgk@research.att.com> *
-* Phong Vo <kpv@research.att.com> *
-* *
-***********************************************************************/
-#pragma prototyped
-
-#if _PACKAGE_ast
-#include <ast.h>
-#endif
-
-#include <ip6.h>
-
-#if !_PACKAGE_ast
-
-/*
- * return a pointer to n bytes from a circular re-use buffer
- */
-
-static char*
-fmtbuf(int n)
-{
- char* b;
-
- static char buf[1024];
- static char* p = buf;
-
- if ((&buf[sizeof(buf)] - p) < n)
- p = buf;
- b = p;
- p += n;
- return b;
-}
-
-#endif
-
-/*
- * copy p to s, then convert 0<=n<=999 to text
- * next char in s returned
- * caller ensures that s can take strlen(p)+3 bytes
- */
-
-static char*
-dec(char* s, char* p, int n)
-{
- while (*s = *p++)
- s++;
- if (n >= 100)
- *s++ = '0' + ((n / 100) % 10);
- if (n >= 10)
- *s++ = '0' + ((n / 10) % 10);
- *s++ = '0' + (n % 10);
- return s;
-}
-
-/*
- * return pointer to normalized ipv6 address addr
- * with optional prefix bits if 0 < bits <= 128
- * return value in short-term circular buffer
- */
-
-char*
-fmtip6(unsigned char* addr, int bits)
-{
- register unsigned char* a = addr;
- register int n = IP6ADDR;
- register int i;
- register int z;
- register int k;
- register int m;
- unsigned char r[IP6ADDR];
- char* b;
- char* s;
-
- static const char dig[] = "0123456789ABCDEF";
-
- s = b = fmtbuf(44);
- r[m = z = 0] = 0;
- if (a[0] == 0x20 && a[1] == 0x02 && (a[2] || a[3] || a[4] || a[5]))
- {
- z = 6;
- s = dec(s, "2002:", a[2]);
- s = dec(s, ".", a[3]);
- s = dec(s, ".", a[4]);
- s = dec(s, ".", a[5]);
- }
- for (i = z; i < n; i += 2)
- {
- for (k = i; i < n - 1 && !a[i] && !a[i + 1]; i += 2);
- if ((r[k] = i - k) > r[m] || r[k] == r[m] && i >= (n - 1))
- m = k;
- }
- if (!m)
- switch (r[m])
- {
- case 0:
- m = -1;
- break;
- case 14:
- if (!a[14] && a[15] <= 15)
- break;
- /*FALLTHROUGH*/
- case 12:
- s = dec(s, "::", a[12]);
- s = dec(s, ".", a[13]);
- s = dec(s, ".", a[14]);
- s = dec(s, ".", a[15]);
- n = 0;
- break;
- case 10:
- if (a[10] == 0xFF && a[11] == 0xFF)
- {
- s = dec(s, "::FFFF:", a[12]);
- s = dec(s, ".", a[13]);
- s = dec(s, ".", a[14]);
- s = dec(s, ".", a[15]);
- n = 0;
- }
- break;
- }
- for (i = z; i < n; i++)
- {
- if (i == m)
- {
- *s++ = ':';
- *s++ = ':';
- if ((i += r[m]) >= n)
- {
- z = 1;
- break;
- }
- z = 0;
- }
- else if (i && !(i & 1))
- {
- if (z)
- z = 0;
- else
- *s++ = '0';
- *s++ = ':';
- }
- if ((k = (a[i] >> 4) & 0xf) || z)
- {
- z = 1;
- *s++ = dig[k];
- }
- if ((k = a[i] & 0xf) || z)
- {
- z = 1;
- *s++ = dig[k];
- }
- }
- if (!z && *(s - 1) == ':')
- *s++ = '0';
- if (bits > 0 && bits <= 128)
- s = dec(s, "/", bits);
- *s = 0;
- return b;
-}