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

Diff for /mandoc/read.c between version 1.159 and 1.163

version 1.159, 2017/02/03 17:56:59 version 1.163, 2017/03/07 20:00:08
Line 30 
Line 30 
 #include <errno.h>  #include <errno.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <stdarg.h>  #include <stdarg.h>
 #include <stdint.h>  
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
Line 48 
Line 47 
 #define REPARSE_LIMIT   1000  #define REPARSE_LIMIT   1000
   
 struct  mparse {  struct  mparse {
         struct roff_man  *man; /* man parser */  
         struct roff      *roff; /* roff parser (!NULL) */          struct roff      *roff; /* roff parser (!NULL) */
           struct roff_man  *man; /* man parser */
         char             *sodest; /* filename pointed to by .so */          char             *sodest; /* filename pointed to by .so */
         const char       *file; /* filename of current input file */          const char       *file; /* filename of current input file */
         struct buf       *primary; /* buffer currently being parsed */          struct buf       *primary; /* buffer currently being parsed */
Line 67  struct mparse {
Line 66  struct mparse {
   
 static  void      choose_parser(struct mparse *);  static  void      choose_parser(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, size_t, int);  static  int       mparse_buf_r(struct mparse *, struct buf, size_t, int);
 static  int       read_whole_file(struct mparse *, const char *, int,  static  int       read_whole_file(struct mparse *, const char *, int,
                                 struct buf *, int *);                                  struct buf *, int *);
 static  void      mparse_end(struct mparse *);  static  void      mparse_end(struct mparse *);
Line 114  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 113  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "bad NAME section content",          "bad NAME section content",
         "missing comma before name",          "missing comma before name",
         "missing description line, using \"\"",          "missing description line, using \"\"",
           "description line outside NAME section",
         "sections out of conventional order",          "sections out of conventional order",
         "duplicate section title",          "duplicate section title",
         "unexpected section",          "unexpected section",
Line 310  choose_parser(struct mparse *curp)
Line 310  choose_parser(struct mparse *curp)
  * macros, inline equations, and input line traps)   * macros, inline equations, and input line traps)
  * and indirectly (for .so file inclusion).   * and indirectly (for .so file inclusion).
  */   */
 static void  static int
 mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)  mparse_buf_r(struct mparse *curp, struct buf blk, size_t i, int start)
 {  {
         const struct tbl_span   *span;          const struct tbl_span   *span;
Line 511  rerun:
Line 511  rerun:
   
                 switch (rr) {                  switch (rr) {
                 case ROFF_REPARSE:                  case ROFF_REPARSE:
                         if (REPARSE_LIMIT >= ++curp->reparse_count)                          if (++curp->reparse_count > REPARSE_LIMIT)
                                 mparse_buf_r(curp, ln, of, 0);  
                         else  
                                 mandoc_msg(MANDOCERR_ROFFLOOP, curp,                                  mandoc_msg(MANDOCERR_ROFFLOOP, curp,
                                     curp->line, pos, NULL);                                      curp->line, pos, NULL);
                         pos = 0;                          else if (mparse_buf_r(curp, ln, of, 0) == 1 ||
                         continue;                              start == 1) {
                                   pos = 0;
                                   continue;
                           }
                           free(ln.buf);
                           return 0;
                 case ROFF_APPEND:                  case ROFF_APPEND:
                         pos = strlen(ln.buf);                          pos = strlen(ln.buf);
                         continue;                          continue;
Line 531  rerun:
Line 534  rerun:
                             (i >= blk.sz || blk.buf[i] == '\0')) {                              (i >= blk.sz || blk.buf[i] == '\0')) {
                                 curp->sodest = mandoc_strdup(ln.buf + of);                                  curp->sodest = mandoc_strdup(ln.buf + of);
                                 free(ln.buf);                                  free(ln.buf);
                                 return;                                  return 1;
                         }                          }
                         /*                          /*
                          * We remove `so' clauses from our lookaside                           * We remove `so' clauses from our lookaside
Line 597  rerun:
Line 600  rerun:
         }          }
   
         free(ln.buf);          free(ln.buf);
           return 1;
 }  }
   
 static int  static int
 read_whole_file(struct mparse *curp, const char *file, int fd,  read_whole_file(struct mparse *curp, const char *file, int fd,
                 struct buf *fb, int *with_mmap)                  struct buf *fb, int *with_mmap)
 {  {
           struct stat      st;
         gzFile           gz;          gzFile           gz;
         size_t           off;          size_t           off;
         ssize_t          ssz;          ssize_t          ssz;
   
         struct stat      st;  
   
         if (fstat(fd, &st) == -1)          if (fstat(fd, &st) == -1)
                 err((int)MANDOCLEVEL_SYSERR, "%s", file);                  err((int)MANDOCLEVEL_SYSERR, "%s", file);
   
Line 830  mparse_reset(struct mparse *curp)
Line 833  mparse_reset(struct mparse *curp)
 {  {
         roff_reset(curp->roff);          roff_reset(curp->roff);
         roff_man_reset(curp->man);          roff_man_reset(curp->man);
   
           free(curp->sodest);
           curp->sodest = NULL;
   
         if (curp->secondary)          if (curp->secondary)
                 curp->secondary->sz = 0;                  curp->secondary->sz = 0;
   
         curp->file_status = MANDOCLEVEL_OK;          curp->file_status = MANDOCLEVEL_OK;
   
         free(curp->sodest);  
         curp->sodest = NULL;  
         curp->gzip = 0;          curp->gzip = 0;
 }  }
   
Line 845  mparse_free(struct mparse *curp)
Line 849  mparse_free(struct mparse *curp)
 {  {
   
         roff_man_free(curp->man);          roff_man_free(curp->man);
         if (curp->roff)          roff_free(curp->roff);
                 roff_free(curp->roff);  
         if (curp->secondary)          if (curp->secondary)
                 free(curp->secondary->buf);                  free(curp->secondary->buf);
   

Legend:
Removed from v.1.159  
changed lines
  Added in v.1.163

CVSweb