Implement the MATRIX command.
[pspp] / src / data / por-file-writer.c
index 7a3c971dec614e92091bcabfb54c41439780c8b7..672add4101cff3520bcd008ea0395a3805a41183 100644 (file)
@@ -32,7 +32,6 @@
 #include "data/casewriter.h"
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
-#include "data/file-name.h"
 #include "data/format.h"
 #include "data/make-file.h"
 #include "data/missing-values.h"
@@ -154,7 +153,7 @@ pfm_open_writer (struct file_handle *fh, struct dictionary *dict,
   if (opts.create_writeable)
     mode |= 0222;
   w->rf = replace_file_start (fh, "w", mode,
-                              &w->file, NULL);
+                              &w->file);
   if (w->rf == NULL)
     {
       msg (ME, _("Error opening `%s' for writing as a portable file: %s."),
@@ -262,8 +261,6 @@ write_header (struct pfm_writer *w)
 static void
 write_version_data (struct pfm_writer *w)
 {
-  char date_str[9];
-  char time_str[7];
   time_t t;
   struct tm tm;
   struct tm *tmp;
@@ -277,12 +274,15 @@ write_version_data (struct pfm_writer *w)
   else
     tmp = localtime (&t);
 
-  sprintf (date_str, "%04d%02d%02d",
-           tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday);
-  sprintf (time_str, "%02d%02d%02d", tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
+  char *date_str = xasprintf ("%04d%02d%02d", tmp->tm_year + 1900,
+                              tmp->tm_mon + 1, tmp->tm_mday);
+  char *time_str = xasprintf ("%02d%02d%02d",
+                              tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
   buf_write (w, "A", 1);
   write_string (w, date_str);
   write_string (w, time_str);
+  free (date_str);
+  free (time_str);
 
   /* Product identification. */
   buf_write (w, "1", 1);
@@ -316,7 +316,7 @@ write_value (struct pfm_writer *w, const union value *v, int width)
     {
       width = MIN (width, MAX_POR_WIDTH);
       write_int (w, width);
-      buf_write (w, value_str (v, width), width);
+      buf_write (w, v->s, width);
     }
 }
 
@@ -328,12 +328,12 @@ write_variables (struct pfm_writer *w, struct dictionary *dict)
 
   short_names_assign (dict);
 
-  if (dict_get_weight (dict) != NULL) 
+  if (dict_get_weight (dict) != NULL)
     {
       buf_write (w, "6", 1);
       write_string (w, var_get_short_name (dict_get_weight (dict), 0));
     }
-  
+
   buf_write (w, "4", 1);
   write_int (w, dict_get_var_cnt (dict));
 
@@ -812,7 +812,7 @@ format_trig_double (long double value, int base_10_precision, char output[])
       value -= chunk;
 
       /* Append the chunk, in base 30, to trigs[]. */
-      for (trigs_left = CHUNK_SIZE; chunk > 0 && trigs_left > 0; )
+      for (trigs_left = CHUNK_SIZE; chunk > 0 && trigs_left > 0;)
         {
           trigs[trig_cnt + --trigs_left] = chunk % 30;
           chunk /= 30;