From 302f42f23997278d8a54c260e0054f140dbf3098 Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Wed, 12 Oct 2016 10:23:42 -0700 Subject: [PATCH] Convert dashes to underscores for unknown flags (#177) --- src/gflags.cc | 7 ++++++- test/gflags_unittest.cc | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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 @@ void FlagRegistry::RegisterFlag(CommandLineFlag* flag) { 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 @@ TEST(FlagFileTest, ReadFlagsFromString) { 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