matrix-data: Only use as many bytes as necessary to initialize string.
[pspp] / src / language / data-io / matrix-data.c
index 609e5eb1fd5156365093ac9c70851ab2dbcfce5b..81e687983c4110aa290d231944f0960d64916119 100644 (file)
@@ -125,8 +125,7 @@ preprocess (struct casereader *casereader0, const struct dictionary *dict, void
 {
   struct matrix_format *mformat = aux;
   const struct caseproto *proto = casereader_get_proto (casereader0);
-  struct casewriter *writer;
-  writer = autopaging_writer_create (proto);
+  struct casewriter *writer = autopaging_writer_create (proto);
   struct ccase *prev_case = NULL;
   double **matrices = NULL;
   size_t n_splits = 0;
@@ -176,6 +175,8 @@ preprocess (struct casereader *casereader0, const struct dictionary *dict, void
              msg (SE,
                   _("There are %d variable declared but the data has at least %d matrix rows."),
                   mformat->n_continuous_vars, row + 1);
+             case_unref (c);
+             casereader_destroy (pass0);
              goto error;
            }
          int col;
@@ -213,7 +214,7 @@ preprocess (struct casereader *casereader0, const struct dictionary *dict, void
       struct ccase *outcase = case_create (proto);
       union value *v = case_data_rw (outcase, mformat->rowtype);
       uint8_t *n = value_str_rw (v, ROWTYPE_WIDTH);
-      strncpy ((char *) n, "N        ", ROWTYPE_WIDTH);
+      memcpy (n, "N       ", ROWTYPE_WIDTH);
       blank_varname_column (outcase, mformat->varname);
       for (col = 0; col < mformat->n_continuous_vars; ++col)
        {
@@ -346,6 +347,7 @@ error:
     free (matrices[i]);
   free (matrices);
   casereader_destroy (casereader0);
+  casewriter_destroy (writer);
   return NULL;
 }
 
@@ -558,7 +560,8 @@ cmd_matrix (struct lexer *lexer, struct dataset *ds)
     }
   else
     {
-      data_parser_make_active_file (parser, ds, reader, dict, preprocess, &mformat);
+      data_parser_make_active_file (parser, ds, reader, dict, preprocess,
+                                   &mformat);
     }
 
   fh_unref (fh);
@@ -570,7 +573,7 @@ cmd_matrix (struct lexer *lexer, struct dataset *ds)
  error:
   data_parser_destroy (parser);
   if (!in_input_program ())
-    dict_destroy (dict);
+    dict_unref (dict);
   fh_unref (fh);
   free (encoding);
   free (mformat.split_vars);