(linenum→info "unix/slp.c:2238")

glibc/2.7/resolv/nsap_addr.c

    1: /*
    2:  * Copyright (c) 1996-1999 by Internet Software Consortium.
    3:  *
    4:  * Permission to use, copy, modify, and distribute this software for any
    5:  * purpose with or without fee is hereby granted, provided that the above
    6:  * copyright notice and this permission notice appear in all copies.
    7:  *
    8:  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
    9:  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
   10:  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
   11:  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
   12:  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
   13:  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
   14:  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
   15:  * SOFTWARE.
   16:  */
   17: 
   18: #if defined(LIBC_SCCS) && !defined(lint)
   19: static const char rcsid[] = "$BINDId: nsap_addr.c,v 8.10 1999/10/13 16:39:28 vixie Exp $";
   20: #endif /* LIBC_SCCS and not lint */
   21: 
   22: #include <sys/types.h>
   23: #include <sys/param.h>
   24: #include <sys/socket.h>
   25: 
   26: #include <netinet/in.h>
   27: #include <arpa/inet.h>
   28: #include <arpa/nameser.h>
   29: 
   30: #include <ctype.h>
   31: #include <resolv.h>
   32: 
   33: static char
   34: xtob(int c) {
   35:         return (c - (((c >= '0') && (c <= '9')) ? '0' : '7'));
   36: }
   37: 
   38: u_int
   39: inet_nsap_addr(const char *ascii, u_char *binary, int maxlen) {
   40:         u_char c, nib;
   41:         u_int len = 0;
   42: 
   43:         while ((c = *ascii++) != '\0' && len < (u_int)maxlen) {
   44:                 if (c == '.' || c == '+' || c == '/')
   45:                         continue;
   46:                 if (!isascii(c))
   47:                         return (0);
   48:                 c = toupper(c);
   49:                 if (isxdigit(c)) {
   50:                         nib = xtob(c);
   51:                         c = *ascii++;
   52:                         if (c != '\0') {
   53:                                 c = toupper(c);
   54:                                 if (isxdigit(c)) {
   55:                                         *binary++ = (nib << 4) | xtob(c);
   56:                                         len++;
   57:                                 } else
   58:                                         return (0);
   59:                         }
   60:                         else
   61:                                 return (0);
   62:                 }
   63:                 else
   64:                         return (0);
   65:         }
   66:         return (len);
   67: }
   68: 
   69: char *
   70: inet_nsap_ntoa(int binlen, const u_char *binary, char *ascii) {
   71:         int nib;
   72:         int i;
   73:         static char tmpbuf[255*2 + 128];
   74:         char *start;
   75: 
   76:         if (ascii)
   77:                 start = ascii;
   78:         else {
   79:                 ascii = tmpbuf;
   80:                 start = tmpbuf;
   81:         }
   82: 
   83:         if (binlen > 255)
   84:                 binlen = 255;
   85: 
   86:         for (i = 0; i < binlen; i++) {
   87:                 nib = *binary >> 4;
   88:                 *ascii++ = nib + (nib < 10 ? '0' : '7');
   89:                 nib = *binary++ & 0x0f;
   90:                 *ascii++ = nib + (nib < 10 ? '0' : '7');
   91:                 if (((i % 2) == 0 && (i + 1) < binlen))
   92:                         *ascii++ = '.';
   93:         }
   94:         *ascii = '\0';
   95:         return (start);
   96: }
Syntax (Markdown)