Annotation of researchv10no/ipc/libin/in_ntoa.c, revision 1.1.1.1

1.1       root        1: #include <sys/inet/in.h>
                      2: #include <ctype.h>
                      3: 
                      4: /*
                      5:  * Convert network-format internet address
                      6:  * to base 256 d.d.d.d representation.
                      7:  */
                      8: char *
                      9: in_ntoa(in)
                     10:        in_addr in;
                     11: {
                     12:        register char *p;
                     13:        static char b[18];
                     14: #define        UC(b)   (((int)b)&0xff)
                     15: 
                     16:        /*
                     17:         *  number of network bytes depends on network class
                     18:         */
                     19:        p = (char *)&in;
                     20:        if(IN_CLASSC(in)) {
                     21:                if((in & IN_CLASSC_HOST)==0){
                     22:                        sprintf(b, "%d.%d.%d", UC(p[3]), UC(p[2]), UC(p[1]));
                     23:                        return b;
                     24:                }
                     25:        } else if(IN_CLASSB(in)) {
                     26:                if((in & IN_CLASSB_HOST)==0){
                     27:                        sprintf(b, "%d.%d", UC(p[3]), UC(p[2]));
                     28:                        return b;
                     29:                }
                     30:        } else {
                     31:                if((in & IN_CLASSA_HOST)==0){
                     32:                        sprintf(b, "%d", UC(p[3]));
                     33:                        return b;
                     34:                }
                     35:        }
                     36:        sprintf(b, "%d.%d.%d.%d", UC(p[3]), UC(p[2]), UC(p[1]), UC(p[0]));
                     37:        return b;
                     38: }
                     39: 
                     40: /*
                     41:  *  Convert base 256 d.d.d.d representation
                     42:  *  to network-format internet address.
                     43:  */
                     44: in_addr
                     45: in_aton(s)
                     46:        register char *s;
                     47: {
                     48:        register int b;
                     49:        register int x, i;
                     50:        in_addr h, n;
                     51: 
                     52:        /*
                     53:         *  first bytee determines class of network
                     54:         */
                     55:        for(b = 0; *s; s++){
                     56:                if(*s=='.'){
                     57:                        s++;
                     58:                        break;
                     59:                } else if(isdigit(*s)) {
                     60:                        b = b*10 + (*s - '0');
                     61:                } else
                     62:                        return INADDR_ANY;
                     63:        }
                     64: 
                     65:        /*
                     66:         *  number of network bytes depends on network class
                     67:         */
                     68:        n = b<<24;
                     69:        if(IN_CLASSC(n))
                     70:                x = 0;          /* 2 more net bytes */
                     71:        else if(IN_CLASSB(n))
                     72:                x = 1;          /* 1 more net bytes */
                     73:        else
                     74:                x = 2;          /* no more net bytes */
                     75: 
                     76:        /*
                     77:         *  get network bytes
                     78:         */
                     79:        for(i = 2; i>x; i--){
                     80:                for(b = 0; *s; s++){
                     81:                        if(*s=='.'){
                     82:                                s++;
                     83:                                break;
                     84:                        }
                     85:                        b = b*10 + (*s - '0');
                     86:                }
                     87:                n |= b<<(8*i);
                     88:        }
                     89: 
                     90:        /*
                     91:         *  get host bytes
                     92:         */
                     93:        h = 0;
                     94:        while(*s){
                     95:                for(b = 0; *s; s++){
                     96:                        if(*s=='.'){
                     97:                                s++;
                     98:                                break;
                     99:                        }
                    100:                        b = b*10 + (*s - '0');
                    101:                }
                    102:                h = (h<<8) + b;
                    103:        }
                    104: 
                    105:        return h | n;
                    106: }

unix.superglobalmegacorp.com

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