m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Frozen state generation fails with returncode 0


From: Eric Blake
Subject: Re: Frozen state generation fails with returncode 0
Date: Fri, 23 May 2008 06:22:36 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080421 Thunderbird/2.0.0.14 Mnenhy/0.7.5.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 5/22/2008 4:35 PM:
|> I had a look in the git repository, and the open() case seem to handle
|> errors. However, there are no checks on flose() return value in
|> produce_frozen_state(). Not sure if you already worked on it.
|
| You're right - a patch I hadn't ported to the master branch yet (this is
the
| patch on branch-1.4/branch-1.6:
| http://git.savannah.gnu.org/gitweb/?p=m4.git;a=commitdiff;h=34c30#patch8).

Fixed as follows (and tested, on platforms with /dev/full).

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkg2twwACgkQ84KuGfSFAYCAnACgwYu7ty3i4f/teZKtnlIjeTpE
/14AnR71gNxK1MuEr8c+h2vsZQPUKefN
=Cc96
-----END PGP SIGNATURE-----
>From 3b8a1ff9f928e86d719169a81c7435a292eb25dd Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Fri, 23 May 2008 06:20:40 -0600
Subject: [PATCH] Improve handling of frozen file errors.

* src/freeze.c (produce_frozen_state): Detect write failures.
(reload_frozen_state): Use close_stream.
* tests/freeze.at (freezing failure): New test.
* THANKS: Update.
Reported by Jean-Charles Longuet.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog       |    9 +++++++++
 THANKS          |    1 +
 src/freeze.c    |    7 +++++--
 tests/freeze.at |   19 +++++++++++++++++++
 4 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c6c2b70..b05f806 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-05-23  Eric Blake  <address@hidden>
+
+       Improve handling of frozen file errors.
+       * src/freeze.c (produce_frozen_state): Detect write failures.
+       (reload_frozen_state): Use close_stream.
+       * tests/freeze.at (freezing failure): New test.
+       * THANKS: Update.
+       Reported by Jean-Charles Longuet.
+
 2008-05-21  Eric Blake  <address@hidden>
 
        Stage 24a: Use full call context in error reporting.
diff --git a/THANKS b/THANKS
index 807bd1b..f6a22d6 100644
diff --git a/src/freeze.c b/src/freeze.c
index d32fc9e..40de809 100644
--- a/src/freeze.c
+++ b/src/freeze.c
@@ -25,6 +25,7 @@
 #include "m4.h"
 
 #include "binary-io.h"
+#include "close-stream.h"
 #include "quotearg.h"
 
 static void  produce_mem_dump          (FILE *, const char *, size_t);
@@ -326,7 +327,9 @@ produce_frozen_state (m4 *context, const char *name)
   /* All done.  */
 
   fputs ("# End of frozen state file\n", file);
-  fclose (file);
+  if (close_stream (file) != 0)
+    m4_error (context, EXIT_FAILURE, errno, NULL,
+             _("unable to create frozen state"));
 }
 
 /* Issue a message saying that some character is an EXPECTED character. */
@@ -941,7 +944,7 @@ ill-formed frozen file, version 2 directive `%c' 
encountered"), 'T');
   free (string[0]);
   free (string[1]);
   free (string[2]);
-  if (ferror (file) || fclose (file) != 0)
+  if (close_stream (file) != 0)
     m4_error (context, EXIT_FAILURE, errno, NULL,
              _("unable to read frozen state"));
   m4_set_current_file (context, NULL);
diff --git a/tests/freeze.at b/tests/freeze.at
index fbc446f..cffa926 100644
--- a/tests/freeze.at
+++ b/tests/freeze.at
@@ -51,6 +51,25 @@ AT_CLEANUP
 
 AT_BANNER([Freezing state.])
 
+## ---------------- ##
+## freezing failure ##
+## ---------------- ##
+
+AT_SETUP([freezing failure])
+AT_KEYWORDS([frozen])
+
+AT_CHECK_M4([-F /none/such], [1], [],
+[[m4: cannot open `/none/such': No such file or directory
+]])
+
+if test -w /dev/full && test -c /dev/full ; then
+  AT_CHECK_M4([-F /dev/full], [1], [],
+[[m4: unable to create frozen state: No space left on device
+]])
+fi
+AT_CLEANUP
+
+
 ## --------------- ##
 ## large diversion ##
 ## --------------- ##
-- 
1.5.5.1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]