125987Ssklower /* 225987Ssklower * Copyright (c) 1986 Regents of the University of California. 335361Sbostic * All rights reserved. 425987Ssklower * 542626Sbostic * %sccs.include.redist.c% 625987Ssklower */ 725987Ssklower 826638Sdonn #if defined(LIBC_SCCS) && !defined(lint) 9*46604Sbostic static char sccsid[] = "@(#)ns_ntoa.c 6.6 (Berkeley) 02/24/91"; 1035361Sbostic #endif /* LIBC_SCCS and not lint */ 1125987Ssklower 12*46604Sbostic #include <sys/param.h> 1325987Ssklower #include <netns/ns.h> 14*46604Sbostic #include <stdio.h> 1525987Ssklower 1625987Ssklower char * 1725987Ssklower ns_ntoa(addr) 18*46604Sbostic struct ns_addr addr; 1925987Ssklower { 2025987Ssklower static char obuf[40]; 2126073Ssklower union { union ns_net net_e; u_long long_e; } net; 2225987Ssklower u_short port = htons(addr.x_port); 2325987Ssklower register char *cp; 2425987Ssklower char *cp2; 2525987Ssklower register u_char *up = addr.x_host.c_host; 2625987Ssklower u_char *uplim = up + 6; 27*46604Sbostic static char *spectHex(); 2825987Ssklower 2926073Ssklower net.net_e = addr.x_net; 3026073Ssklower sprintf(obuf, "%lx", ntohl(net.long_e)); 3125987Ssklower cp = spectHex(obuf); 3225987Ssklower cp2 = cp + 1; 3325987Ssklower while (*up==0 && up < uplim) up++; 3426073Ssklower if (up == uplim) { 3526073Ssklower if (port) { 3626073Ssklower sprintf(cp, ".0"); 3726073Ssklower cp += 2; 3826073Ssklower } 3926073Ssklower } else { 4026073Ssklower sprintf(cp, ".%x", *up++); 4126073Ssklower while (up < uplim) { 4226073Ssklower while (*cp) cp++; 4326073Ssklower sprintf(cp, "%02x", *up++); 4426073Ssklower } 4526073Ssklower cp = spectHex(cp2); 4625987Ssklower } 4725987Ssklower if (port) { 4825987Ssklower sprintf(cp, ".%x", port); 4925987Ssklower spectHex(cp + 1); 5025987Ssklower } 5125987Ssklower return (obuf); 5225987Ssklower } 5325987Ssklower 5425987Ssklower static char * 5525987Ssklower spectHex(p0) 56*46604Sbostic char *p0; 5725987Ssklower { 5825987Ssklower int ok = 0; 5925987Ssklower int nonzero = 0; 6025987Ssklower register char *p = p0; 6125987Ssklower for (; *p; p++) switch (*p) { 6225987Ssklower 6325987Ssklower case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': 6425987Ssklower *p += ('A' - 'a'); 6525987Ssklower /* fall into . . . */ 6625987Ssklower case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': 6725987Ssklower ok = 1; 6825987Ssklower case '1': case '2': case '3': case '4': case '5': 6925987Ssklower case '6': case '7': case '8': case '9': 7025987Ssklower nonzero = 1; 7125987Ssklower } 7225987Ssklower if (nonzero && !ok) { *p++ = 'H'; *p = 0; } 7325987Ssklower return (p); 7425987Ssklower } 75