From ed16bee191aee7b03d8d8af249102395b9ac5a7f Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sat, 6 Jan 2018 23:26:05 +0100 Subject: mseq: create tmpfile O_EXCL to detect multiple mseq -S in a pipeline --- mseq.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'mseq.c') diff --git a/mseq.c b/mseq.c index e1b1f04..e8bdd62 100644 --- a/mseq.c +++ b/mseq.c @@ -1,5 +1,9 @@ +#include +#include + #include #include +#include #include #include #include @@ -186,22 +190,22 @@ stdinmode() char *seqfile = 0; if (Sflag) { - // XXX locking? seqfile = getenv("MAILSEQ"); if (!seqfile) seqfile = blaze822_home_file("seq"); snprintf(tmpfile, sizeof tmpfile, "%s-", seqfile); snprintf(oldfile, sizeof oldfile, "%s.old", seqfile); - outfile = fopen(tmpfile, "w+"); - if (!outfile) { + int fd = open(tmpfile, O_RDWR | O_EXCL | O_CREAT, 0666); + if (fd < 0) { fprintf(stderr, - "mseq: Could not create sequence file '%s': %s.\n", - seqfile, strerror(errno)); + "mseq: Could not create temporary sequence file '%s': %s.\n", + tmpfile, strerror(errno)); fprintf(stderr, "mseq: Ensure %s exists and is writable.\n", blaze822_home_file("")); exit(2); } + outfile = fdopen(fd, "w+"); if (Aflag) { FILE *seq = fopen(seqfile, "r"); if (seq) { -- cgit 1.4.1