aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Milburn2011-06-24 19:07:03 +0200
committerAlyssa Milburn2011-06-24 19:07:03 +0200
commit1b6453dff4dde1e293b62f7fb4ade02507fd31bb (patch)
tree40b1c90e2489735cd330c292f61a897d6c46ca27
parent3f4d2c8130ac1db51f9a2fc5fcb5a2413b215f45 (diff)
downloadscummvm-rg350-1b6453dff4dde1e293b62f7fb4ade02507fd31bb.tar.gz
scummvm-rg350-1b6453dff4dde1e293b62f7fb4ade02507fd31bb.tar.bz2
scummvm-rg350-1b6453dff4dde1e293b62f7fb4ade02507fd31bb.zip
BASE: Mess with strtol error handling some more.
WinCE's strtol can't actually do proper error handling because it is lacking errno, so just check the bounds instead. If you really have some need to pass LONG_MIN/LONG_MAX as command-line parameters then it could always be #ifdeffed, but I'm assuming no-one cares.
-rw-r--r--base/commandLine.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index 543511696f..1cd3643f5a 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -25,7 +25,7 @@
#define FORBIDDEN_SYMBOL_EXCEPTION_exit
-#include <errno.h>
+#include <limits.h>
#include "engines/metaengine.h"
#include "base/commandLine.h"
@@ -266,12 +266,12 @@ void registerDefaults() {
if (!option) usage("Option '%s' requires an argument", argv[isLongCmd ? i : i-1]);
// Use this for options which have a required integer value
+// (we don't check ERANGE because WinCE doesn't support errno, so we're stuck just rejecting LONG_MAX/LONG_MIN..)
#define DO_OPTION_INT(shortCmd, longCmd) \
DO_OPTION(shortCmd, longCmd) \
char *endptr; \
- errno = 0; \
- strtol(option, &endptr, 0); \
- if (*endptr != '\0' || errno == ERANGE) \
+ long int retval = strtol(option, &endptr, 0); \
+ if (*endptr != '\0' || retval == LONG_MAX || retval == LONG_MIN) \
usage("--%s: Invalid number '%s'", longCmd, option);
// Use this for boolean options; this distinguishes between "-x" and "-X",