message: Make msg_emit() take full ownership of its argument.
[pspp] / src / data / por-file-reader.c
index 8745cfc68fb5acf7e1cf02d4a7c7366c2504c132..8d008b1dd610a30574be726f7edc74ff54c80b39 100644 (file)
@@ -43,7 +43,6 @@
 #include "libpspp/pool.h"
 #include "libpspp/str.h"
 
-#include "gl/intprops.h"
 #include "gl/minmax.h"
 #include "gl/xalloc.h"
 #include "gl/xmemdup0.h"
@@ -103,7 +102,6 @@ error (struct pfm_reader *r, const char *msg,...)
 static void
 error (struct pfm_reader *r, const char *msg, ...)
 {
-  struct msg m;
   struct string text;
   va_list args;
 
@@ -114,16 +112,13 @@ error (struct pfm_reader *r, const char *msg, ...)
   ds_put_vformat (&text, msg, args);
   va_end (args);
 
-  m.category = MSG_C_GENERAL;
-  m.severity = MSG_S_ERROR;
-  m.file_name = NULL;
-  m.first_line = 0;
-  m.last_line = 0;
-  m.first_column = 0;
-  m.last_column = 0;
-  m.text = ds_cstr (&text);
-
-  msg_emit (&m);
+  struct msg *m = xmalloc (sizeof *m);
+  *m = (struct msg) {
+    .category = MSG_C_GENERAL,
+    .severity = MSG_S_ERROR,
+    .text = ds_steal_cstr (&text),
+  };
+  msg_emit (m);
 
   r->ok = false;
 
@@ -135,7 +130,6 @@ error (struct pfm_reader *r, const char *msg, ...)
 static void
 warning (struct pfm_reader *r, const char *msg, ...)
 {
-  struct msg m;
   struct string text;
   va_list args;
 
@@ -146,16 +140,13 @@ warning (struct pfm_reader *r, const char *msg, ...)
   ds_put_vformat (&text, msg, args);
   va_end (args);
 
-  m.category = MSG_C_GENERAL;
-  m.severity = MSG_S_WARNING;
-  m.file_name = NULL;
-  m.first_line = 0;
-  m.last_line = 0;
-  m.first_column = 0;
-  m.last_column = 0;
-  m.text = ds_cstr (&text);
-
-  msg_emit (&m);
+  struct msg *m = xmalloc (sizeof *m);
+  *m = (struct msg) {
+    .category = MSG_C_GENERAL,
+    .severity = MSG_S_WARNING,
+    .text = ds_steal_cstr (&text),
+  };
+  msg_emit (m);
 }
 
 /* Close and destroy R.
@@ -739,9 +730,9 @@ read_variables (struct pfm_reader *r, struct dictionary *dict)
           unsigned long int i;
           for (i = 1; ; i++)
             {
-              char try_name[8 + 1 + INT_STRLEN_BOUND (i) + 1];
-              sprintf (try_name, "%s_%lu", name, i);
+              char *try_name = xasprintf ("%s_%lu", name, i);
               v = dict_create_var (dict, try_name, width);
+              free (try_name);
               if (v != NULL)
                 break;
             }