version 1.4, 2020/04/18 20:40:10 |
version 1.5, 2020/07/21 15:10:01 |
|
|
#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'; |
} |
} |