diff options
author | Russell Yanofsky <russ@yanofsky.org> | 2021-08-21 14:06:49 -0400 |
---|---|---|
committer | Russell Yanofsky <russ@yanofsky.org> | 2021-10-25 10:44:17 -0400 |
commit | b8c069b7a952e326d2d974cc671889d1a3b38aa4 (patch) | |
tree | 130fa8cc58539646cb34685f97ff485f8a738083 /src/util/system.cpp | |
parent | 26a50ab322614bceb5bc62e2c282f83e5987bad8 (diff) | |
download | bitcoin-b8c069b7a952e326d2d974cc671889d1a3b38aa4.tar.xz |
refactor: Add explicit DISALLOW_NEGATION ArgsManager flag to clarify flag usage
Currently, ALLOW_{INT|BOOL|STRING} flags don't do any real validation,
so current uses of these flags are misleading and will also break
backwards compatibility whenever these flags are implemented in a future
PR (draft PR is #16545).
An additional complication is that while these flags don't do any real
settings validation, they do affect whether setting negation syntax is
allowed.
Fix this mess by disabling ALLOW_{INT|BOOL|STRING} flags until they are
implemented, and adding an unambiguous DISALLOW_NEGATION flag. This is
done in two commits, with this commit adding the DISALLOW_NEGATION flag,
and the next commit disabling the ALLOW_{INT|BOOL|STRING} flags.
Diffstat (limited to 'src/util/system.cpp')
-rw-r--r-- | src/util/system.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/util/system.cpp b/src/util/system.cpp index 2bc6b3bdf8..47c2cc5af8 100644 --- a/src/util/system.cpp +++ b/src/util/system.cpp @@ -230,7 +230,7 @@ static std::optional<util::SettingsValue> InterpretValue(const KeyInfo& key, con { // Return negated settings as false values. if (key.negated) { - if (!(flags & ArgsManager::ALLOW_BOOL)) { + if (flags & ArgsManager::DISALLOW_NEGATION) { error = strprintf("Negating of -%s is meaningless and therefore forbidden", key.name); return std::nullopt; } @@ -652,6 +652,7 @@ void ArgsManager::AddArg(const std::string& name, const std::string& help, unsig LOCK(cs_args); std::map<std::string, Arg>& arg_map = m_available_args[cat]; + if ((flags & (ALLOW_ANY | ALLOW_BOOL)) == 0) flags |= DISALLOW_NEGATION; // Temporary, removed in next scripted-diff auto ret = arg_map.emplace(arg_name, Arg{name.substr(eq_index, name.size() - eq_index), help, flags}); assert(ret.second); // Make sure an insertion actually happened |