lexer: New function lex_force_int_range().
[pspp] / src / language / dictionary / vector.c
index 512ec3c2bfeaf99cde80aae28644b08f55225b1a..e7e70cecb28a288549b22fdbf9641b2b4b8cd009 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2010, 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2010, 2011, 2012, 2016 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -124,20 +124,16 @@ cmd_vector (struct lexer *lexer, struct dataset *ds)
             {
               if (lex_is_integer (lexer) && var_cnt == 0)
                 {
+                  if (!lex_force_int_range (lexer, NULL, 1, INT_MAX))
+                    goto fail;
                   var_cnt = lex_integer (lexer);
                   lex_get (lexer);
-                  if (var_cnt <= 0)
-                    {
-                      msg (SE, _("Vectors must have at least one element."));
-                      goto fail;
-                    }
                 }
               else if (lex_token (lexer) == T_ID && !seen_format)
                 {
                   seen_format = true;
                   if (!parse_format_specifier (lexer, &format)
-                      || !fmt_check_output (&format)
-                      || !fmt_check_type_compat (&format, VAL_NUMERIC))
+                      || !fmt_check_output (&format))
                     goto fail;
                 }
               else
@@ -168,8 +164,8 @@ cmd_vector (struct lexer *lexer, struct dataset *ds)
                     }
                   if (dict_lookup_var (dict, name))
                    {
-                      free (name);
                      msg (SE, _("%s is an existing variable name."), name);
+                      free (name);
                      goto fail;
                    }
                   free (name);
@@ -184,7 +180,8 @@ cmd_vector (struct lexer *lexer, struct dataset *ds)
              for (j = 0; j < var_cnt; j++)
                {
                   char *name = xasprintf ("%s%d", vectors[i], j + 1);
-                 vars[j] = dict_create_var_assert (dict, name, 0);
+                 vars[j] = dict_create_var_assert (dict, name,
+                                                    fmt_var_width (&format));
                   var_set_both_formats (vars[j], &format);
                   free (name);
                }