[BACK]Return to mandocdb.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/mandocdb.c between version 1.116 and 1.117

version 1.116, 2014/09/03 18:08:26 version 1.117, 2014/09/03 23:20:33
Line 15 
Line 15 
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
   #include <sys/types.h>
 #include <sys/stat.h>  #include <sys/stat.h>
 #include <sys/wait.h>  #include <sys/wait.h>
   
Line 1065 
Line 1066 
 {  {
         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 1073 
Line 1073 
         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 1101 
Line 1101 
                 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 1142 
Line 1115 
                  */                   */
                 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 1234 
Line 1207 
                 } 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 1246 
Line 1219 
                 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);

Legend:
Removed from v.1.116  
changed lines
  Added in v.1.117