From b2e0c1198283dc4cbdf3cd724a628ae2537dfc14 Mon Sep 17 00:00:00 2001 From: Greg Clayton Date: Wed, 3 Jun 2015 02:02:48 +0000 Subject: Fixed "format-string" based settings so they can have quotes on them without leaving the quotes in the format string: (lldb) settings set thread-format "abc" (lldb) settings set thread-format 'abc' (lldb) settings set thread-format abc We strip the quotes before processing the format string and return an "error: mismatched quotes" if mismatched quotes are given. llvm-svn: 238896 --- lldb/source/Interpreter/OptionValueFormatEntity.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'lldb/source/Interpreter/OptionValueFormatEntity.cpp') diff --git a/lldb/source/Interpreter/OptionValueFormatEntity.cpp b/lldb/source/Interpreter/OptionValueFormatEntity.cpp index 27a11eedd37..66d8d8419ed 100644 --- a/lldb/source/Interpreter/OptionValueFormatEntity.cpp +++ b/lldb/source/Interpreter/OptionValueFormatEntity.cpp @@ -66,7 +66,7 @@ OptionValueFormatEntity::DumpValue (const ExecutionContext *exe_ctx, Stream &str Error OptionValueFormatEntity::SetValueFromString (llvm::StringRef value_str, - VarSetOperationType op) + VarSetOperationType op) { Error error; switch (op) @@ -79,6 +79,25 @@ OptionValueFormatEntity::SetValueFromString (llvm::StringRef value_str, case eVarSetOperationReplace: case eVarSetOperationAssign: { + // Check if the string starts with a quote character after removing leading and trailing spaces. + // If it does start with a quote character, make sure it ends with the same quote character + // and remove the quotes before we parse the format string. If the string doesn't start with + // a quote, leave the string alone and parse as is. + llvm::StringRef trimmed_value_str = value_str.trim(); + if (!trimmed_value_str.empty()) + { + const char first_char = trimmed_value_str[0]; + if (first_char == '"' || first_char == '\'') + { + const size_t trimmed_len = trimmed_value_str.size(); + if (trimmed_len == 1 || value_str[trimmed_len-1] != first_char) + { + error.SetErrorStringWithFormat("mismatched quotes"); + return error; + } + value_str = trimmed_value_str.substr(1,trimmed_len-2); + } + } FormatEntity::Entry entry; error = FormatEntity::Parse(value_str, entry); if (error.Success()) -- cgit v1.2.3