|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1986 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: * ! 6: */ ! 7: ! 8: #if defined(LIBC_SCCS) && !defined(lint) ! 9: static char sccsid[] = "@(#)ns_ntoa.c 6.3 (Berkeley) 3/9/86"; ! 10: #endif LIBC_SCCS and not lint ! 11: ! 12: #include <sys/types.h> ! 13: #include <netns/ns.h> ! 14: ! 15: char * ! 16: ns_ntoa(addr) ! 17: struct ns_addr addr; ! 18: { ! 19: static char obuf[40]; ! 20: char *spectHex(); ! 21: union { union ns_net net_e; u_long long_e; } net; ! 22: u_short port = htons(addr.x_port); ! 23: register char *cp; ! 24: char *cp2; ! 25: register u_char *up = addr.x_host.c_host; ! 26: u_char *uplim = up + 6; ! 27: ! 28: net.net_e = addr.x_net; ! 29: sprintf(obuf, "%lx", ntohl(net.long_e)); ! 30: cp = spectHex(obuf); ! 31: cp2 = cp + 1; ! 32: while (*up==0 && up < uplim) up++; ! 33: if (up == uplim) { ! 34: if (port) { ! 35: sprintf(cp, ".0"); ! 36: cp += 2; ! 37: } ! 38: } else { ! 39: sprintf(cp, ".%x", *up++); ! 40: while (up < uplim) { ! 41: while (*cp) cp++; ! 42: sprintf(cp, "%02x", *up++); ! 43: } ! 44: cp = spectHex(cp2); ! 45: } ! 46: if (port) { ! 47: sprintf(cp, ".%x", port); ! 48: spectHex(cp + 1); ! 49: } ! 50: return (obuf); ! 51: } ! 52: ! 53: static char * ! 54: spectHex(p0) ! 55: char *p0; ! 56: { ! 57: int ok = 0; ! 58: int nonzero = 0; ! 59: register char *p = p0; ! 60: for (; *p; p++) switch (*p) { ! 61: ! 62: case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': ! 63: *p += ('A' - 'a'); ! 64: /* fall into . . . */ ! 65: case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': ! 66: ok = 1; ! 67: case '1': case '2': case '3': case '4': case '5': ! 68: case '6': case '7': case '8': case '9': ! 69: nonzero = 1; ! 70: } ! 71: if (nonzero && !ok) { *p++ = 'H'; *p = 0; } ! 72: return (p); ! 73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.