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

Diff for /mandoc/Attic/mmain.c between version 1.8 and 1.10

version 1.8, 2009/03/08 18:50:40 version 1.10, 2009/03/09 13:04:01
Line 41  struct mmain {
Line 41  struct mmain {
         int               dbg;          /* Debug level. */          int               dbg;          /* Debug level. */
         struct mdoc      *mdoc;         /* Active parser. */          struct mdoc      *mdoc;         /* Active parser. */
         char             *buf;          /* Input buffer. */          char             *buf;          /* Input buffer. */
         u_long            bufsz;        /* Input buffer size. */          size_t            bufsz;        /* Input buffer size. */
         char             *in;           /* Input file name. */          char             *in;           /* Input file name. */
         int               fdin;         /* Input file desc. */          int               fdin;         /* Input file desc. */
         int               pflags;       /* Parse flags. */          int               pflags;       /* Parse flags. */
Line 190  mmain_mdoc(struct mmain *p)
Line 190  mmain_mdoc(struct mmain *p)
                 warn("%s", p->in);                  warn("%s", p->in);
                 p->bufsz = BUFSIZ;                  p->bufsz = BUFSIZ;
         } else          } else
                 p->bufsz = MAX(st.st_blksize, BUFSIZ);                  p->bufsz = (size_t)MAX(st.st_blksize, BUFSIZ);
   
         p->buf = malloc(p->bufsz);          p->buf = malloc(p->bufsz);
         if (NULL == p->buf)          if (NULL == p->buf)
Line 217  static int
Line 217  static int
 optsopt(struct mmain *p, char *arg)  optsopt(struct mmain *p, char *arg)
 {  {
         char            *v;          char            *v;
         char            *toks[] = { "ign-scope", "ign-escape", NULL };          char            *toks[] = { "ign-scope", "ign-escape",
                                       "ign-macro", NULL };
   
         while (*arg)          while (*arg)
                 switch (getsubopt(&arg, toks, &v)) {                  switch (getsubopt(&arg, toks, &v)) {
Line 227  optsopt(struct mmain *p, char *arg)
Line 228  optsopt(struct mmain *p, char *arg)
                 case (1):                  case (1):
                         p->pflags |= MDOC_IGN_ESCAPE;                          p->pflags |= MDOC_IGN_ESCAPE;
                         break;                          break;
                   case (2):
                           p->pflags |= MDOC_IGN_MACRO;
                           break;
                 default:                  default:
                         /* FIXME: report? */                          warnx("unknown -f argument");
                         return(0);                          return(0);
                 }                  }
   
Line 258  optswarn(struct mmain *p, char *arg)
Line 262  optswarn(struct mmain *p, char *arg)
                         p->warn |= MD_WARN_ERR;                          p->warn |= MD_WARN_ERR;
                         break;                          break;
                 default:                  default:
                         /* FIXME: report? */                          warnx("unknown -W argument");
                         return(0);                          return(0);
                 }                  }
   
Line 270  static int
Line 274  static int
 parse(struct mmain *p)  parse(struct mmain *p)
 {  {
         ssize_t          sz;          ssize_t          sz;
         int              i, pos, len, lnn;          int              j, i, pos, len, lnn;
         char            *line;          char            *ln;
   
         for (line = NULL, lnn = 1, len = pos = 0; ; ) {          for (ln = NULL, lnn = 1, len = pos = 0; ; ) {
                 if (-1 == (sz = read(p->fdin, p->buf, p->bufsz))) {                  if (-1 == (sz = read(p->fdin, p->buf, p->bufsz))) {
                         warn("%s", p->in);                          warn("%s", p->in);
                         return(0);                          return(0);
Line 283  parse(struct mmain *p)
Line 287  parse(struct mmain *p)
                 for (i = 0; i < (int)sz; i++) {                  for (i = 0; i < (int)sz; i++) {
                         if (pos >= len) {                          if (pos >= len) {
                                 len += MD_LINE_SZ;                                  len += MD_LINE_SZ;
                                 line = realloc(line, len);                                  ln = realloc(ln, (size_t)len);
                                 if (NULL == line)                                  if (NULL == ln)
                                         err(1, "realloc");                                          err(1, "realloc");
                         }                          }
   
                         if ('\n' != p->buf[i]) {                          if ('\n' != p->buf[i]) {
                                 line[pos++] = p->buf[i];                                  ln[pos++] = p->buf[i];
                                 continue;                                  continue;
                         }                          }
   
                         line[pos] = 0;                          /* Check for escaped newline.  */
                         if ( ! mdoc_parseln(p->mdoc, lnn, line))  
                                 return(0);  
   
                           if (pos > 0 && '\\' == ln[pos - 1]) {
                                   for (j = pos - 1; j >= 0; j--)
                                           if ('\\' != ln[j])
                                                   break;
   
                                   if ( ! ((pos - j) % 2)) {
                                           pos--;
                                           lnn++;
                                           continue;
                                   }
                           }
   
                           ln[pos] = 0;
                           if ( ! mdoc_parseln(p->mdoc, lnn, ln))
                                   return(0);
                         lnn++;                          lnn++;
                         pos = 0;                          pos = 0;
                 }                  }
         }          }
   
         if (line)          if (pos > 0)
                 free(line);                  warnx("%s: file not eof-terminated", p->in);
   
           if (ln)
                   free(ln);
         return(mdoc_endparse(p->mdoc));          return(mdoc_endparse(p->mdoc));
 }  }
   

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.10

CVSweb