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

Diff for /mandoc/main.c between version 1.273.2.1 and 1.273.2.2

version 1.273.2.1, 2016/08/09 15:15:34 version 1.273.2.2, 2016/09/18 16:13:02
Line 97  static int    koptions(int *, char *);
Line 97  static int    koptions(int *, char *);
 static  int               moptions(int *, char *);  static  int               moptions(int *, char *);
 static  void              mmsg(enum mandocerr, enum mandoclevel,  static  void              mmsg(enum mandocerr, enum mandoclevel,
                                 const char *, int, int, const char *);                                  const char *, int, int, const char *);
   static  void              outdata_alloc(struct curparse *);
 static  void              parse(struct curparse *, int, const char *);  static  void              parse(struct curparse *, int, const char *);
 static  void              passthrough(const char *, int, int);  static  void              passthrough(const char *, int, int);
 static  pid_t             spawn_pager(struct tag_files *);  static  pid_t             spawn_pager(struct tag_files *);
Line 482  main(int argc, char *argv[])
Line 483  main(int argc, char *argv[])
                                 passthrough(resp->file, fd,                                  passthrough(resp->file, fd,
                                     conf.output.synopsisonly);                                      conf.output.synopsisonly);
   
                         if (argc > 1 && curp.outtype <= OUTT_UTF8)                          if (argc > 1 && curp.outtype <= OUTT_UTF8) {
                                   if (curp.outdata == NULL)
                                           outdata_alloc(&curp);
                                 terminal_sepline(curp.outdata);                                  terminal_sepline(curp.outdata);
                           }
                 } else if (rc < MANDOCLEVEL_ERROR)                  } else if (rc < MANDOCLEVEL_ERROR)
                         rc = MANDOCLEVEL_ERROR;                          rc = MANDOCLEVEL_ERROR;
   
Line 743  parse(struct curparse *curp, int fd, const char *file)
Line 747  parse(struct curparse *curp, int fd, const char *file)
         if (rctmp != MANDOCLEVEL_OK && curp->wstop)          if (rctmp != MANDOCLEVEL_OK && curp->wstop)
                 return;                  return;
   
         /* If unset, allocate output dev now (if applicable). */          if (curp->outdata == NULL)
                   outdata_alloc(curp);
   
         if (curp->outdata == NULL) {  
                 switch (curp->outtype) {  
                 case OUTT_HTML:  
                         curp->outdata = html_alloc(curp->outopts);  
                         break;  
                 case OUTT_UTF8:  
                         curp->outdata = utf8_alloc(curp->outopts);  
                         break;  
                 case OUTT_LOCALE:  
                         curp->outdata = locale_alloc(curp->outopts);  
                         break;  
                 case OUTT_ASCII:  
                         curp->outdata = ascii_alloc(curp->outopts);  
                         break;  
                 case OUTT_PDF:  
                         curp->outdata = pdf_alloc(curp->outopts);  
                         break;  
                 case OUTT_PS:  
                         curp->outdata = ps_alloc(curp->outopts);  
                         break;  
                 default:  
                         break;  
                 }  
         }  
   
         mparse_result(curp->mp, &man, NULL);          mparse_result(curp->mp, &man, NULL);
   
         /* Execute the out device, if it exists. */          /* Execute the out device, if it exists. */
Line 825  parse(struct curparse *curp, int fd, const char *file)
Line 805  parse(struct curparse *curp, int fd, const char *file)
 }  }
   
 static void  static void
   outdata_alloc(struct curparse *curp)
   {
           switch (curp->outtype) {
           case OUTT_HTML:
                   curp->outdata = html_alloc(curp->outopts);
                   break;
           case OUTT_UTF8:
                   curp->outdata = utf8_alloc(curp->outopts);
                   break;
           case OUTT_LOCALE:
                   curp->outdata = locale_alloc(curp->outopts);
                   break;
           case OUTT_ASCII:
                   curp->outdata = ascii_alloc(curp->outopts);
                   break;
           case OUTT_PDF:
                   curp->outdata = pdf_alloc(curp->outopts);
                   break;
           case OUTT_PS:
                   curp->outdata = ps_alloc(curp->outopts);
                   break;
           default:
                   break;
           }
   }
   
   static void
 passthrough(const char *file, int fd, int synopsis_only)  passthrough(const char *file, int fd, int synopsis_only)
 {  {
         const char       synb[] = "S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS";          const char       synb[] = "S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS";
Line 834  passthrough(const char *file, int fd, int synopsis_onl
Line 841  passthrough(const char *file, int fd, int synopsis_onl
         const char      *syscall;          const char      *syscall;
         char            *line, *cp;          char            *line, *cp;
         size_t           linesz;          size_t           linesz;
           ssize_t          len, written;
         int              print;          int              print;
   
         line = NULL;          line = NULL;
         linesz = 0;          linesz = 0;
   
           if (fflush(stdout) == EOF) {
                   syscall = "fflush";
                   goto fail;
           }
   
         if ((stream = fdopen(fd, "r")) == NULL) {          if ((stream = fdopen(fd, "r")) == NULL) {
                 close(fd);                  close(fd);
                 syscall = "fdopen";                  syscall = "fdopen";
Line 846  passthrough(const char *file, int fd, int synopsis_onl
Line 859  passthrough(const char *file, int fd, int synopsis_onl
         }          }
   
         print = 0;          print = 0;
         while (getline(&line, &linesz, stream) != -1) {          while ((len = getline(&line, &linesz, stream)) != -1) {
                 cp = line;                  cp = line;
                 if (synopsis_only) {                  if (synopsis_only) {
                         if (print) {                          if (print) {
                                 if ( ! isspace((unsigned char)*cp))                                  if ( ! isspace((unsigned char)*cp))
                                         goto done;                                          goto done;
                                 while (isspace((unsigned char)*cp))                                  while (isspace((unsigned char)*cp)) {
                                         cp++;                                          cp++;
                                           len--;
                                   }
                         } else {                          } else {
                                 if (strcmp(cp, synb) == 0 ||                                  if (strcmp(cp, synb) == 0 ||
                                     strcmp(cp, synr) == 0)                                      strcmp(cp, synr) == 0)
Line 861  passthrough(const char *file, int fd, int synopsis_onl
Line 876  passthrough(const char *file, int fd, int synopsis_onl
                                 continue;                                  continue;
                         }                          }
                 }                  }
                 if (fputs(cp, stdout)) {                  for (; len > 0; len -= written) {
                           if ((written = write(STDOUT_FILENO, cp, len)) != -1)
                                   continue;
                         fclose(stream);                          fclose(stream);
                         syscall = "fputs";                          syscall = "write";
                         goto fail;                          goto fail;
                 }                  }
         }          }

Legend:
Removed from v.1.273.2.1  
changed lines
  Added in v.1.273.2.2

CVSweb