[BACK]Return to ns_parse.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / nameser

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/nameser/ns_parse.c between version 1.6 and 1.6.4.1

version 1.6, 2008/06/21 20:41:48 version 1.6.4.1, 2011/01/06 21:42:48
Line 20 
Line 20 
 #include <sys/cdefs.h>  #include <sys/cdefs.h>
 #ifndef lint  #ifndef lint
 #ifdef notdef  #ifdef notdef
 static const char rcsid[] = "Id: ns_parse.c,v 1.9 2007/08/27 03:32:26 marka Exp";  static const char rcsid[] = "Id: ns_parse.c,v 1.10 2009/01/23 19:59:16 each Exp";
 #else  #else
 __RCSID("$NetBSD$");  __RCSID("$NetBSD$");
 #endif  #endif
Line 54  static void setsection(ns_msg *msg, ns_s
Line 54  static void setsection(ns_msg *msg, ns_s
         do { errno = (err); if (errno == errno) return (-1); } while (0)          do { errno = (err); if (errno == errno) return (-1); } while (0)
 #endif  #endif
   
   #define PARSE_FMT_PRESO 0       /* Parse using presentation-format names */
   #define PARSE_FMT_WIRE 1        /* Parse using network-format names */
   
 /* Public. */  /* Public. */
   
 /* These need to be in the same order as the nres.h:ns_flag enum. */  /* These need to be in the same order as the nres.h:ns_flag enum. */
Line 109  ns_initparse(const u_char *msg, int msgl
Line 112  ns_initparse(const u_char *msg, int msgl
         const u_char *eom = msg + msglen;          const u_char *eom = msg + msglen;
         int i;          int i;
   
         memset(handle, 0x5e, sizeof *handle);  
         handle->_msg = msg;          handle->_msg = msg;
         handle->_eom = eom;          handle->_eom = eom;
         if (msg + NS_INT16SZ > eom)          if (msg + NS_INT16SZ > eom)
Line 201  ns_parserr(ns_msg *handle, ns_sect secti
Line 203  ns_parserr(ns_msg *handle, ns_sect secti
         return (0);          return (0);
 }  }
   
   /*
    * This is identical to the above but uses network-format (uncompressed) names.
    */
   int
   ns_parserr2(ns_msg *handle, ns_sect section, int rrnum, ns_rr2 *rr) {
           int b;
           int tmp;
   
           /* Make section right. */
           tmp = section;
           if (tmp < 0 || section >= ns_s_max)
                   RETERR(ENODEV);
           if (section != handle->_sect)
                   setsection(handle, section);
   
           /* Make rrnum right. */
           if (rrnum == -1)
                   rrnum = handle->_rrnum;
           if (rrnum < 0 || rrnum >= handle->_counts[(int)section])
                   RETERR(ENODEV);
           if (rrnum < handle->_rrnum)
                   setsection(handle, section);
           if (rrnum > handle->_rrnum) {
                   b = ns_skiprr(handle->_msg_ptr, handle->_eom, section,
                                 rrnum - handle->_rrnum);
   
                   if (b < 0)
                           return (-1);
                   handle->_msg_ptr += b;
                   handle->_rrnum = rrnum;
           }
   
           /* Do the parse. */
           b = ns_name_unpack2(handle->_msg, handle->_eom, handle->_msg_ptr,
                               rr->nname, NS_MAXNNAME, &rr->nnamel);
           if (b < 0)
                   return (-1);
           handle->_msg_ptr += b;
           if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom)
                   RETERR(EMSGSIZE);
           NS_GET16(rr->type, handle->_msg_ptr);
           NS_GET16(rr->rr_class, handle->_msg_ptr);
           if (section == ns_s_qd) {
                   rr->ttl = 0;
                   rr->rdlength = 0;
                   rr->rdata = NULL;
           } else {
                   if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom)
                           RETERR(EMSGSIZE);
                   NS_GET32(rr->ttl, handle->_msg_ptr);
                   NS_GET16(rr->rdlength, handle->_msg_ptr);
                   if (handle->_msg_ptr + rr->rdlength > handle->_eom)
                           RETERR(EMSGSIZE);
                   rr->rdata = handle->_msg_ptr;
                   handle->_msg_ptr += rr->rdlength;
           }
           if (++handle->_rrnum > handle->_counts[(int)section])
                   setsection(handle, (ns_sect)((int)section + 1));
   
           /* All done. */
           return (0);
   }
   
 /* Private. */  /* Private. */
   
 static void  static void

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.6.4.1

CVSweb <webmaster@jp.NetBSD.org>