=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sed/main.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- src/usr.bin/sed/main.c 2018/07/11 06:57:18 1.37 +++ src/usr.bin/sed/main.c 2018/11/14 10:59:33 1.38 @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.37 2018/07/11 06:57:18 martijn Exp $ */ +/* $OpenBSD: main.c,v 1.38 2018/11/14 10:59:33 martijn Exp $ */ /*- * Copyright (c) 1992 Diomidis Spinellis. @@ -310,6 +310,30 @@ return (NULL); } +void +finish_file(void) +{ + if (infile != NULL) { + fclose(infile); + if (*oldfname != '\0') { + if (rename(fname, oldfname) != 0) { + warning("rename()"); + unlink(tmpfname); + exit(1); + } + *oldfname = '\0'; + } + if (*tmpfname != '\0') { + if (outfile != NULL && outfile != stdout) + fclose(outfile); + outfile = NULL; + rename(tmpfname, fname); + *tmpfname = '\0'; + } + outfname = NULL; + } +} + /* * Like fgets, but go through the list of files chaining them together. * Set len to the length of the line. @@ -347,25 +371,7 @@ sp->len = 0; return (0); } - if (infile != NULL) { - fclose(infile); - if (*oldfname != '\0') { - if (rename(fname, oldfname) != 0) { - warning("rename()"); - unlink(tmpfname); - exit(1); - } - *oldfname = '\0'; - } - if (*tmpfname != '\0') { - if (outfile != NULL && outfile != stdout) - fclose(outfile); - outfile = NULL; - rename(tmpfname, fname); - *tmpfname = '\0'; - } - outfname = NULL; - } + finish_file(); if (firstfile == 0) files = files->next; else @@ -405,7 +411,7 @@ fchmod(fileno(outfile), sb.st_mode & ALLPERMS); outfname = tmpfname; linenum = 0; - resetranges(); + resetstate(); } else { outfile = stdout; outfname = "stdout";