[BACK]Return to read.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/read.c between version 1.35 and 1.39

version 1.35, 2013/05/30 03:52:59 version 1.39, 2013/09/16 00:25:07
Line 40 
Line 40 
 #include "man.h"  #include "man.h"
 #include "main.h"  #include "main.h"
   
 #ifndef MAP_FILE  
 #define MAP_FILE        0  
 #endif  
   
 #define REPARSE_LIMIT   1000  #define REPARSE_LIMIT   1000
   
 struct  buf {  struct  buf {
Line 71  struct mparse {
Line 67  struct mparse {
   
 static  void      resize_buf(struct buf *, size_t);  static  void      resize_buf(struct buf *, size_t);
 static  void      mparse_buf_r(struct mparse *, struct buf, int);  static  void      mparse_buf_r(struct mparse *, struct buf, int);
 static  void      mparse_readfd_r(struct mparse *, int, const char *, int);  
 static  void      pset(const char *, int, struct mparse *);  static  void      pset(const char *, int, struct mparse *);
 static  int       read_whole_file(const char *, int, struct buf *, int *);  static  int       read_whole_file(const char *, int, struct buf *, int *);
 static  void      mparse_end(struct mparse *);  static  void      mparse_end(struct mparse *);
   static  void      mparse_parse_buffer(struct mparse *, struct buf,
                           const char *);
   
 static  const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {  static  const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {
         MANDOCERR_OK,          MANDOCERR_OK,
Line 109  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 106  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "bad NAME section contents",          "bad NAME section contents",
         "sections out of conventional order",          "sections out of conventional order",
         "duplicate section name",          "duplicate section name",
         "section not in conventional manual section",          "section header suited to sections 2, 3, and 9 only",
   
         /* related to macros and nesting */          /* related to macros and nesting */
         "skipping obsolete macro",          "skipping obsolete macro",
Line 188  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 185  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "macro requires line argument(s)",          "macro requires line argument(s)",
         "macro requires body argument(s)",          "macro requires body argument(s)",
         "macro requires argument(s)",          "macro requires argument(s)",
           "request requires a numeric argument",
         "missing list type",          "missing list type",
         "line argument(s) will be lost",          "line argument(s) will be lost",
         "body argument(s) will be lost",          "body argument(s) will be lost",
Line 490  rerun:
Line 488  rerun:
                          */                           */
                         if (curp->secondary)                          if (curp->secondary)
                                 curp->secondary->sz -= pos + 1;                                  curp->secondary->sz -= pos + 1;
                         mparse_readfd_r(curp, -1, ln.buf + of, 1);                          mparse_readfd(curp, -1, ln.buf + of);
                         if (MANDOCLEVEL_FATAL <= curp->file_status)                          if (MANDOCLEVEL_FATAL <= curp->file_status)
                                 break;                                  break;
                         pos = 0;                          pos = 0;
Line 596  read_whole_file(const char *file, int fd, struct buf *
Line 594  read_whole_file(const char *file, int fd, struct buf *
                 }                  }
                 *with_mmap = 1;                  *with_mmap = 1;
                 fb->sz = (size_t)st.st_size;                  fb->sz = (size_t)st.st_size;
                 fb->buf = mmap(NULL, fb->sz, PROT_READ,                  fb->buf = mmap(NULL, fb->sz, PROT_READ, MAP_SHARED, fd, 0);
                                 MAP_FILE|MAP_SHARED, fd, 0);  
                 if (fb->buf != MAP_FAILED)                  if (fb->buf != MAP_FAILED)
                         return(1);                          return(1);
         }          }
Line 664  mparse_end(struct mparse *curp)
Line 661  mparse_end(struct mparse *curp)
 }  }
   
 static void  static void
 mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file,  mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file)
                 int re)  
 {  {
         const char      *svfile;          const char      *svfile;
           static int       recursion_depth;
   
           if (64 < recursion_depth) {
                   mandoc_msg(MANDOCERR_ROFFLOOP, curp, curp->line, 0, NULL);
                   return;
           }
   
         /* Line number is per-file. */          /* Line number is per-file. */
         svfile = curp->file;          svfile = curp->file;
         curp->file = file;          curp->file = file;
         curp->line = 1;          curp->line = 1;
           recursion_depth++;
   
         mparse_buf_r(curp, blk, 1);          mparse_buf_r(curp, blk, 1);
   
         if (0 == re && MANDOCLEVEL_FATAL > curp->file_status)          if (0 == --recursion_depth && MANDOCLEVEL_FATAL > curp->file_status)
                 mparse_end(curp);                  mparse_end(curp);
   
         curp->file = svfile;          curp->file = svfile;
Line 691  mparse_readmem(struct mparse *curp, const void *buf, s
Line 694  mparse_readmem(struct mparse *curp, const void *buf, s
         blk.buf = UNCONST(buf);          blk.buf = UNCONST(buf);
         blk.sz = len;          blk.sz = len;
   
         mparse_parse_buffer(curp, blk, file, 0);          mparse_parse_buffer(curp, blk, file);
         return(curp->file_status);          return(curp->file_status);
 }  }
   
 static void  enum mandoclevel
 mparse_readfd_r(struct mparse *curp, int fd, const char *file, int re)  mparse_readfd(struct mparse *curp, int fd, const char *file)
 {  {
         struct buf       blk;          struct buf       blk;
         int              with_mmap;          int              with_mmap;
Line 705  mparse_readfd_r(struct mparse *curp, int fd, const cha
Line 708  mparse_readfd_r(struct mparse *curp, int fd, const cha
                 if (-1 == (fd = open(file, O_RDONLY, 0))) {                  if (-1 == (fd = open(file, O_RDONLY, 0))) {
                         perror(file);                          perror(file);
                         curp->file_status = MANDOCLEVEL_SYSERR;                          curp->file_status = MANDOCLEVEL_SYSERR;
                         return;                          goto out;
                 }                  }
         /*          /*
          * Run for each opened file; may be called more than once for           * Run for each opened file; may be called more than once for
Line 716  mparse_readfd_r(struct mparse *curp, int fd, const cha
Line 719  mparse_readfd_r(struct mparse *curp, int fd, const cha
   
         if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {          if ( ! read_whole_file(file, fd, &blk, &with_mmap)) {
                 curp->file_status = MANDOCLEVEL_SYSERR;                  curp->file_status = MANDOCLEVEL_SYSERR;
                 return;                  goto out;
         }          }
   
         mparse_parse_buffer(curp, blk, file, re);          mparse_parse_buffer(curp, blk, file);
   
 #ifdef  HAVE_MMAP  #ifdef  HAVE_MMAP
         if (with_mmap)          if (with_mmap)
Line 730  mparse_readfd_r(struct mparse *curp, int fd, const cha
Line 733  mparse_readfd_r(struct mparse *curp, int fd, const cha
   
         if (STDIN_FILENO != fd && -1 == close(fd))          if (STDIN_FILENO != fd && -1 == close(fd))
                 perror(file);                  perror(file);
 }  out:
   
 enum mandoclevel  
 mparse_readfd(struct mparse *curp, int fd, const char *file)  
 {  
   
         mparse_readfd_r(curp, fd, file, 0);  
         return(curp->file_status);          return(curp->file_status);
 }  }
   

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.39

CVSweb