Replace numerous instances of xzalloc with XZALLOC
[pspp] / src / data / pc+-file-reader.c
index 08e6470697361b871acecdd6d9174da670268e62..4753881a67a99e3a68fe059caf1760e52c817a42 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-2000, 2006-2007, 2009-2015 Free Software Foundation, Inc.
+   Copyright (C) 1997-2000, 2006-2007, 2009-2016 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -190,11 +190,10 @@ static bool parse_variable_records (struct pcp_reader *, struct dictionary *,
 static struct any_reader *
 pcp_open (struct file_handle *fh)
 {
-  struct pcp_reader *r;
   struct stat s;
 
   /* Create and initialize reader. */
-  r = xzalloc (sizeof *r);
+  struct pcp_reader *r = XZALLOC (struct pcp_reader);
   r->any_reader.klass = &pcp_file_reader_class;
   r->pool = pool_create ();
   pool_register (r->pool, free, r);
@@ -209,7 +208,7 @@ pcp_open (struct file_handle *fh)
     goto error;
 
   /* Open file. */
-  r->file = fn_open (fh_get_file_name (fh), "rb");
+  r->file = fn_open (fh, "rb");
   if (r->file == NULL)
     {
       msg (ME, _("Error opening `%s' for reading as an SPSS/PC+ "
@@ -221,13 +220,13 @@ pcp_open (struct file_handle *fh)
   /* Fetch file size. */
   if (fstat (fileno (r->file), &s))
     {
-      pcp_error (ME, 0, _("%s: stat failed (%s)."),
+      pcp_error (r, 0, _("%s: stat failed (%s)."),
                  fh_get_file_name (r->fh), strerror (errno));
       goto error;
     }
   if (s.st_size > UINT_MAX)
     {
-      pcp_error (ME, 0, _("%s: file too large."), fh_get_file_name (r->fh));
+      pcp_error (r, 0, _("%s: file too large."), fh_get_file_name (r->fh));
       goto error;
     }
   r->file_size = s.st_size;
@@ -461,7 +460,7 @@ pcp_decode (struct any_reader *r_, const char *encoding,
 
 error:
   pcp_close (&r->any_reader);
-  dict_destroy (dict);
+  dict_unref (dict);
   *dictp = NULL;
   return NULL;
 }
@@ -478,7 +477,7 @@ pcp_close (struct any_reader *r_)
 
   if (r->file)
     {
-      if (fn_close (fh_get_file_name (r->fh), r->file) == EOF)
+      if (fn_close (r->fh, r->file) == EOF)
         {
           msg (ME, _("Error closing system file `%s': %s."),
                fh_get_file_name (r->fh), strerror (errno));
@@ -641,8 +640,9 @@ read_value_labels (struct pcp_reader *r, struct pcp_var_record *var,
       uint8_t len;
 
       if (var->n_val_labs >= allocated_val_labs)
-        var->val_labs = x2nrealloc (var->val_labs, &allocated_val_labs,
-                                    sizeof *var->val_labs);
+        var->val_labs = pool_2nrealloc (r->pool, var->val_labs,
+                                        &allocated_val_labs,
+                                        sizeof *var->val_labs);
       vl = &var->val_labs[var->n_val_labs];
 
       if (!read_bytes (r, vl->value, sizeof vl->value)
@@ -899,8 +899,7 @@ parse_variable_records (struct pcp_reader *r, struct dictionary *dict,
           if (var_is_numeric (var))
             value.f = parse_float (rec->val_labs[i].value);
           else
-            memcpy (value_str_rw (&value, rec->width),
-                    rec->val_labs[i].value, rec->width);
+            memcpy (value.s, rec->val_labs[i].value, rec->width);
 
           utf8_label = recode_string ("UTF-8", dict_encoding,
                                       rec->val_labs[i].label, -1);
@@ -966,8 +965,7 @@ pcp_file_casereader_read (struct casereader *reader, void *r_)
       if (var->width == 0)
         retval = read_case_number (r, &v->f);
       else
-        retval = read_case_string (r, value_str_rw (v, var->width),
-                                   var->width);
+        retval = read_case_string (r, v->s, var->width);
 
       if (retval != 1)
         {
@@ -1151,9 +1149,7 @@ static void
 pcp_msg (struct pcp_reader *r, off_t offset,
          int class, const char *format, va_list args)
 {
-  struct msg m;
   struct string text;
-
   ds_init_empty (&text);
   if (offset >= 0)
     ds_put_format (&text, _("`%s' near offset 0x%llx: "),
@@ -1162,16 +1158,13 @@ pcp_msg (struct pcp_reader *r, off_t offset,
     ds_put_format (&text, _("`%s': "), fh_get_file_name (r->fh));
   ds_put_vformat (&text, format, args);
 
-  m.category = msg_class_to_category (class);
-  m.severity = msg_class_to_severity (class);
-  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_class_to_category (class),
+    .severity = msg_class_to_severity (class),
+    .text = ds_steal_cstr (&text),
+  };
+  msg_emit (m);
 }
 
 /* Displays a warning for offset OFFSET in the file. */