Update code that assumed a dictionary's encoding could be NULL.
authorBen Pfaff <blp@cs.stanford.edu>
Thu, 16 Jun 2011 06:08:13 +0000 (23:08 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Thu, 16 Jun 2011 06:13:31 +0000 (23:13 -0700)
Until recently, I think, it was possible for dict_get_encoding()
to return NULL.  It is no longer possible as far as I can see,
so this commit adds a comment that says so to the definition
of dict_get_encoding().  It also updates a few callers that
had checks for null pointers.

src/data/csv-file-writer.c
src/data/dictionary.c
src/data/sys-file-writer.c
src/language/dictionary/sys-file-info.c

index 11b7429cbb60c0b32b8692a29173a8219e420d33..cbc617b3d2a2634e77fe35ac1d02be2039308591 100644 (file)
@@ -122,9 +122,7 @@ csv_writer_open (struct file_handle *fh, const struct dictionary *dict,
 
   w->opts = *opts;
 
-  w->encoding = (dict_get_encoding (dict)
-                 ? xstrdup (dict_get_encoding (dict))
-                 : NULL);
+  w->encoding = xstrdup (dict_get_encoding (dict));
 
   w->n_csv_vars = dict_get_var_cnt (dict);
   w->csv_vars = xnmalloc (w->n_csv_vars, sizeof *w->csv_vars);
index 4a0afc73d312ab1fac54d061771a1e2cbf174170..2d99f6d72cfe2a7e6dc442102f16a4dc687cbe32 100644 (file)
@@ -87,6 +87,8 @@ struct dictionary
 static void dict_unset_split_var (struct dictionary *, struct variable *);
 static void dict_unset_mrset_var (struct dictionary *, struct variable *);
 
+/* Returns the encoding for data in dictionary D.  The return value is a
+   nonnull string that contains an IANA character set name. */
 const char *
 dict_get_encoding (const struct dictionary *d)
 {
@@ -194,8 +196,7 @@ dict_clone (const struct dictionary *s)
 
   /* Set the new dictionary's encoding early so that string length limitations
      are interpreted correctly. */
-  if ( s->encoding)
-    d->encoding = xstrdup (s->encoding);
+  d->encoding = xstrdup (s->encoding);
 
   for (i = 0; i < s->var_cnt; i++)
     {
index aeb97d64e30c31f685a740b27dc806789acd4377..5ebf3ede0b97d79cc9dbc65a01ed2fdbadbf130e 100644 (file)
@@ -851,22 +851,18 @@ static void
 write_encoding_record (struct sfm_writer *w,
                       const struct dictionary *d)
 {
-  if (dict_get_encoding (d) != NULL)
-    {
-      /* IANA says "...character set names may be up to 40 characters taken
-         from the printable characters of US-ASCII," so character set names
-         don't need to be recoded to be in UTF-8.
-
-         We convert encoding names to uppercase because SPSS writes encoding
-         names in uppercase. */
-      char *encoding = xstrdup (dict_get_encoding (d));
-      str_uppercase (encoding);
-      write_string_record (w, ss_cstr (encoding), 20);
-      free (encoding);
-    }
+  /* IANA says "...character set names may be up to 40 characters taken
+     from the printable characters of US-ASCII," so character set names
+     don't need to be recoded to be in UTF-8.
+
+     We convert encoding names to uppercase because SPSS writes encoding
+     names in uppercase. */
+  char *encoding = xstrdup (dict_get_encoding (d));
+  str_uppercase (encoding);
+  write_string_record (w, ss_cstr (encoding), 20);
+  free (encoding);
 }
 
-
 /* Writes the long variable name table. */
 static void
 write_longvar_table (struct sfm_writer *w, const struct dictionary *dict)
index 27b27858b4ca698a8bfe6908e33001e9a7ef48c9..596329516cf7a4c8504349dbb6cc64c45e641e4a 100644 (file)
@@ -138,8 +138,7 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED)
 
 
   tab_text (t, 0, 10, TAB_LEFT, _("Charset:"));
-  tab_text (t, 1, 10, TAB_LEFT,
-            dict_get_encoding(d) ? dict_get_encoding(d) : _("Unknown"));
+  tab_text (t, 1, 10, TAB_LEFT, dict_get_encoding (d));
 
 
   tab_submit (t);