+++ /dev/null
-diff -urp bison-2.4-pm/lib/subpipe.c bison-2.4/lib/subpipe.c
---- bison-2.4-pm/lib/subpipe.c 2008-07-14 10:56:12.000000000 +0200
-+++ bison-2.4/lib/subpipe.c 2008-11-20 14:37:42.000000000 +0100
-@@ -143,7 +143,9 @@ create_subpipe (char const * const *argv
- }
-
-
--/* Wait for the subprocess to exit. */
-+/* Wait for the subprocess to exit. PROGRAM==NULL means errors
-+ shouldn't be emitted, typically becuase we are reaping the subpipe
-+ in response to some other error. */
-
- void
- reap_subpipe (pid_t pid, char const *program)
-@@ -151,11 +153,14 @@ reap_subpipe (pid_t pid, char const *pro
- #if HAVE_WAITPID || defined waitpid
- int wstatus;
- if (waitpid (pid, &wstatus, 0) < 0)
-- error (EXIT_FAILURE, errno, "waitpid");
-+ {
-+ if (program)
-+ error (EXIT_FAILURE, errno, "waitpid");
-+ }
- else
- {
- int status = WIFEXITED (wstatus) ? WEXITSTATUS (wstatus) : -1;
-- if (status)
-+ if (status && program)
- error (EXIT_FAILURE, 0,
- _(status == 126
- ? "subsidiary program `%s' could not be invoked"
-diff -urp bison-2.4-pm/src/output.c bison-2.4/src/output.c
---- bison-2.4-pm/src/output.c 2008-11-02 19:09:10.000000000 +0100
-+++ bison-2.4/src/output.c 2008-11-20 14:39:08.000000000 +0100
-@@ -467,6 +467,21 @@ prepare_actions (void)
- | Call the skeleton parser. |
- `---------------------------*/
-
-+static pid_t pid = 0;
-+
-+/* Clean up opened pipe. */
-+static void
-+die (void)
-+{
-+ static int dying = 0;
-+ if (pid && !dying)
-+ {
-+ dying = 1;
-+ reap_subpipe (pid, NULL);
-+ pid = 0;
-+ }
-+}
-+
- static void
- output_skeleton (void)
- {
-@@ -474,7 +489,6 @@ output_skeleton (void)
- FILE *out;
- int filter_fd[2];
- char const *argv[9];
-- pid_t pid;
-
- /* Compute the names of the package data dir and skeleton files. */
- char const m4sugar[] = "m4sugar/m4sugar.m4";
-@@ -586,6 +600,7 @@ output_skeleton (void)
- scan_skel (in);
- xfclose (in);
- reap_subpipe (pid, m4);
-+ pid = 0;
- timevar_pop (TV_M4);
- }
-
-@@ -653,6 +669,14 @@ prepare (void)
- void
- output (void)
- {
-+ /* Register shutdown handler. */
-+ static int registered = 0;
-+ if (!registered)
-+ {
-+ registered = 1;
-+ atexit (die);
-+ }
-+
- obstack_init (&format_obstack);
-
- prepare_symbols ();