> It turns out the problem was that /tmp (tmpfs) was 512K, not 512M. So
> there's apparently a bug in patch that fails to error out when /tmp is
> too small.
patch(1) is a pile of bugs :)
I filed a PR but haven't gotten the # back yet.
This patch works fine when tmp is big enough (I rebuilt libtool-base),
and will recheck with small tmp at some point. I did it this way to
make minimal changes to upstream source, from a merge point of view. I
also verified that all bare write(2) were error checked, and the only
unchecked fputs remaining are in asking the user questions on terminals.
OK to commit it?
--- patch.c 31 Oct 2007 09:28:02 -0400 1.25
+++ patch.c 09 Aug 2008 09:12:24 -0400
@@ -680,8 +680,27 @@ abort_hunk(void)
}
}
+/*
+ * Version of fputs that aborts, to replace version used in apply_hunk
+ * without checking return values.
+ */
+
+/* pacify -Wstrict-prototypes */
+int safe_fputs(const char * str, FILE * stream);
+
+int safe_fputs(const char * str, FILE * stream)
+{
+ int ret = fputs(str, stream);
+ if ( ret != 0)
+ pfatal("write(fputs) failed: %s", strerror(errno));
+ return ret; /* NOTREACHED, pacify gcc */
+}
+
/* We found where to apply it (we hope), so do it. */
+/* Use aborting version of fputs.*/
+#define fputs safe_fputs
+
static void
apply_hunk(LINENUM where)
{
@@ -799,6 +818,9 @@ apply_hunk(LINENUM where)
}
}
+/* Limit scope of fix. */
+#undef fputs
+
/* Open the new file. */
static void
Attachment:
pgpASb8lSD3ms.pgp
Description: PGP signature