summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2013-07-03 22:44:26 +0000
committerobrien <obrien@FreeBSD.org>2013-07-03 22:44:26 +0000
commitd45f18e9d7e0dfff49a12196a8f4c325eefee716 (patch)
treea9e0769df784c3884354be7647dd2aba8046db12
parent85ce2c58ff0686d38588441ec3e73ec11e901a71 (diff)
downloadFreeBSD-src-d45f18e9d7e0dfff49a12196a8f4c325eefee716.zip
FreeBSD-src-d45f18e9d7e0dfff49a12196a8f4c325eefee716.tar.gz
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.
-rw-r--r--usr.bin/patch/pch.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/usr.bin/patch/pch.c b/usr.bin/patch/pch.c
index 411dcac..c4792b2 100644
--- a/usr.bin/patch/pch.c
+++ b/usr.bin/patch/pch.c
@@ -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;
OpenPOWER on IntegriCloud