Had to get last call to multipass_split_output() inside
[pspp-builds.git] / src / val-labs.c
index 9d289cbce50f7c707637092332d1f53ae59b5fdc..9d05e77f83c528a067f300bb2d0c384b029f3b58 100644 (file)
@@ -41,17 +41,12 @@ static int get_label (struct variable **vars, int var_cnt);
 int
 cmd_value_labels (void)
 {
-  lex_match_id ("VALUE");
-  lex_match_id ("LABELS");
   return do_value_labels (1);
 }
 
 int
 cmd_add_value_labels (void)
 {
-  lex_match_id ("ADD");
-  lex_match_id ("VALUE");
-  lex_match_id ("LABELS");
   return do_value_labels (0);
 }
 \f
@@ -62,12 +57,19 @@ do_value_labels (int erase)
 {
   struct variable **vars; /* Variable list. */
   int var_cnt;            /* Number of variables. */
+  int parse_err=0;        /* true if error parsing variables */
 
   lex_match ('/');
   
   while (token != '.')
     {
-      parse_variables (default_dict, &vars, &var_cnt, PV_SAME_TYPE);
+      parse_err = !parse_variables (default_dict, &vars, &var_cnt, 
+                                   PV_SAME_TYPE) ;
+      if (var_cnt < 1)
+       {
+         free(vars);
+         return CMD_FAILURE;
+       }
       if (!verify_val_labs (vars, var_cnt))
         goto lossage;
       if (erase)
@@ -82,6 +84,7 @@ do_value_labels (int erase)
 
       free (vars);
     }
+  free (vars);
 
   if (token != '.')
     {
@@ -89,7 +92,7 @@ do_value_labels (int erase)
       return CMD_TRAILING_GARBAGE;
     }
 
-  return CMD_SUCCESS;
+  return parse_err ? CMD_PART_SUCCESS_MAYBE : CMD_SUCCESS;
 
  lossage:
   free (vars);