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

Diff for /mandoc/read.c between version 1.196 and 1.197

version 1.196, 2018/07/28 18:34:15 version 1.197, 2018/08/23 14:29:38
Line 62  struct mparse {
Line 62  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  int       mparse_buf_r(struct mparse *, struct buf, size_t, int);  static  enum rofferr 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 233  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 233  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "input stack limit exceeded, infinite loop?",          "input stack limit exceeded, infinite loop?",
         "skipping bad character",          "skipping bad character",
         "skipping unknown macro",          "skipping unknown macro",
           "ignoring request outside macro",
         "skipping insecure request",          "skipping insecure request",
         "skipping item outside list",          "skipping item outside list",
         "skipping column outside column list",          "skipping column outside column list",
Line 243  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 244  static const char * const mandocerrs[MANDOCERR_MAX] = 
   
         /* related to request and macro arguments */          /* related to request and macro arguments */
         "escaped character not allowed in a name",          "escaped character not allowed in a name",
           "using macro argument outside macro",
           "argument number is not numeric",
         "NOT IMPLEMENTED: Bd -file",          "NOT IMPLEMENTED: Bd -file",
         "skipping display without arguments",          "skipping display without arguments",
         "missing list type, using -item",          "missing list type, using -item",
Line 251  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 254  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "uname(3) system call failed, using UNKNOWN",          "uname(3) system call failed, using UNKNOWN",
         "unknown standard specifier",          "unknown standard specifier",
         "skipping request without numeric argument",          "skipping request without numeric argument",
           "excessive shift",
         "NOT IMPLEMENTED: .so with absolute path or \"..\"",          "NOT IMPLEMENTED: .so with absolute path or \"..\"",
         ".so request failed",          ".so request failed",
         "skipping all arguments",          "skipping all arguments",
Line 338  choose_parser(struct mparse *curp)
Line 342  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 int  static enum rofferr
 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)
 {  {
         struct buf       ln;          struct buf       ln;
         const char      *save_file;          const char      *save_file;
         char            *cp;          char            *cp;
         size_t           pos; /* byte number in the ln buffer */          size_t           pos; /* byte number in the ln buffer */
         enum rofferr     rr;          enum rofferr     line_result, sub_result;
         int              of;          int              of;
         int              lnn; /* line number in the real file */          int              lnn; /* line number in the real file */
         int              fd;          int              fd;
Line 468  mparse_buf_r(struct mparse *curp, struct buf blk, size
Line 472  mparse_buf_r(struct mparse *curp, struct buf blk, size
                                 [curp->secondary->sz] = '\0';                                  [curp->secondary->sz] = '\0';
                 }                  }
 rerun:  rerun:
                 rr = roff_parseln(curp->roff, curp->line, &ln, &of);                  line_result = roff_parseln(curp->roff, curp->line, &ln, &of);
   
                 switch (rr) {                  switch (line_result) {
                 case ROFF_REPARSE:                  case ROFF_REPARSE:
                         if (++curp->reparse_count > REPARSE_LIMIT)                  case ROFF_USERCALL:
                           if (++curp->reparse_count > REPARSE_LIMIT) {
                                   sub_result = ROFF_IGN;
                                 mandoc_msg(MANDOCERR_ROFFLOOP, curp,                                  mandoc_msg(MANDOCERR_ROFFLOOP, curp,
                                     curp->line, pos, NULL);                                      curp->line, pos, NULL);
                         else if (mparse_buf_r(curp, ln, of, 0) == 1 ||                          } else {
                             start == 1) {                                  sub_result = mparse_buf_r(curp, ln, of, 0);
                                   if (line_result == ROFF_USERCALL) {
                                           if (sub_result == ROFF_USERRET)
                                                   sub_result = ROFF_CONT;
                                           roff_userret(curp->roff);
                                   }
                                   if (start || sub_result == ROFF_CONT) {
                                           pos = 0;
                                           continue;
                                   }
                           }
                           free(ln.buf);
                           return sub_result;
                   case ROFF_USERRET:
                           if (start) {
                                 pos = 0;                                  pos = 0;
                                 continue;                                  continue;
                         }                          }
                         free(ln.buf);                          free(ln.buf);
                         return 0;                          return ROFF_USERRET;
                 case ROFF_APPEND:                  case ROFF_APPEND:
                         pos = strlen(ln.buf);                          pos = strlen(ln.buf);
                         continue;                          continue;
Line 495  rerun:
Line 515  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 1;                                  return ROFF_CONT;
                         }                          }
                         /*                          /*
                          * We remove `so' clauses from our lookaside                           * We remove `so' clauses from our lookaside
Line 547  rerun:
Line 567  rerun:
         }          }
   
         free(ln.buf);          free(ln.buf);
         return 1;          return ROFF_CONT;
 }  }
   
 static int  static int

Legend:
Removed from v.1.196  
changed lines
  Added in v.1.197

CVSweb