On Fri, Jul 11, 2014 at 04:55:36PM +0000, Doug Hogan wrote:
> Index: usr.bin/m4/eval.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/m4/eval.c,v
> retrieving revision 1.72
> diff -u -p -d -r1.72 eval.c
> --- usr.bin/m4/eval.c 28 Apr 2014 12:34:11 -0000 1.72
> +++ usr.bin/m4/eval.c 11 Jul 2014 16:20:25 -0000
> @@ -818,8 +818,12 @@ dodiv(int n)
> char fname[] = _PATH_DIVNAME;
>
> if ((fd = mkstemp(fname)) < 0 ||
> - (outfile[n] = fdopen(fd, "w+")) == NULL)
> - err(1, "%s: cannot divert", fname);
> + (outfile[n] = fdopen(fd, "w+")) == NULL) {
> + int saved_errno = errno;
> + if (fd != -1)
> + unlink(fname);
> + errc(1, saved_errno, "%s: cannot divert",
> fname);
> + }
> if (unlink(fname) == -1)
> err(1, "%s: cannot unlink", fname);
> }
I don't like that part. The logic is a bit wrong. Especially since
unlink(fname) is always called for fd != -1, so I feel there should be one
single call.