Fixed problem reading long string continuation records.
[pspp] / src / value-labels.c
index 4c1d1a5f234d4b79250784bf9e711b4e34d0c600..7cd8ff0daa3cd76c5d3aa902dbd13da8052453d9 100644 (file)
 
    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"
 #include "error.h"
 #include <stdlib.h>
-#include <string.h>
 #include "alloc.h"
 #include "hash.h"
+#include "str.h"
 
 static hsh_compare_func compare_int_val_lab;
 static hsh_hash_func hash_int_val_lab;
@@ -498,8 +498,15 @@ free_atom (void *atom_, void *aux UNUSED)
 const char *
 value_to_string(const union value *val, const struct variable *var)
 {
+  static char buf[100];
   char *s;
-  const struct val_labs *val_labs = var->val_labs;
+  const struct val_labs *val_labs ;
+  
+  if ( !val || ! var ) 
+    return 0;
+
+  val_labs = var->val_labs;
+
   
   s = val_labs_find (val_labs, *val);
 
@@ -507,12 +514,11 @@ value_to_string(const union value *val, const struct variable *var)
     return s;
 
   if ( 0 == var->width ) 
+    snprintf(buf,100,"%g",val->f);
+  else
     {
-      static char buf[100];
-      snprintf(buf,100,"%g",val->f);
-      return buf;
+      strncpy(buf,val->s,MAX_SHORT_STRING);
+      strcat(buf,"\0");
     }
-  else
-    return val->s;
-  
+  return buf;
 }