Closes patch #6359
[pspp-builds.git] / src / language / stats / frequencies.q
index ce313678db2591d78dc6ab186cb8f8f48beb5aae..3857bd85805eb482503377384269a970025b8ab9 100644 (file)
@@ -538,10 +538,11 @@ precalc (struct casereader *input, struct dataset *ds)
   struct ccase c;
   size_t i;
 
-  if (!casereader_peek (input, 0, &c))
-    return;
-  output_split_file_values (ds, &c);
-  case_destroy (&c);
+  if (casereader_peek (input, 0, &c))
+    {
+      output_split_file_values (ds, &c);
+      case_destroy (&c);
+    }
 
   pool_destroy (data_pool);
   data_pool = pool_create ();
@@ -636,12 +637,12 @@ postcalc (void)
 }
 
 /* Returns the comparison function that should be used for
-   sorting a frequency table by FRQ_SORT using VAR_TYPE
-   variables. */
+   sorting a frequency table by FRQ_SORT using VAL_TYPE
+   values. */
 static hsh_compare_func *
-get_freq_comparator (int frq_sort, enum var_type var_type)
+get_freq_comparator (int frq_sort, enum val_type val_type)
 {
-  bool is_numeric = var_type == VAR_NUMERIC;
+  bool is_numeric = val_type == VAL_NUMERIC;
   switch (frq_sort)
     {
     case FRQ_AVALUE:
@@ -1498,7 +1499,7 @@ freq_tab_to_slice_array(const struct freq_tab *frq_tab,
     {
       const struct freq *frq = &frq_tab->valid[i];
 
-      slices[i].label = var_get_value_name (var, frq->value);
+      var_append_value_name (var, frq->value, &slices[i].label);
       slices[i].magnetude = frq->count;
     }
 
@@ -1512,12 +1513,17 @@ static void
 do_piechart(const struct variable *var, const struct freq_tab *frq_tab)
 {
   struct slice *slices;
-  int n_slices;
+  int n_slices, i;
 
   slices = freq_tab_to_slice_array(frq_tab, var, &n_slices);
 
   piechart_plot(var_to_string(var), slices, n_slices);
 
+  for (i = 0 ; i < n_slices ; ++i )
+    {
+      ds_destroy (&slices[i].label);
+    }
+
   free(slices);
 }