svn commit: r252636 - head/usr.bin/patch

David E. O'Brien obrien at FreeBSD.org
Wed Jul 3 22:44:26 UTC 2013


Author: obrien
Date: Wed Jul  3 22:44:26 2013
New Revision: 252636
URL: http://svnweb.freebsd.org/changeset/base/252636

Log:
  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.

Modified:
  head/usr.bin/patch/pch.c

Modified: head/usr.bin/patch/pch.c
==============================================================================
--- head/usr.bin/patch/pch.c	Wed Jul  3 22:25:00 2013	(r252635)
+++ head/usr.bin/patch/pch.c	Wed Jul  3 22:44:26 2013	(r252636)
@@ -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;


More information about the svn-src-head mailing list