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

Diff for /mandoc/term_tag.c between version 1.4 and 1.5

version 1.4, 2020/04/18 20:40:10 version 1.5, 2020/07/21 15:10:01
Line 22 
Line 22 
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <errno.h>  #include <errno.h>
   #include <fcntl.h>
 #include <signal.h>  #include <signal.h>
 #include <stddef.h>  #include <stddef.h>
 #include <stdio.h>  #include <stdio.h>
Line 46  static struct tag_files tag_files;
Line 47  static struct tag_files tag_files;
  * but for simplicity, create it anyway.   * but for simplicity, create it anyway.
  */   */
 struct tag_files *  struct tag_files *
 term_tag_init(void)  term_tag_init(const char *outfilename, const char *tagfilename)
 {  {
         struct sigaction         sa;          struct sigaction         sa;
         int                      ofd;   /* In /tmp/, dup(2)ed to stdout. */          int                      ofd;   /* In /tmp/, dup(2)ed to stdout. */
Line 83  term_tag_init(void)
Line 84  term_tag_init(void)
   
         /* Create both temporary output files. */          /* Create both temporary output files. */
   
         (void)strlcpy(tag_files.ofn, "/tmp/man.XXXXXXXXXX",          if (outfilename == NULL) {
             sizeof(tag_files.ofn));                  (void)strlcpy(tag_files.ofn, "/tmp/man.XXXXXXXXXX",
         (void)strlcpy(tag_files.tfn, "/tmp/man.XXXXXXXXXX",                      sizeof(tag_files.ofn));
             sizeof(tag_files.tfn));                  if ((ofd = mkstemp(tag_files.ofn)) == -1) {
         if ((ofd = mkstemp(tag_files.ofn)) == -1) {                          mandoc_msg(MANDOCERR_MKSTEMP, 0, 0,
                 mandoc_msg(MANDOCERR_MKSTEMP, 0, 0,                              "%s: %s", tag_files.ofn, strerror(errno));
                     "%s: %s", tag_files.ofn, strerror(errno));                          goto fail;
                 goto fail;                  }
           } else {
                   (void)strlcpy(tag_files.ofn, outfilename,
                      sizeof(tag_files.ofn));
                   unlink(outfilename);
                   ofd = open(outfilename, O_WRONLY | O_CREAT | O_EXCL, 0644);
                   if (ofd == -1) {
                           mandoc_msg(MANDOCERR_OPEN, 0, 0,
                               "%s: %s", outfilename, strerror(errno));
                           goto fail;
                   }
         }          }
         if ((tfd = mkstemp(tag_files.tfn)) == -1) {          if (tagfilename == NULL) {
                 mandoc_msg(MANDOCERR_MKSTEMP, 0, 0,                  (void)strlcpy(tag_files.tfn, "/tmp/man.XXXXXXXXXX",
                     "%s: %s", tag_files.tfn, strerror(errno));                      sizeof(tag_files.tfn));
                 goto fail;                  if ((tfd = mkstemp(tag_files.tfn)) == -1) {
                           mandoc_msg(MANDOCERR_MKSTEMP, 0, 0,
                               "%s: %s", tag_files.tfn, strerror(errno));
                           goto fail;
                   }
           } else {
                   (void)strlcpy(tag_files.tfn, tagfilename,
                       sizeof(tag_files.tfn));
                   unlink(tagfilename);
                   tfd = open(tagfilename, O_WRONLY | O_CREAT | O_EXCL, 0644);
                   if (tfd == -1) {
                           mandoc_msg(MANDOCERR_OPEN, 0, 0,
                               "%s: %s", tagfilename, strerror(errno));
                           goto fail;
                   }
         }          }
         if ((tag_files.tfs = fdopen(tfd, "w")) == NULL) {          if ((tag_files.tfs = fdopen(tfd, "w")) == NULL) {
                 mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));                  mandoc_msg(MANDOCERR_FDOPEN, 0, 0, "%s", strerror(errno));
Line 175  term_tag_unlink(void)
Line 200  term_tag_unlink(void)
                     getpgid(tc_pgid) == -1)                      getpgid(tc_pgid) == -1)
                         (void)tcsetpgrp(STDOUT_FILENO, tag_files.tcpgid);                          (void)tcsetpgrp(STDOUT_FILENO, tag_files.tcpgid);
         }          }
         if (*tag_files.ofn != '\0') {          if (strncmp(tag_files.ofn, "/tmp/man.", 9) == 0) {
                 unlink(tag_files.ofn);                  unlink(tag_files.ofn);
                 *tag_files.ofn = '\0';                  *tag_files.ofn = '\0';
         }          }
         if (*tag_files.tfn != '\0') {          if (strncmp(tag_files.tfn, "/tmp/man.", 9) == 0) {
                 unlink(tag_files.tfn);                  unlink(tag_files.tfn);
                 *tag_files.tfn = '\0';                  *tag_files.tfn = '\0';
         }          }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

CVSweb