summaryrefslogtreecommitdiffstats
path: root/usr.bin/patch
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 /usr.bin/patch
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.
Diffstat (limited to 'usr.bin/patch')
-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