aboutsummaryrefslogtreecommitdiff
path: root/src/util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.cpp')
-rw-r--r--src/util.cpp59
1 files changed, 56 insertions, 3 deletions
diff --git a/src/util.cpp b/src/util.cpp
index 6a4c2a2ef..12ac076f0 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,5 +1,5 @@
// Copyright (c) 2009-2010 Satoshi Nakamoto
-// Copyright (c) 2011 The Bitcoin developers
+// Copyright (c) 2009-2012 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
#include "headers.h"
@@ -454,7 +454,7 @@ vector<unsigned char> ParseHex(const string& str)
return ParseHex(str.c_str());
}
-void ParseParameters(int argc, char* argv[])
+void ParseParameters(int argc, const char*const argv[])
{
mapArgs.clear();
mapMultiArgs.clear();
@@ -475,9 +475,62 @@ void ParseParameters(int argc, char* argv[])
#endif
if (psz[0] != '-')
break;
+
mapArgs[psz] = pszValue;
mapMultiArgs[psz].push_back(pszValue);
}
+
+ // New 0.6 features:
+ BOOST_FOREACH(const PAIRTYPE(string,string)& entry, mapArgs)
+ {
+ string name = entry.first;
+
+ // interpret --foo as -foo (as long as both are not set)
+ if (name.find("--") == 0)
+ {
+ std::string singleDash(name.begin()+1, name.end());
+ if (mapArgs.count(singleDash) == 0)
+ mapArgs[singleDash] = entry.second;
+ name = singleDash;
+ }
+
+ // interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1, as long as -foo not set)
+ if (name.find("-no") == 0)
+ {
+ std::string positive("-");
+ positive.append(name.begin()+3, name.end());
+ if (mapArgs.count(positive) == 0)
+ {
+ bool value = !GetBoolArg(name);
+ mapArgs[positive] = (value ? "1" : "0");
+ }
+ }
+ }
+}
+
+std::string GetArg(const std::string& strArg, const std::string& strDefault)
+{
+ if (mapArgs.count(strArg))
+ return mapArgs[strArg];
+ return strDefault;
+}
+
+int64 GetArg(const std::string& strArg, int64 nDefault)
+{
+ if (mapArgs.count(strArg))
+ return atoi64(mapArgs[strArg]);
+ return nDefault;
+}
+
+bool GetBoolArg(const std::string& strArg, bool fDefault)
+{
+ if (mapArgs.count(strArg))
+ {
+ if (mapArgs[strArg].empty())
+ return true;
+ return (atoi(mapArgs[strArg]) != 0);
+ }
+ return fDefault;
}
bool SoftSetArg(const std::string& strArg, const std::string& strValue)
@@ -488,7 +541,7 @@ bool SoftSetArg(const std::string& strArg, const std::string& strValue)
return true;
}
-bool SoftSetArg(const std::string& strArg, bool fValue)
+bool SoftSetBoolArg(const std::string& strArg, bool fValue)
{
if (fValue)
return SoftSetArg(strArg, std::string("1"));