Merge r252512 from src/gnu/usr.bin/patch into src/usr.bin/patch:

Make it so that 'patch < FUBAR' and 'patch -i FUBAR' operate the same.

The former makes a copy of stdin, but was not accurately putting the
content of stdin into a temp file.  This lead to the undercounting
the number of lines in hunks containing NUL characters when reading
from stdin.  Thus resulting in "unexpected end of file in patch" errors.
This commit is contained in:
David E. O'Brien 2013-07-03 22:44:26 +00:00
parent 8da93e6861
commit 0571fd57a1

View File

@ -101,13 +101,17 @@ void
open_patch_file(const char *filename)
{
struct stat filestat;
int nr, nw;
if (filename == NULL || *filename == '\0' || strEQ(filename, "-")) {
pfp = fopen(TMPPATNAME, "w");
if (pfp == NULL)
pfatal("can't create %s", TMPPATNAME);
while (fgets(buf, buf_size, stdin) != NULL)
fputs(buf, pfp);
while ((nr = fread(buf, 1, buf_size, stdin)) > 0) {
nw = fwrite(buf, 1, nr, pfp);
if (nr != nw)
pfatal("write error to %s", TMPPATNAME);
}
if (ferror(pfp) || fclose(pfp))
pfatal("can't write %s", TMPPATNAME);
filename = TMPPATNAME;