Apply patch #5225, assertions.
[pspp-builds.git] / src / language / stats / flip.c
index 95a5f6d1594d8e8a2fa7e530c076da3653dee99e..0b452cb721942a5bcf33f13f5c248d3d0293a88d 100644 (file)
    02110-1301, USA. */
 
 #include "config.h"
-#include <libpspp/message.h>
+
 #include <ctype.h>
 #include <errno.h>
 #include <float.h>
 #include <limits.h>
 #include <stdlib.h>
-#include <libpspp/array.h>
-#include <libpspp/alloc.h>
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#include <data/case-sink.h>
+#include <data/case-source.h>
 #include <data/case.h>
-#include <language/command.h>
 #include <data/dictionary.h>
-#include <libpspp/message.h>
-#include "intprops.h"
+#include <data/procedure.h>
+#include <data/settings.h>
+#include <data/value.h>
+#include <data/variable.h>
+#include <language/command.h>
 #include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <libpspp/alloc.h>
+#include <libpspp/array.h>
+#include <libpspp/assertion.h>
+#include <libpspp/message.h>
+#include <libpspp/message.h>
 #include <libpspp/misc.h>
 #include <libpspp/pool.h>
-#include <data/settings.h>
 #include <libpspp/str.h>
-#include <data/value.h>
-#include <data/variable.h>
-#include <procedure.h>
 
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
+#include "intprops.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -87,14 +93,12 @@ int
 cmd_flip (void)
 {
   struct flip_pgm *flip;
+  struct case_sink *sink;
   bool ok;
 
-  if (temporary != 0)
-    {
-      msg (SW, _("FLIP ignores TEMPORARY.  "
-                 "Temporary transformations will be made permanent."));
-      cancel_temporary (); 
-    }
+  if (proc_make_temporary_transformations_permanent ())
+    msg (SW, _("FLIP ignores TEMPORARY.  "
+               "Temporary transformations will be made permanent."));
 
   flip = pool_create_container (struct flip_pgm, pool);
   flip->var = NULL;
@@ -146,10 +150,11 @@ cmd_flip (void)
 
   /* Read the active file into a flip_sink. */
   flip->case_cnt = 0;
-  temp_trns = temporary = 0;
-  vfm_sink = flip_sink_create (flip);
-  if (vfm_sink == NULL)
+  proc_make_temporary_transformations_permanent ();
+  sink = flip_sink_create (flip);
+  if (sink == NULL)
     goto error;
+  proc_set_sink (sink);
   flip->new_names_tail = NULL;
   ok = procedure (NULL, NULL);
 
@@ -170,7 +175,7 @@ cmd_flip (void)
   flip->case_size = dict_get_case_size (default_dict);
 
   /* Set up flipped data for reading. */
-  vfm_source = flip_source_create (flip);
+  proc_set_source (flip_source_create (flip));
 
   return ok ? lex_end_of_command () : CMD_CASCADING_FAILURE;
 
@@ -471,7 +476,11 @@ flip_file (struct flip_pgm *flip)
       case_idx += read_cases;
     }
 
-  pool_fclose (flip->pool, input_file);
+  if (pool_fclose (flip->pool, input_file) == EOF)
+    {
+      msg (SE, _("Error closing FLIP source file: %s."), strerror (errno));
+      return false;
+    }
   pool_unregister (flip->pool, input_buf);
   free (input_buf);
   
@@ -530,7 +539,7 @@ flip_source_read (struct case_source *source,
           else if (feof (flip->file))
             msg (SE, _("Unexpected end of file reading FLIP temporary file."));
           else
-            abort ();
+            NOT_REACHED ();
           ok = false;
           break;
         }