Convert dashes to underscores for unknown flags (#177)
diff --git a/src/gflags.cc b/src/gflags.cc
index fe5300f..42dcd04 100644
--- a/src/gflags.cc
+++ b/src/gflags.cc
@@ -771,7 +771,12 @@
CommandLineFlag* FlagRegistry::FindFlagLocked(const char* name) {
FlagConstIterator i = flags_.find(name);
if (i == flags_.end()) {
- return NULL;
+ // If the name has dashes in it, try again after replacing with
+ // underscores.
+ if (strchr(name, '-') == NULL) return NULL;
+ string name_rep = name;
+ std::replace(name_rep.begin(), name_rep.end(), '-', '_');
+ return FindFlagLocked(name_rep.c_str());
} else {
return i->second;
}
diff --git a/test/gflags_unittest.cc b/test/gflags_unittest.cc
index 47dfd3c..9a922ef 100755
--- a/test/gflags_unittest.cc
+++ b/test/gflags_unittest.cc
@@ -357,6 +357,19 @@
false,
123,
123.0);
+
+ // Test that flags can use dashes instead of underscores.
+ TestFlagString(
+ // Flag string
+ "-test-string=initial\n"
+ "--test-bool=false\n"
+ "--test-int32=123\n"
+ "--test-double=123.0\n",
+ // Expected values
+ "initial",
+ false,
+ 123,
+ 123.0);
}
// Tests the filename part of the flagfile