Add "x" prefix to calls to plain malloc(), calloc(), strdup(), realloc().
authorBen Pfaff <blp@gnu.org>
Wed, 8 Apr 2009 04:02:14 +0000 (21:02 -0700)
committerBen Pfaff <blp@gnu.org>
Wed, 8 Apr 2009 04:02:14 +0000 (21:02 -0700)
In review commit 503f53bfdde "Read dictionary encoding from data files"
I noticed uses of plain strdup() (not xstrdup()).  Some greps showed that
there were several other uses of strdup(), as well as calloc(), malloc(),
and realloc(), in the source tree.  This commit adds "x" prefixes to each
of them, to ensure proper error handling.

17 files changed:
src/data/dictionary.c
src/data/gnumeric-reader.c
src/data/sys-file-reader.c
src/language/data-io/get-data.c
src/language/stats/t-test.q
src/libpspp/hmap.c
src/libpspp/i18n.c
src/libpspp/message.c
src/ui/gui/helper.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-window.c
src/ui/gui/psppire.c
src/ui/gui/recode-dialog.c
src/ui/gui/select-cases-dialog.c
src/ui/gui/t-test-independent-samples-dialog.c
src/ui/gui/widget-io.c
tests/dissect-sysfile.c

index b5b6cca58f19bbf1732eae911379f0d4606caf3f..2dd1dfc4641108a08deb9b3e054acb7e872e53da 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2007, 2009 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
@@ -79,7 +79,7 @@ void
 dict_set_encoding (struct dictionary *d, const char *enc)
 {
   if (enc)
-    d->encoding = strdup (enc);
+    d->encoding = xstrdup (enc);
 }
 
 const char *
@@ -213,7 +213,7 @@ dict_clone (const struct dictionary *s)
     d->vector[i] = vector_clone (s->vector[i], s, d);
 
   if ( s->encoding)
-    d->encoding = strdup (s->encoding);
+    d->encoding = xstrdup (s->encoding);
 
   dict_set_attributes (d, dict_get_attributes (s));
 
index f2f4e52f58294d846aaa05b8d4f36d9df666917f..2e92e3f5127595b0fd2d75ba0bb96e8af94fd993 100644 (file)
@@ -448,7 +448,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
       if ( idx  >= n_var_specs )
        {
          n_var_specs =  idx + 1 ;
-         var_spec = realloc (var_spec, sizeof (*var_spec) * n_var_specs);
+         var_spec = xrealloc (var_spec, sizeof (*var_spec) * n_var_specs);
          var_spec [idx].name = NULL;
          var_spec [idx].width = -1;
          var_spec [idx].first_value = NULL;
@@ -463,7 +463,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
            {
              if ( gri->read_names )
                {
-                 var_spec [idx].name = strdup (text);
+                 var_spec [idx].name = xstrdup (text);
                }
            }
          else
index 86607bcc91dbb4c2c523ac7d93cb5388fd53c82e..eff114a55e79a36e72d47beed8aa525f4537b097 100644 (file)
@@ -781,7 +781,7 @@ read_extension_record (struct sfm_reader *r, struct dictionary *dict,
       /* New in SPSS 16.  Contains a single string that describes
          the character encoding, e.g. "windows-1252". */
       {
-       char *encoding = calloc (size, count + 1);
+       char *encoding = xcalloc (size, count + 1);
        read_string (r, encoding, count + 1);
        dict_set_encoding (dict, encoding);
        return;
index 54bb5653ecc2086456624e7923b9a02443b77b57..e4ab76a9992739c78a36f6ad2a98c4f6e0b48d83 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2008, 2009 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
@@ -34,6 +34,8 @@
 #include <language/lexer/lexer.h>
 #include <libpspp/message.h>
 
+#include "xalloc.h"
+
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 #define N_(msgid) (msgid)
@@ -83,7 +85,7 @@ parse_get_psql (struct lexer *lexer, struct dataset *ds)
   if (!lex_force_string (lexer))
     goto error;
 
-  psql.conninfo = strdup (ds_cstr (lex_tokstr (lexer)));
+  psql.conninfo = xstrdup (ds_cstr (lex_tokstr (lexer)));
 
   lex_get (lexer);
 
@@ -151,7 +153,7 @@ parse_get_gnm (struct lexer *lexer, struct dataset *ds)
   if (!lex_force_string (lexer))
     goto error;
 
-  gri.file_name = strdup (ds_cstr (lex_tokstr (lexer)));
+  gri.file_name = xstrdup (ds_cstr (lex_tokstr (lexer)));
 
   lex_get (lexer);
 
@@ -170,7 +172,7 @@ parse_get_gnm (struct lexer *lexer, struct dataset *ds)
              if ( ! lex_force_string (lexer) )
                goto error;
 
-             gri.sheet_name = strdup (ds_cstr (lex_tokstr (lexer)));
+             gri.sheet_name = xstrdup (ds_cstr (lex_tokstr (lexer)));
              gri.sheet_index = -1;
            }
          else if (lex_match_id (lexer, "INDEX"))
@@ -194,7 +196,7 @@ parse_get_gnm (struct lexer *lexer, struct dataset *ds)
              if ( ! lex_force_string (lexer) )
                goto error;
 
-             gri.cell_range = strdup (ds_cstr (lex_tokstr (lexer)));
+             gri.cell_range = xstrdup (ds_cstr (lex_tokstr (lexer)));
            }
          else
            goto error;
index 5f5fc56f021d1ba60d125a8b23561b6dae79031b..466bf9e75129a9276f62587006e892532ce3dbcc 100644 (file)
@@ -749,15 +749,15 @@ ssbox_independent_samples_populate (struct ssbox *ssb,
       const char *s;
 
       s = var_lookup_value_label (indep_var, &gp.v.g_value[0]);
-      val_lab[0] = s ? strdup (s) : NULL;
+      val_lab[0] = s ? xstrdup (s) : NULL;
 
       s = var_lookup_value_label (indep_var, &gp.v.g_value[1]);
-      val_lab[1] = s ? strdup (s) : NULL;
+      val_lab[1] = s ? xstrdup (s) : NULL;
     }
   else
     {
-      val_lab[0] = calloc (sizeof (char), MAX_SHORT_STRING + 1);
-      val_lab[1] = calloc (sizeof (char), MAX_SHORT_STRING + 1);
+      val_lab[0] = xcalloc (sizeof (char), MAX_SHORT_STRING + 1);
+      val_lab[1] = xcalloc (sizeof (char), MAX_SHORT_STRING + 1);
       memcpy (val_lab[0], gp.v.g_value[0].s, MAX_SHORT_STRING);
       memcpy (val_lab[1], gp.v.g_value[1].s, MAX_SHORT_STRING);
     }
index 081d7cbba5a5f3e607f6a0dc3bfb90176a796a06..4c97e2359c922034cc8389344dc2a581227042d7 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009 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
@@ -22,6 +22,8 @@
 #include <assert.h>
 #include <stdlib.h>
 
+#include "xalloc.h"
+
 static size_t capacity_to_mask (size_t capacity);
 
 /* Initializes MAP as a new hash map that is initially empty. */
@@ -75,7 +77,7 @@ hmap_rehash (struct hmap *map, size_t new_mask)
 
   assert ((new_mask & (new_mask + 1)) == 0);
   if (new_mask)
-    new_buckets = calloc (new_mask + 1, sizeof *new_buckets);
+    new_buckets = xcalloc (new_mask + 1, sizeof *new_buckets);
   else 
     {
       new_buckets = &map->one;
index c0459712e71480dba9503aaa9260a28ac115f4c6..a4e9b63f755ed8e6abd6b611567c03e1d02b5fea 100644 (file)
@@ -198,7 +198,7 @@ i18n_init (void)
 #endif /* ENABLE_NLS */
 
   assert (default_encoding == NULL);
-  default_encoding = strdup (locale_charset ());
+  default_encoding = xstrdup (locale_charset ());
 
   hmapx_init (&map);
 }
@@ -214,7 +214,7 @@ void
 set_default_encoding (const char *enc)
 {
   free (default_encoding);
-  default_encoding = strdup (enc);
+  default_encoding = xstrdup (enc);
 }
 
 
@@ -228,13 +228,13 @@ set_encoding_from_locale (const char *loc)
   bool ok = true;
   char *c_encoding;
   char *loc_encoding;
-  char *tmp = strdup (setlocale (LC_CTYPE, NULL));
+  char *tmp = xstrdup (setlocale (LC_CTYPE, NULL));
 
   setlocale (LC_CTYPE, "C");
-  c_encoding = strdup (locale_charset ());
+  c_encoding = xstrdup (locale_charset ());
 
   setlocale (LC_CTYPE, loc);
-  loc_encoding = strdup (locale_charset ());
+  loc_encoding = xstrdup (locale_charset ());
 
 
   if ( 0 == strcmp (loc_encoding, c_encoding))
@@ -297,7 +297,7 @@ get_system_decimal (void)
 {
   char radix_char;
 
-  char *ol = strdup (setlocale (LC_NUMERIC, NULL));
+  char *ol = xstrdup (setlocale (LC_NUMERIC, NULL));
   setlocale (LC_NUMERIC, "");
 
 #if HAVE_NL_LANGINFO
index 227109145528d318f3963e7b3e295d11ef8602e9..5faee1f1d6c8dc33279e36acc9b3188b56b1f218 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009 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
@@ -82,7 +82,7 @@ msg_dup(const struct msg *m)
   struct msg *new_msg = xmalloc (sizeof *m);
 
   *new_msg = *m;
-  new_msg->text = strdup(m->text);
+  new_msg->text = xstrdup(m->text);
 
   return new_msg;
 }
index 6d90cfc4ea5e7a4b6e5b2a33b6ad3210744c802c..c70f8f7c215b15cb31b636c1e10b3bd53be416c6 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2009  Free Software Foundation
 
    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
@@ -170,7 +170,7 @@ convert_glib_filename_to_system_filename (const gchar *fname, GError **err)
   output_name = g_convert (fname, -1, target_encoding,
                        "UTF-8", NULL, NULL, err);
 #else
-  output_name = strdup (fname);
+  output_name = xstrdup (fname);
 #endif
 
   return output_name;
index e3aaa75681930af7c7b3009c225827dab95346ac..3879e5b4dd277ec1f23b11f04b9edb992ab3fbe3 100644 (file)
@@ -34,6 +34,8 @@
 #include "syntax-editor-source.h"
 #include <language/lexer/lexer.h>
 
+#include "xalloc.h"
+
 #include <gettext.h>
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
@@ -224,7 +226,7 @@ append_suffix (const gchar *filename)
       return g_strdup_printf ("%s.sps", filename);
     }
 
-  return strdup (filename);
+  return xstrdup (filename);
 }
 
 /*
index a02edb289a90c7987d5b5ef1d031ecaaec244831..990e4ab5fed6245b33df401868c4c5f79a206feb 100644 (file)
@@ -137,7 +137,7 @@ psppire_window_set_property (GObject         *object,
              name = g_value_get_string (&def);
            }
 
-         candidate_name = strdup (name);
+         candidate_name = xstrdup (name);
 
          while ( psppire_window_register_lookup (reg, candidate_name))
            {
@@ -411,7 +411,7 @@ psppire_window_init (PsppireWindow *window)
 {
   window->name = NULL;
   window->menu = NULL;
-  window->description = strdup ("");
+  window->description = xstrdup ("");
 
   window->menuitem_table  = g_hash_table_new (g_str_hash, g_str_equal);
 
index a1f48e7b64d016f1cee8c5fb4b13c2be0bcf6af4..7a369a607d6acd44f3755d354c51b08c3bf3c0d1 100644 (file)
@@ -294,7 +294,7 @@ parse_non_options (int key, char *arg, struct argp_state *state)
 
        if ( local_is_utf8)
          {
-           utf8 = strdup (arg);
+           utf8 = xstrdup (arg);
          }
        else
          {
@@ -324,7 +324,7 @@ parse_non_options (int key, char *arg, struct argp_state *state)
        g_free (utf8);
 
        if ( filename == NULL)
-         filename = strdup (arg);
+         filename = xstrdup (arg);
 
        psppire_window_load (PSPPIRE_WINDOW (the_data_window), filename);
 
index e480f3c70de75d05fef3be419a4a4b5819f17ac9..4bc12b50530ba5e8c9a6e2bfc64ea367db352b6b 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2009  Free Software Foundation
 
    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
@@ -71,7 +71,7 @@ new_value_copy (struct new_value *nv)
   struct new_value *copy = g_memdup (nv, sizeof (*copy));
 
   if ( nv->type == NV_STRING )
-    copy->v.s = strdup (nv->v.s);
+    copy->v.s = xstrdup (nv->v.s);
 
   return copy;
 }
index 3c36f4ededbfa10c201e959af1d235b017d43683..6492af28e906eab1ca377adc6faa15c6143adddd 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2008, 2009 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
@@ -388,7 +388,7 @@ generate_syntax (const struct select_cases_dialog *scd)
        (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
                                              "radiobutton-all"))))
     {
-      return strdup ("\n");
+      return xstrdup ("\n");
     }
 
   string = g_string_new ("");
index e5a04a076a22d833a2397a9b899c97ef695860ff..c24e3251e86ce3265a88fea1c107e98d1436c3fa 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2009  Free Software Foundation
 
    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
@@ -117,8 +117,8 @@ tt_groups_dialog_create (GtkBuilder *xml, GtkWindow *parent)
 
   gtk_window_set_transient_for (GTK_WINDOW (grps->dialog), parent);
 
-  grps->val[0] = strdup ("");
-  grps->val[1] = strdup ("");
+  grps->val[0] = xstrdup ("");
+  grps->val[1] = xstrdup ("");
 
   return grps;
 }
@@ -340,10 +340,10 @@ run_define_groups (struct tt_indep_samples_dialog *ttd)
          grps->group_defn = GROUPS_VALUES;
 
          grps->val[0] =
-           strdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[0])));
+           xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[0])));
 
          grps->val[1] =
-           strdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[1])));
+           xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[1])));
        }
       else
        {
@@ -352,7 +352,7 @@ run_define_groups (struct tt_indep_samples_dialog *ttd)
          grps->val[1] = NULL;
 
          grps->val[0] =
-           strdup (gtk_entry_get_text (GTK_ENTRY (grps->cut_point_entry)));
+           xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->cut_point_entry)));
        }
 
       psppire_dialog_notify_change (PSPPIRE_DIALOG (ttd->dialog));
index e64719907f8ecb910f62efabd2e6604cc9ce6524..3771cad6454a6e8598427dd0834139184ec31f27 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2009  Free Software Foundation
 
    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
@@ -26,6 +26,7 @@
 
 #include <gl/gettext.h>
 
+#include "xalloc.h"
 
 /* Create a GtkLabel and pack it into BOX.
    The label is created using part of the string at S, and the directives
@@ -90,7 +91,7 @@ widget_printf (const gchar *fmt, ...)
   if ( 0 !=  printf_parse (fmt, &d, &a) )
     return NULL;
 
-  widgets = calloc (sizeof (*widgets), d.count);
+  widgets = xcalloc (sizeof (*widgets), d.count);
   va_start (ap, fmt);
   for (i = 0 ; i < d.count ; ++i )
     {
index 1c81c72c98b089c3cb5dd6639c695acd64bedd01..62161f9c540200b1bcc954d5cef829342e8d671f 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2008, 2009 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
@@ -723,7 +723,7 @@ static void
 read_character_encoding (struct sfm_reader *r, size_t size, size_t count)
 {
   const unsigned long int posn =  ftell (r->file);
-  char *encoding = calloc (size, count + 1);
+  char *encoding = xcalloc (size, count + 1);
   read_string (r, encoding, count + 1);
 
   printf ("%08lx: Character Encoding: %s\n", posn, encoding);