diff options
Diffstat (limited to 'usr.bin/sed/main.c')
-rw-r--r-- | usr.bin/sed/main.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/usr.bin/sed/main.c b/usr.bin/sed/main.c index 77c89ae9e8cd..bb5ffece68f7 100644 --- a/usr.bin/sed/main.c +++ b/usr.bin/sed/main.c @@ -327,15 +327,21 @@ mf_fgets(SPACE *sp, enum e_spflag spflag) } if (infile != NULL) { fclose(infile); - if (*oldfname != '\0' && - rename(fname, oldfname) != 0) { - warn("rename()"); - unlink(tmpfname); - exit(1); + if (*oldfname != '\0') { + if (rename(fname, oldfname) != 0) { + warn("rename()"); + unlink(tmpfname); + exit(1); + } + *oldfname = '\0'; } - if (*tmpfname != '\0') + if (*tmpfname != '\0') { + if (outfile != NULL && outfile != stdout) + fclose(outfile); + outfile = NULL; rename(tmpfname, fname); - *tmpfname = *oldfname = '\0'; + *tmpfname = '\0'; + } outfname = NULL; } if (firstfile == 0) |