forked from OSchip/llvm-project
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. <rdar://problem/21210789> llvm-svn: 238896
This commit is contained in:
parent
da86b6d409
commit
b2e0c11982
|
@ -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())
|
||||
|
|
|
@ -358,6 +358,14 @@ class SettingsCommandTestCase(TestBase):
|
|||
self.expect ("settings show target.env-vars",
|
||||
substrs = [ 'MY_FILE=this is a file name with spaces.txt' ])
|
||||
self.runCmd ("settings clear target.env-vars")
|
||||
# Test and make sure that setting "format-string" settings obeys quotes if they are provided
|
||||
self.runCmd ("settings set thread-format 'abc def' ")
|
||||
self.expect ("settings show thread-format", 'thread-format (format-string) = "abc def"')
|
||||
self.runCmd ('settings set thread-format "abc def" ')
|
||||
self.expect ("settings show thread-format", 'thread-format (format-string) = "abc def"')
|
||||
# Make sure when no quotes are provided that we maintain any trailing spaces
|
||||
self.runCmd ('settings set thread-format abc def ')
|
||||
self.expect ("settings show thread-format", 'thread-format (format-string) = "abc def "')
|
||||
|
||||
def test_settings_with_trailing_whitespace (self):
|
||||
|
||||
|
|
Loading…
Reference in New Issue