Flush the journal after every write.
[pspp] / src / output / journal.c
index 6b7332771c0f5e7727ffe631c04d11e1ab63a5ac..10da4d8485391651bb0a2b90b60afe2b67bba5f7 100644 (file)
@@ -64,7 +64,8 @@ journal_close (void)
   if (journal != NULL && journal->file != NULL)
     {
       if (fwriteerror (journal->file))
-        error (0, errno, _("error writing \"%s\""), journal_file_name);
+        error (0, errno, _("error writing output file \"%s\""),
+               journal_file_name);
       journal->file = NULL;
     }
 }
@@ -89,13 +90,19 @@ journal_output (struct journal_driver *j, const char *s)
       j->file = fopen (journal_file_name, "a");
       if (j->file == NULL)
         {
-          error (0, errno, _("%s: open failed"), journal_file_name);
+          error (0, errno, _("error opening output file \"%s\""),
+                 journal_file_name);
           output_driver_destroy (&j->driver);
           return;
         }
     }
 
   fprintf (j->file, "%s\n", s);
+
+  /* Flush the journal in case the syntax we're about to write
+     causes a crash.  Having the syntax already written to disk
+     makes postmortem analysis of the problem possible. */
+  fflush (j->file);
 }
 
 static void