+ alloc_value_labels (v);
+ val_labs_replace (v->val_labs, value, label);
+}
+
+/* Removes V's value labels, if any. */
+void
+var_clear_value_labels (struct variable *v)
+{
+ var_set_value_labels (v, NULL);
+}
+
+/* Returns the label associated with VALUE for variable V,
+ or a null pointer if none. */
+const char *
+var_lookup_value_label (const struct variable *v, const union value *value)
+{
+ return val_labs_find (v->val_labs, value);
+}
+
+/* Append STR with a string representing VALUE for variable V.
+ That is, if VALUE has a label, append that label,
+ otherwise format VALUE and append the formatted string.
+ STR must be a pointer to an initialised struct string.
+*/
+void
+var_append_value_name (const struct variable *v, const union value *value,
+ struct string *str)
+{
+ const char *name = var_lookup_value_label (v, value);
+ if (name == NULL)
+ {
+ char *s = data_out (value, var_get_encoding (v), &v->print);
+ ds_put_cstr (str, s);
+ free (s);
+ }
+ else
+ ds_put_cstr (str, name);