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

Diff for /mandoc/mandocdb.c between version 1.161 and 1.162

version 1.161, 2014/09/03 18:09:14 version 1.162, 2014/09/03 23:21:47
Line 1 
Line 1 
 /*      $OpenBSD$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
Line 17 
Line 17 
  */   */
 #include "config.h"  #include "config.h"
   
 #include <sys/stat.h>  
 #include <sys/types.h>  #include <sys/types.h>
   #include <sys/stat.h>
 #include <sys/wait.h>  #include <sys/wait.h>
   
 #include <assert.h>  #include <assert.h>
Line 1076  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1076  mpages_merge(struct mchars *mc, struct mparse *mp)
 {  {
         char                     any[] = "any";          char                     any[] = "any";
         struct ohash_info        str_info;          struct ohash_info        str_info;
         int                      fd[2];  
         struct mpage            *mpage, *mpage_dest;          struct mpage            *mpage, *mpage_dest;
         struct mlink            *mlink, *mlink_dest;          struct mlink            *mlink, *mlink_dest;
         struct mdoc             *mdoc;          struct mdoc             *mdoc;
Line 1084  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1083  mpages_merge(struct mchars *mc, struct mparse *mp)
         char                    *sodest;          char                    *sodest;
         char                    *cp;          char                    *cp;
         pid_t                    child_pid;          pid_t                    child_pid;
         int                      status;          int                      fd;
         unsigned int             pslot;          unsigned int             pslot;
         enum mandoclevel         lvl;          enum mandoclevel         lvl;
   
Line 1112  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1111  mpages_merge(struct mchars *mc, struct mparse *mp)
                 man = NULL;                  man = NULL;
                 sodest = NULL;                  sodest = NULL;
                 child_pid = 0;                  child_pid = 0;
                 fd[0] = -1;  
                 fd[1] = -1;  
   
                 if (mpage->mlinks->gzip) {                  mparse_open(mp, &fd, mpage->mlinks->file, &child_pid);
                         if (-1 == pipe(fd)) {                  if (fd == -1) {
                                 exitcode = (int)MANDOCLEVEL_SYSERR;                          say(mpage->mlinks->file, "&open");
                                 say(mpage->mlinks->file, "&pipe gunzip");                          goto nextpage;
                                 goto nextpage;  
                         }  
                         switch (child_pid = fork()) {  
                         case -1:  
                                 exitcode = (int)MANDOCLEVEL_SYSERR;  
                                 say(mpage->mlinks->file, "&fork gunzip");  
                                 child_pid = 0;  
                                 close(fd[1]);  
                                 close(fd[0]);  
                                 goto nextpage;  
                         case 0:  
                                 close(fd[0]);  
                                 if (-1 == dup2(fd[1], STDOUT_FILENO)) {  
                                         say(mpage->mlinks->file,  
                                             "&dup gunzip");  
                                         exit(1);  
                                 }  
                                 execlp("gunzip", "gunzip", "-c",  
                                     mpage->mlinks->file, NULL);  
                                 say(mpage->mlinks->file, "&exec gunzip");  
                                 exit(1);  
                         default:  
                                 close(fd[1]);  
                                 break;  
                         }  
                 }                  }
   
                 /*                  /*
Line 1153  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1125  mpages_merge(struct mchars *mc, struct mparse *mp)
                  */                   */
                 if (FORM_CAT != mpage->mlinks->dform ||                  if (FORM_CAT != mpage->mlinks->dform ||
                     FORM_CAT != mpage->mlinks->fform) {                      FORM_CAT != mpage->mlinks->fform) {
                         lvl = mparse_readfd(mp, fd[0], mpage->mlinks->file);                          lvl = mparse_readfd(mp, fd, mpage->mlinks->file);
                         if (lvl < MANDOCLEVEL_FATAL)                          if (lvl < MANDOCLEVEL_FATAL)
                                 mparse_result(mp, &mdoc, &man, &sodest);                                  mparse_result(mp, &mdoc, &man, &sodest);
                 }                  }
Line 1245  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1217  mpages_merge(struct mchars *mc, struct mparse *mp)
                 } else if (NULL != man)                  } else if (NULL != man)
                         parse_man(mpage, man_node(man));                          parse_man(mpage, man_node(man));
                 else                  else
                         parse_cat(mpage, fd[0]);                          parse_cat(mpage, fd);
                 if (NULL == mpage->desc)                  if (NULL == mpage->desc)
                         mpage->desc = mandoc_strdup(mpage->mlinks->name);                          mpage->desc = mandoc_strdup(mpage->mlinks->name);
   
Line 1257  mpages_merge(struct mchars *mc, struct mparse *mp)
Line 1229  mpages_merge(struct mchars *mc, struct mparse *mp)
                 dbadd(mpage, mc);                  dbadd(mpage, mc);
   
 nextpage:  nextpage:
                 if (child_pid) {                  if (child_pid &&
                         if (-1 == waitpid(child_pid, &status, 0)) {                      mparse_wait(mp, child_pid) != MANDOCLEVEL_OK) {
                                 exitcode = (int)MANDOCLEVEL_SYSERR;                          exitcode = (int)MANDOCLEVEL_SYSERR;
                                 say(mpage->mlinks->file, "&wait gunzip");                          say(mpage->mlinks->file, "&wait gunzip");
                         } else if (WIFSIGNALED(status)) {  
                                 exitcode = (int)MANDOCLEVEL_SYSERR;  
                                 say(mpage->mlinks->file,  
                                     "gunzip died from signal %d",  
                                     WTERMSIG(status));  
                         } else if (WEXITSTATUS(status)) {  
                                 exitcode = (int)MANDOCLEVEL_SYSERR;  
                                 say(mpage->mlinks->file,  
                                     "gunzip failed with code %d",  
                                     WEXITSTATUS(status));  
                         }  
                 }                  }
                 ohash_delete(&strings);                  ohash_delete(&strings);
                 ohash_delete(&names);                  ohash_delete(&names);
Line 2351  prepare_statements:
Line 2312  prepare_statements:
             "PRAGMA synchronous = OFF", NULL, NULL, NULL)) {              "PRAGMA synchronous = OFF", NULL, NULL, NULL)) {
                 exitcode = (int)MANDOCLEVEL_SYSERR;                  exitcode = (int)MANDOCLEVEL_SYSERR;
                 say(MANDOC_DB, "PRAGMA synchronous: %s",                  say(MANDOC_DB, "PRAGMA synchronous: %s",
                 sqlite3_errmsg(db));                      sqlite3_errmsg(db));
                 sqlite3_close(db);                  sqlite3_close(db);
                 return(0);                  return(0);
         }          }

Legend:
Removed from v.1.161  
changed lines
  Added in v.1.162

CVSweb