Added variable/parameter matching and error reporting
[pspp] / src / var-display.c
index 47147dfb0fba0de4ad7e371c5294273610db5e90..485fd3a1197f73938f531bee53eb53b065194254 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 <stdio.h>
@@ -39,9 +39,9 @@ cmd_variable_alignment (void)
   do
     {
       struct variable **v;
-      int nv;
+      size_t nv;
 
-      int i;
+      size_t i;
       enum alignment align;
 
 
@@ -56,11 +56,19 @@ cmd_variable_alignment (void)
            align = ALIGN_RIGHT;
          else if ( lex_match_id("CENTER"))
            align = ALIGN_CENTRE;
-         else
-           return CMD_FAILURE;
+         else 
+            {
+              free (v);
+              return CMD_FAILURE; 
+            }
 
          lex_force_match(')');
        }
+      else 
+        {
+          free (v);
+          return CMD_FAILURE; 
+        }
 
       for( i = 0 ; i < nv ; ++i ) 
        v[i]->alignment = align;
@@ -85,8 +93,8 @@ cmd_variable_width (void)
   do
     {
       struct variable **v;
-      int nv;
-      int i;
+      size_t nv;
+      size_t i;
 
       if (!parse_variables (default_dict, &v, &nv, PV_NONE))
         return CMD_PART_SUCCESS_MAYBE;
@@ -119,9 +127,9 @@ cmd_variable_level (void)
   do
     {
       struct variable **v;
-      int nv;
+      size_t nv;
       enum measure level;
-      int i;
+      size_t i;
 
       if (!parse_variables (default_dict, &v, &nv, PV_NONE))
         return CMD_PART_SUCCESS_MAYBE;
@@ -134,12 +142,20 @@ cmd_variable_level (void)
            level = MEASURE_ORDINAL;
          else if ( lex_match_id("NOMINAL"))
            level = MEASURE_NOMINAL;
-         else
-           return CMD_FAILURE;
+         else 
+            {
+              free (v);
+              return CMD_FAILURE; 
+            }
 
          lex_force_match(')');
        }
-
+      else
+        {
+          free (v);
+          return CMD_FAILURE; 
+        }
+      
       for( i = 0 ; i < nv ; ++i ) 
        v[i]->measure = level ;