Annotation of 43BSDTahoe/lib/libc/ns/ns_ntoa.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.