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

Diff for /mandoc/read.c between version 1.150.2.8 and 1.167

version 1.150.2.8, 2017/02/18 17:33:24 version 1.167, 2017/05/31 15:31:00
Line 19 
Line 19 
 #include "config.h"  #include "config.h"
   
 #include <sys/types.h>  #include <sys/types.h>
 #if HAVE_MMAP  
 #include <sys/mman.h>  #include <sys/mman.h>
 #include <sys/stat.h>  #include <sys/stat.h>
 #endif  
   
 #include <assert.h>  #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
Line 68  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 77  static void   mparse_parse_buffer(struct mparse *, str
Line 75  static void   mparse_parse_buffer(struct mparse *, str
   
 static  const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {  static  const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {
         MANDOCERR_OK,          MANDOCERR_OK,
           MANDOCERR_STYLE,
         MANDOCERR_WARNING,          MANDOCERR_WARNING,
         MANDOCERR_WARNING,  
         MANDOCERR_ERROR,          MANDOCERR_ERROR,
         MANDOCERR_UNSUPP,          MANDOCERR_UNSUPP,
         MANDOCERR_MAX,          MANDOCERR_MAX,
Line 88  static const enum mandocerr mandoclimits[MANDOCLEVEL_M
Line 86  static const enum mandocerr mandoclimits[MANDOCLEVEL_M
 static  const char * const      mandocerrs[MANDOCERR_MAX] = {  static  const char * const      mandocerrs[MANDOCERR_MAX] = {
         "ok",          "ok",
   
           "generic style suggestion",
   
           "useless macro",
           "consider using OS macro",
   
         "generic warning",          "generic warning",
   
         /* related to the prologue */          /* related to the prologue */
Line 115  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 118  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 242  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 246  static const char * const mandocerrs[MANDOCERR_MAX] = 
   
 static  const char * const      mandoclevels[MANDOCLEVEL_MAX] = {  static  const char * const      mandoclevels[MANDOCLEVEL_MAX] = {
         "SUCCESS",          "SUCCESS",
         "RESERVED",          "STYLE",
         "WARNING",          "WARNING",
         "ERROR",          "ERROR",
         "UNSUPP",          "UNSUPP",
Line 294  choose_parser(struct mparse *curp)
Line 298  choose_parser(struct mparse *curp)
         }          }
   
         if (format == MPARSE_MDOC) {          if (format == MPARSE_MDOC) {
                 mdoc_hash_init();  
                 curp->man->macroset = MACROSET_MDOC;                  curp->man->macroset = MACROSET_MDOC;
                 curp->man->first->tok = TOKEN_NONE;                  if (curp->man->mdocmac == NULL)
                           curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
         } else {          } else {
                 man_hash_init();  
                 curp->man->macroset = MACROSET_MAN;                  curp->man->macroset = MACROSET_MAN;
                 curp->man->first->tok = TOKEN_NONE;                  if (curp->man->manmac == NULL)
                           curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
         }          }
           curp->man->first->tok = TOKEN_NONE;
 }  }
   
 /*  /*
Line 311  choose_parser(struct mparse *curp)
Line 316  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 512  rerun:
Line 517  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 532  rerun:
Line 540  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 598  rerun:
Line 606  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)
 {  {
 #if HAVE_MMAP  
         struct stat      st;          struct stat      st;
 #endif  
         gzFile           gz;          gzFile           gz;
         size_t           off;          size_t           off;
         ssize_t          ssz;          ssize_t          ssz;
   
 #if HAVE_MMAP  
         if (fstat(fd, &st) == -1)          if (fstat(fd, &st) == -1)
                 err((int)MANDOCLEVEL_SYSERR, "%s", file);                  err((int)MANDOCLEVEL_SYSERR, "%s", file);
   
Line 633  read_whole_file(struct mparse *curp, const char *file,
Line 639  read_whole_file(struct mparse *curp, const char *file,
                 if (fb->buf != MAP_FAILED)                  if (fb->buf != MAP_FAILED)
                         return 1;                          return 1;
         }          }
 #endif  
   
         if (curp->gzip) {          if (curp->gzip) {
                 if ((gz = gzdopen(fd, "rb")) == NULL)                  if ((gz = gzdopen(fd, "rb")) == NULL)
Line 758  mparse_readfd(struct mparse *curp, int fd, const char 
Line 763  mparse_readfd(struct mparse *curp, int fd, const char 
                     (MPARSE_UTF8 | MPARSE_LATIN1);                      (MPARSE_UTF8 | MPARSE_LATIN1);
                 mparse_parse_buffer(curp, blk, file);                  mparse_parse_buffer(curp, blk, file);
                 curp->filenc = save_filenc;                  curp->filenc = save_filenc;
 #if HAVE_MMAP  
                 if (with_mmap)                  if (with_mmap)
                         munmap(blk.buf, blk.sz);                          munmap(blk.buf, blk.sz);
                 else                  else
 #endif  
                         free(blk.buf);                          free(blk.buf);
         }          }
         return curp->file_status;          return curp->file_status;
Line 821  mparse_alloc(int options, enum mandoclevel wlevel, man
Line 824  mparse_alloc(int options, enum mandoclevel wlevel, man
         curp->man = roff_man_alloc( curp->roff, curp, curp->defos,          curp->man = roff_man_alloc( curp->roff, curp, curp->defos,
                 curp->options & MPARSE_QUICK ? 1 : 0);                  curp->options & MPARSE_QUICK ? 1 : 0);
         if (curp->options & MPARSE_MDOC) {          if (curp->options & MPARSE_MDOC) {
                 mdoc_hash_init();  
                 curp->man->macroset = MACROSET_MDOC;                  curp->man->macroset = MACROSET_MDOC;
                   if (curp->man->mdocmac == NULL)
                           curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
         } else if (curp->options & MPARSE_MAN) {          } else if (curp->options & MPARSE_MAN) {
                 man_hash_init();  
                 curp->man->macroset = MACROSET_MAN;                  curp->man->macroset = MACROSET_MAN;
                   if (curp->man->manmac == NULL)
                           curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
         }          }
         curp->man->first->tok = TOKEN_NONE;          curp->man->first->tok = TOKEN_NONE;
         return curp;          return curp;
Line 851  void
Line 856  void
 mparse_free(struct mparse *curp)  mparse_free(struct mparse *curp)
 {  {
   
           roffhash_free(curp->man->mdocmac);
           roffhash_free(curp->man->manmac);
         roff_man_free(curp->man);          roff_man_free(curp->man);
         roff_free(curp->roff);          roff_free(curp->roff);
         if (curp->secondary)          if (curp->secondary)

Legend:
Removed from v.1.150.2.8  
changed lines
  Added in v.1.167

CVSweb