Fix crash when opening empty dataset
[pspp-builds.git] / src / ui / gui / psppire-data-store.c
index 0e378bbec1f989cea8b6c94e971e262ab69d9db5..65001dd170d98a3edaa903a619244b38e931b38f 100644 (file)
@@ -583,13 +583,15 @@ psppire_data_store_get_string (PsppireDataStore *store, glong row, glong column)
   char *text;
   const struct fmt_spec *fp ;
   const struct variable *pv ;
+  const struct dictionary *dict;
   union value v;
   int width;
-  GString *s;
 
   g_return_val_if_fail (store->dict, NULL);
   g_return_val_if_fail (store->datasheet, NULL);
 
+  dict = store->dict->dict;
+
   if (column >= psppire_dict_get_var_cnt (store->dict))
     return NULL;
 
@@ -615,28 +617,13 @@ psppire_data_store_get_string (PsppireDataStore *store, glong row, glong column)
       if (label)
         {
           value_destroy (&v, width);
-         return recode_string (UTF8, psppire_dict_encoding (store->dict),
-                               label, -1);
+         return g_strdup (label);
         }
     }
 
   fp = var_get_write_format (pv);
 
-  s = g_string_sized_new (fp->w + 1);
-  g_string_set_size (s, fp->w);
-
-  memset (s->str, 0, fp->w);
-
-  g_assert (fp->w == s->len);
-
-  /* Converts binary value V into printable form in the exactly
-     FP->W character in buffer S according to format specification
-     FP.  No null terminator is appended to the buffer.  */
-  data_out (&v, fp, s->str);
-
-  text = recode_string (UTF8, psppire_dict_encoding (store->dict),
-                       s->str, fp->w);
-  g_string_free (s, TRUE);
+  text = data_out (&v, dict_get_encoding (dict), fp);
 
   g_strchomp (text);
 
@@ -767,15 +754,9 @@ static const gchar null_var_name[]=N_("var");
 static gchar *
 get_row_button_label (const PsppireSheetModel *model, gint unit)
 {
-  PsppireDataStore *ds = PSPPIRE_DATA_STORE (model);
-  gchar *s = g_strdup_printf (_("%d"), unit + FIRST_CASE_NUMBER);
+  // PsppireDataStore *ds = PSPPIRE_DATA_STORE (model);
 
-  gchar *text =  recode_string (UTF8, psppire_dict_encoding (ds->dict),
-                               s, -1);
-
-  g_free (s);
-
-  return text;
+  return g_strdup_printf (_("%d"), unit + FIRST_CASE_NUMBER);
 }
 
 
@@ -820,6 +801,9 @@ get_column_button_label (const PsppireSheetModel *model, gint col)
 
   pv = psppire_dict_get_variable (ds->dict, col);
 
+  if (NULL == pv)
+    return NULL;
+
   return xstrdup (var_get_name (pv));
 }