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