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

Diff for /mandoc/read.c between version 1.104 and 1.107

version 1.104, 2014/12/01 04:14:14 version 1.107, 2015/01/14 17:49:15
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2012 Joerg Sonnenberger <joerg@netbsd.org>   * Copyright (c) 2010, 2012 Joerg Sonnenberger <joerg@netbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 188  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 188  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "ignore data in cell",          "ignore data in cell",
         "data block still open",          "data block still open",
         "ignoring extra data cells",          "ignoring extra data cells",
           "ignoring macro in table",
   
         /* related to document structure and macros */          /* related to document structure and macros */
         "input stack limit exceeded, infinite loop?",          "input stack limit exceeded, infinite loop?",
Line 219  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 220  static const char * const mandocerrs[MANDOCERR_MAX] = 
         ".so request failed",          ".so request failed",
   
         /* system errors */          /* system errors */
         "cannot dup file descriptor",  
         "cannot exec",  
         "gunzip failed with code",          "gunzip failed with code",
         "cannot fork",  
         NULL,          NULL,
         "cannot open pipe",  
         "cannot read file",  
         "gunzip died from signal",          "gunzip died from signal",
         "cannot stat file",  
         "wait failed",  
 };  };
   
 static  const char * const      mandoclevels[MANDOCLEVEL_MAX] = {  static  const char * const      mandoclevels[MANDOCLEVEL_MAX] = {
Line 297  choose_parser(struct mparse *curp)
Line 291  choose_parser(struct mparse *curp)
         /* Fall back to man(7) as a last resort. */          /* Fall back to man(7) as a last resort. */
   
         if (NULL == curp->pman)          if (NULL == curp->pman)
                 curp->pman = man_alloc(curp->roff, curp,                  curp->pman = man_alloc(
                       curp->roff, curp, curp->defos,
                     MPARSE_QUICK & curp->options ? 1 : 0);                      MPARSE_QUICK & curp->options ? 1 : 0);
         assert(curp->pman);          assert(curp->pman);
         curp->man = curp->pman;          curp->man = curp->pman;
Line 609  read_whole_file(struct mparse *curp, const char *file,
Line 604  read_whole_file(struct mparse *curp, const char *file,
 #if HAVE_MMAP  #if HAVE_MMAP
         struct stat      st;          struct stat      st;
         if (-1 == fstat(fd, &st)) {          if (-1 == fstat(fd, &st)) {
                 curp->file_status = MANDOCLEVEL_SYSERR;                  perror(file);
                 if (curp->mmsg)                  exit((int)MANDOCLEVEL_SYSERR);
                         (*curp->mmsg)(MANDOCERR_SYSSTAT, curp->file_status,  
                             file, 0, 0, strerror(errno));  
                 return(0);  
         }          }
   
         /*          /*
Line 666  read_whole_file(struct mparse *curp, const char *file,
Line 658  read_whole_file(struct mparse *curp, const char *file,
                         return(1);                          return(1);
                 }                  }
                 if (ssz == -1) {                  if (ssz == -1) {
                         curp->file_status = MANDOCLEVEL_SYSERR;                          perror(file);
                         if (curp->mmsg)                          exit((int)MANDOCLEVEL_SYSERR);
                                 (*curp->mmsg)(MANDOCERR_SYSREAD,  
                                     curp->file_status, file, 0, 0,  
                                     strerror(errno));  
                         break;  
                 }                  }
                 off += (size_t)ssz;                  off += (size_t)ssz;
         }          }
Line 695  mparse_end(struct mparse *curp)
Line 683  mparse_end(struct mparse *curp)
                         curp->mdoc = curp->pmdoc;                          curp->mdoc = curp->pmdoc;
                 else {                  else {
                         if (curp->pman == NULL)                          if (curp->pman == NULL)
                                 curp->pman = man_alloc(curp->roff, curp,                                  curp->pman = man_alloc(
                                       curp->roff, curp, curp->defos,
                                     curp->options & MPARSE_QUICK ? 1 : 0);                                      curp->options & MPARSE_QUICK ? 1 : 0);
                         curp->man = curp->pman;                          curp->man = curp->pman;
                 }                  }
Line 849  mparse_open(struct mparse *curp, int *fd, const char *
Line 838  mparse_open(struct mparse *curp, int *fd, const char *
         /* Run gunzip(1). */          /* Run gunzip(1). */
   
         if (pipe(pfd) == -1) {          if (pipe(pfd) == -1) {
                 err = MANDOCERR_SYSPIPE;                  perror("pipe");
                 goto out;                  exit((int)MANDOCLEVEL_SYSERR);
         }          }
   
         switch (curp->child = fork()) {          switch (curp->child = fork()) {
         case -1:          case -1:
                 err = MANDOCERR_SYSFORK;                  perror("fork");
                 close(pfd[0]);                  exit((int)MANDOCLEVEL_SYSERR);
                 close(pfd[1]);  
                 pfd[1] = -1;  
                 break;  
         case 0:          case 0:
                 close(pfd[0]);                  close(pfd[0]);
                 if (dup2(pfd[1], STDOUT_FILENO) == -1) {                  if (dup2(pfd[1], STDOUT_FILENO) == -1) {
                         err = MANDOCERR_SYSDUP;                          perror("dup");
                         break;                          exit((int)MANDOCLEVEL_SYSERR);
                 }                  }
                 execlp("gunzip", "gunzip", "-c", file, NULL);                  execlp("gunzip", "gunzip", "-c", file, NULL);
                 err = MANDOCERR_SYSEXEC;                  perror("exec");
                 break;                  exit((int)MANDOCLEVEL_SYSERR);
         default:          default:
                 close(pfd[1]);                  close(pfd[1]);
                 *fd = pfd[0];                  *fd = pfd[0];
Line 897  mparse_wait(struct mparse *curp)
Line 883  mparse_wait(struct mparse *curp)
                 return(MANDOCLEVEL_OK);                  return(MANDOCLEVEL_OK);
   
         if (waitpid(curp->child, &status, 0) == -1) {          if (waitpid(curp->child, &status, 0) == -1) {
                 mandoc_msg(MANDOCERR_SYSWAIT, curp, 0, 0,                  perror("wait");
                     strerror(errno));                  exit((int)MANDOCLEVEL_SYSERR);
                 curp->file_status = MANDOCLEVEL_SYSERR;  
                 return(curp->file_status);  
         }          }
         if (WIFSIGNALED(status)) {          if (WIFSIGNALED(status)) {
                 mandoc_vmsg(MANDOCERR_SYSSIG, curp, 0, 0,                  mandoc_vmsg(MANDOCERR_SYSSIG, curp, 0, 0,
Line 939  mparse_alloc(int options, enum mandoclevel wlevel, man
Line 923  mparse_alloc(int options, enum mandoclevel wlevel, man
                     curp->roff, curp, curp->defos,                      curp->roff, curp, curp->defos,
                     curp->options & MPARSE_QUICK ? 1 : 0);                      curp->options & MPARSE_QUICK ? 1 : 0);
         if (curp->options & MPARSE_MAN)          if (curp->options & MPARSE_MAN)
                 curp->pman = man_alloc(curp->roff, curp,                  curp->pman = man_alloc(
                       curp->roff, curp, curp->defos,
                     curp->options & MPARSE_QUICK ? 1 : 0);                      curp->options & MPARSE_QUICK ? 1 : 0);
   
         return(curp);          return(curp);

Legend:
Removed from v.1.104  
changed lines
  Added in v.1.107

CVSweb