X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Futilities%2Fset.c;h=11b3dac914db6d9a6cd7da97ac3b7a4606d4445c;hb=cd221d80fafb54e550398c6de105d4c1b7f02ba0;hp=89a70526003b89e201df4288b3b9c5f3f6d5e780;hpb=b56f017491ffecdbe19e39aca242ffb13ad17016;p=pspp diff --git a/src/language/utilities/set.c b/src/language/utilities/set.c index 89a7052600..11b3dac914 100644 --- a/src/language/utilities/set.c +++ b/src/language/utilities/set.c @@ -51,6 +51,7 @@ #include "output/journal.h" #include "output/pivot-table.h" +#include "gl/minmax.h" #include "gl/xalloc.h" #include "gettext.h" @@ -344,14 +345,10 @@ parse_EPOCH (struct lexer *lexer) settings_set_epoch (-1); else if (lex_is_integer (lexer)) { - int new_epoch = lex_integer (lexer); + if (!lex_force_int_range (lexer, "EPOCH", 1500, INT_MAX)) + return false; + settings_set_epoch (lex_integer (lexer)); lex_get (lexer); - if (new_epoch < 1500) - { - msg (SE, _("%s must be 1500 or later."), "EPOCH"); - return false; - } - settings_set_epoch (new_epoch); } else { @@ -397,15 +394,10 @@ parse_FORMAT (struct lexer *lexer) static bool parse_FUZZBITS (struct lexer *lexer) { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "FUZZITS", 0, 20)) return false; - int fuzzbits = lex_integer (lexer); + settings_set_fuzzbits (lex_integer (lexer)); lex_get (lexer); - - if (fuzzbits >= 0 && fuzzbits <= 20) - settings_set_fuzzbits (fuzzbits); - else - msg (SE, _("%s must be between 0 and 20."), "FUZZBITS"); return true; } @@ -457,13 +449,8 @@ parse_LENGTH (struct lexer *lexer) page_length = -1; else { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "LENGTH", 1, INT_MAX)) return false; - if (lex_integer (lexer) < 1) - { - msg (SE, _("%s must be at least %d."), "LENGTH", 1); - return false; - } page_length = lex_integer (lexer); lex_get (lexer); } @@ -715,34 +702,25 @@ parse_WIDTH (struct lexer *lexer) settings_set_viewwidth (131); else { - if (!lex_force_int (lexer)) - return 0; - if (lex_integer (lexer) < 40) - { - msg (SE, _("%s must be at least %d."), "WIDTH", 40); - return 0; - } + if (!lex_force_int_range (lexer, "WIDTH", 40, INT_MAX)) + return false; settings_set_viewwidth (lex_integer (lexer)); lex_get (lexer); } - return 1; + return true; } static bool parse_WORKSPACE (struct lexer *lexer) { - if (!lex_force_int (lexer)) + if (!lex_force_int_range (lexer, "WORKSPACE", + settings_get_testing_mode () ? 1 : 1024, + INT_MAX)) return false; int workspace = lex_integer (lexer); lex_get (lexer); - - if (workspace < 1024 && !settings_get_testing_mode ()) - msg (SE, _("%s must be at least 1MB"), "WORKSPACE"); - else if (workspace <= 0) - msg (SE, _("%s must be positive"), "WORKSPACE"); - else - settings_set_workspace (workspace * 1024L); + settings_set_workspace (MIN (workspace, INT_MAX / 1024) * 1024); return true; }