Change to use strtoul instead of strtoll.
authorBrian Gaeke <gaeke@uiuc.edu>
Fri, 10 Oct 2003 17:01:36 +0000 (17:01 +0000)
committerBrian Gaeke <gaeke@uiuc.edu>
Fri, 10 Oct 2003 17:01:36 +0000 (17:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9010 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/CommandLine.cpp

index c0be0ecb34e2839ec8c122cca16acc926e714524..807ff165b09443a8a20d39e1c5bd505bd7072ab2 100644 (file)
@@ -14,6 +14,8 @@
 #include <map>
 #include <set>
 #include <iostream>
+#include <cstdlib>
+#include <cerrno>
 
 using namespace cl;
 
@@ -682,9 +684,12 @@ bool parser<int>::parse(Option &O, const char *ArgName,
 bool parser<unsigned>::parse(Option &O, const char *ArgName,
                              const std::string &Arg, unsigned &Value) {
   char *End;
-  long long int V = strtoll(Arg.c_str(), &End, 0);
+  errno = 0;
+  unsigned long V = strtoul(Arg.c_str(), &End, 0);
   Value = (unsigned)V;
-  if (*End != 0 || V < 0 || Value != V) 
+  if (((V == ULONG_MAX) && (errno == ERANGE))
+      || (*End != 0)
+      || (Value != V))
     return O.error(": '" + Arg + "' value invalid for uint argument!");
   return false;
 }