Allow output files to overwrite input files (bug #21280). Thanks to
[pspp-builds.git] / src / language / stats / regression.q
index 7b02e4b9dcfdaed3dc669efdbc5129071cc28d97..e3b3f5ee9338b37ff671c55bce0cb83063129881 100644 (file)
@@ -37,7 +37,6 @@
 #include <language/dictionary/split-file.h>
 #include <language/data-io/file-handle.h>
 #include <language/lexer/lexer.h>
-#include <libpspp/alloc.h>
 #include <libpspp/compiler.h>
 #include <libpspp/message.h>
 #include <libpspp/taint.h>
@@ -47,6 +46,8 @@
 #include <math/moments.h>
 #include <output/table.h>
 
+#include "xalloc.h"
+
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
@@ -929,6 +930,7 @@ regression_custom_export (struct lexer *lexer, struct dataset *ds UNUSED,
     model_file = NULL;
   else
     {
+      fh_unref (model_file);
       model_file = fh_parse (lexer, FH_REF_FILE);
       if (model_file == NULL)
        return 0;
@@ -949,8 +951,12 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
   bool ok;
   size_t i;
 
+  model_file = NULL;
   if (!parse_regression (lexer, ds, &cmd, NULL))
-    return CMD_FAILURE;
+    {
+      fh_unref (model_file);
+      return CMD_FAILURE;
+    }
 
   models = xnmalloc (cmd.n_dependent, sizeof *models);
   for (i = 0; i < cmd.n_dependent; i++)
@@ -969,6 +975,7 @@ cmd_regression (struct lexer *lexer, struct dataset *ds)
   free (v_variables);
   free (models);
   free_regression (&cmd);
+  fh_unref (model_file);
 
   return ok ? CMD_SUCCESS : CMD_FAILURE;
 }