summaryrefslogtreecommitdiffstats
path: root/lldb/source/Interpreter
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Interpreter')
-rw-r--r--lldb/source/Interpreter/Args.cpp78
-rw-r--r--lldb/source/Interpreter/CommandAlias.cpp2
-rw-r--r--lldb/source/Interpreter/CommandInterpreter.cpp4
-rw-r--r--lldb/source/Interpreter/CommandObject.cpp4
4 files changed, 29 insertions, 59 deletions
diff --git a/lldb/source/Interpreter/Args.cpp b/lldb/source/Interpreter/Args.cpp
index 0dd093fe27a..c34b75e169c 100644
--- a/lldb/source/Interpreter/Args.cpp
+++ b/lldb/source/Interpreter/Args.cpp
@@ -352,11 +352,11 @@ void Args::Shift() {
}
}
-const char *Args::Unshift(const char *arg_cstr, char quote_char) {
- m_args.push_front(arg_cstr);
+llvm::StringRef Args::Unshift(llvm::StringRef arg_str, char quote_char) {
+ m_args.push_front(arg_str);
m_argv.insert(m_argv.begin(), m_args.front().c_str());
m_args_quote_char.insert(m_args_quote_char.begin(), quote_char);
- return GetArgumentAtIndex(0);
+ return llvm::StringRef::withNullAsEmpty(GetArgumentAtIndex(0));
}
void Args::AppendArguments(const Args &rhs) {
@@ -972,72 +972,42 @@ void Args::LongestCommonPrefix(std::string &common_prefix) {
}
}
-void Args::AddOrReplaceEnvironmentVariable(const char *env_var_name,
- const char *new_value) {
- if (!env_var_name || !new_value)
+void Args::AddOrReplaceEnvironmentVariable(llvm::StringRef env_var_name,
+ llvm::StringRef new_value) {
+ if (env_var_name.empty() || new_value.empty())
return;
// Build the new entry.
- StreamString stream;
- stream << env_var_name;
- stream << '=';
- stream << new_value;
- stream.Flush();
+ std::string var_string(env_var_name);
+ var_string += "=";
+ var_string += new_value;
- // Find the environment variable if present and replace it.
- for (size_t i = 0; i < GetArgumentCount(); ++i) {
- // Get the env var value.
- const char *arg_value = GetArgumentAtIndex(i);
- if (!arg_value)
- continue;
-
- // Find the name of the env var: before the first =.
- auto equal_p = strchr(arg_value, '=');
- if (!equal_p)
- continue;
-
- // Check if the name matches the given env_var_name.
- if (strncmp(env_var_name, arg_value, equal_p - arg_value) == 0) {
- ReplaceArgumentAtIndex(i, stream.GetString());
- return;
- }
+ size_t index = 0;
+ if (ContainsEnvironmentVariable(env_var_name, &index)) {
+ ReplaceArgumentAtIndex(index, var_string);
+ return;
}
// We didn't find it. Append it instead.
- AppendArgument(stream.GetString());
+ AppendArgument(var_string);
}
-bool Args::ContainsEnvironmentVariable(const char *env_var_name,
+bool Args::ContainsEnvironmentVariable(llvm::StringRef env_var_name,
size_t *argument_index) const {
// Validate args.
- if (!env_var_name)
+ if (env_var_name.empty())
return false;
// Check each arg to see if it matches the env var name.
for (size_t i = 0; i < GetArgumentCount(); ++i) {
- // Get the arg value.
- const char *argument_value = GetArgumentAtIndex(i);
- if (!argument_value)
- continue;
-
- // Check if we are the "{env_var_name}={env_var_value}" style.
- const char *equal_p = strchr(argument_value, '=');
- if (equal_p) {
- if (strncmp(env_var_name, argument_value, equal_p - argument_value) ==
- 0) {
- // We matched.
- if (argument_index)
- *argument_index = i;
- return true;
- }
- } else {
- // We're a simple {env_var_name}-style entry.
- if (strcmp(argument_value, env_var_name) == 0) {
- // We matched.
- if (argument_index)
- *argument_index = i;
- return true;
- }
+ auto arg_value = llvm::StringRef::withNullAsEmpty(GetArgumentAtIndex(0));
+
+ llvm::StringRef name, value;
+ std::tie(name, value) = arg_value.split('=');
+ if (name == env_var_name && !value.empty()) {
+ if (argument_index)
+ *argument_index = i;
+ return true;
}
}
diff --git a/lldb/source/Interpreter/CommandAlias.cpp b/lldb/source/Interpreter/CommandAlias.cpp
index 70b5394e158..16f324ab02d 100644
--- a/lldb/source/Interpreter/CommandAlias.cpp
+++ b/lldb/source/Interpreter/CommandAlias.cpp
@@ -41,7 +41,7 @@ static bool ProcessAliasOptionsArgs(lldb::CommandObjectSP &cmd_obj_sp,
ExecutionContext exe_ctx =
cmd_obj_sp->GetCommandInterpreter().GetExecutionContext();
options->NotifyOptionParsingStarting(&exe_ctx);
- args.Unshift("dummy_arg");
+ args.Unshift(llvm::StringRef("dummy_arg"));
args.ParseAliasOptions(*options, result, option_arg_vector, options_string);
args.Shift();
if (result.Succeeded())
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp b/lldb/source/Interpreter/CommandInterpreter.cpp
index 32bcca83522..eca4278d235 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -1333,7 +1333,7 @@ CommandObject *CommandInterpreter::BuildAliasResult(
std::string alias_name_str = alias_name;
if ((cmd_args.GetArgumentCount() == 0) ||
(alias_name_str.compare(cmd_args.GetArgumentAtIndex(0)) != 0))
- cmd_args.Unshift(alias_name);
+ cmd_args.Unshift(alias_name_str);
result_str.Printf("%s", alias_cmd_obj->GetCommandName());
@@ -1953,7 +1953,7 @@ void CommandInterpreter::BuildAliasCommandArgs(CommandObject *alias_cmd_obj,
// Make sure that the alias name is the 0th element in cmd_args
std::string alias_name_str = alias_name;
if (alias_name_str.compare(cmd_args.GetArgumentAtIndex(0)) != 0)
- cmd_args.Unshift(alias_name);
+ cmd_args.Unshift(alias_name_str);
Args new_args(alias_cmd_obj->GetCommandName());
if (new_args.GetArgumentCount() == 2)
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index 702939a1110..019fca9e4f6 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -116,7 +116,7 @@ bool CommandObject::ParseOptions(Args &args, CommandReturnObject &result) {
// ParseOptions calls getopt_long_only, which always skips the zero'th item
// in the array and starts at position 1,
// so we need to push a dummy value into position zero.
- args.Unshift("dummy_string");
+ args.Unshift(llvm::StringRef("dummy_string"));
const bool require_validation = true;
error = args.ParseOptions(*options, &exe_ctx,
GetCommandInterpreter().GetPlatform(true),
@@ -296,7 +296,7 @@ int CommandObject::HandleCompletion(Args &input, int &cursor_index,
if (cur_options != nullptr) {
// Re-insert the dummy command name string which will have been
// stripped off:
- input.Unshift("dummy-string");
+ input.Unshift(llvm::StringRef("dummy-string"));
cursor_index++;
// I stick an element on the end of the input, because if the last element
OpenPOWER on IntegriCloud