diff options
Diffstat (limited to 'base/commandLine.cpp')
-rw-r--r-- | base/commandLine.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp index 61853a1ebc..6cb858525e 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -25,6 +25,9 @@ #define FORBIDDEN_SYMBOL_EXCEPTION_exit +#include <errno.h> +#include <limits.h> + #include "engines/metaengine.h" #include "base/commandLine.h" #include "base/plugins.h" @@ -267,8 +270,10 @@ void registerDefaults() { #define DO_OPTION_INT(shortCmd, longCmd) \ DO_OPTION(shortCmd, longCmd) \ char *endptr = 0; \ - strtol(option, &endptr, 0); \ - if (endptr == NULL || *endptr != 0) usage("--%s: Invalid number '%s'", longCmd, option); + errno = 0; \ + long int retval = strtol(option, &endptr, 0); \ + if (endptr == NULL || *endptr != 0 || (errno != 0 && retval == 0) || (errno == ERANGE && (retval == LONG_MAX || retval == LONG_MIN))) \ + usage("--%s: Invalid number '%s'", longCmd, option); // Use this for boolean options; this distinguishes between "-x" and "-X", // resp. between "--some-option" and "--no-some-option". |