Removed extra free
[pspp-builds.git] / src / value-labels.c
index 16e649687cb577db05891b75f9ee913251d92f6e..03eda933ad2820ea2c49647379dae65ac5b00db4 100644 (file)
@@ -14,8 +14,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
 #include "value-labels.h"
@@ -111,7 +111,7 @@ val_labs_clear (struct val_labs *vls)
 
 /* Returns the number of value labels in VLS. */
 size_t
-val_labs_count (struct val_labs *vls) 
+val_labs_count (const struct val_labs *vls) 
 {
   assert (vls != NULL);
 
@@ -220,7 +220,7 @@ val_labs_remove (struct val_labs *vls, union value value)
   if (vls->labels != NULL) 
     {
       struct int_val_lab *ivl = create_int_val_lab (vls, value, "");
-      int deleted = hsh_delete (vls->labels, &ivl);
+      int deleted = hsh_delete (vls->labels, ivl);
       free (ivl);
       return deleted;
     }
@@ -496,29 +496,23 @@ free_atom (void *atom_, void *aux UNUSED)
    else format it and return the formatted string
 */
 const char *
-value_to_string(const union value *val, const struct variable *var)
+value_to_string (const union value *val, const struct variable *var)
 {
-  static char buf[100];
   char *s;
-  const struct val_labs *val_labs ;
   
-  if ( !val || ! var ) 
-    return 0;
-
-  val_labs = var->val_labs;
-
-  
-  s = val_labs_find (val_labs, *val);
+  assert (val != NULL);
+  assert (var != NULL);
 
-  if ( s ) 
-    return s;
-
-  if ( 0 == var->width ) 
-    snprintf(buf,100,"%g",val->f);
-  else
+  s = val_labs_find (var->val_labs, *val);
+  if (s == NULL) 
     {
-      strncpy(buf,val->s,MAX_SHORT_STRING);
-      strcat(buf,"\0");
+      static char buf[256];
+      if (var->width != 0) 
+        str_copy_buf_trunc (buf, sizeof buf, val->s, var->width);
+      else
+        snprintf(buf, 100, "%g", val->f);
+      s = buf;
     }
-  return buf;
+  
+  return s;
 }