Author: zturner Date: Mon Sep 19 12:54:06 2016 New Revision: 281919 URL: http://llvm.org/viewvc/llvm-project?rev=281919&view=rev Log: Fix more functions in Args to use StringRef.
This patch also marks the const char* versions as =delete to prevent their use. This has the potential to cause build breakages on some platforms which I can't compile. I have tested on Windows, Linux, and OSX. Best practices for fixing broken callsites are outlined in Args.h in a comment above the deleted function declarations. Eventually we can remove these =delete declarations, but for now they are important to make sure that all implicit conversions from const char * are manually audited to make sure that they do not invoke a conversion from nullptr. Modified: lldb/trunk/include/lldb/Interpreter/Args.h lldb/trunk/source/API/SBPlatform.cpp lldb/trunk/source/Breakpoint/BreakpointIDList.cpp lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp lldb/trunk/source/Commands/CommandObjectExpression.cpp lldb/trunk/source/Commands/CommandObjectLog.cpp lldb/trunk/source/Commands/CommandObjectMemory.cpp lldb/trunk/source/Commands/CommandObjectMultiword.cpp lldb/trunk/source/Commands/CommandObjectPlatform.cpp lldb/trunk/source/Commands/CommandObjectProcess.cpp lldb/trunk/source/Commands/CommandObjectThread.cpp lldb/trunk/source/Commands/CommandObjectType.cpp lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp lldb/trunk/source/Host/linux/Host.cpp lldb/trunk/source/Host/windows/Host.cpp lldb/trunk/source/Interpreter/Args.cpp lldb/trunk/source/Interpreter/CommandInterpreter.cpp lldb/trunk/source/Interpreter/CommandObject.cpp lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp lldb/trunk/source/Interpreter/OptionValueBoolean.cpp lldb/trunk/source/Interpreter/OptionValueDictionary.cpp lldb/trunk/source/Interpreter/Property.cpp lldb/trunk/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp lldb/trunk/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp lldb/trunk/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp lldb/trunk/source/Target/Process.cpp lldb/trunk/source/Target/ProcessInfo.cpp lldb/trunk/source/Target/ProcessLaunchInfo.cpp lldb/trunk/unittests/Interpreter/TestArgs.cpp Modified: lldb/trunk/include/lldb/Interpreter/Args.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Args.h?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/include/lldb/Interpreter/Args.h (original) +++ lldb/trunk/include/lldb/Interpreter/Args.h Mon Sep 19 12:54:06 2016 @@ -179,13 +179,53 @@ public: /// @return /// The NULL terminated C string of the copy of \a arg_cstr. //------------------------------------------------------------------ - // TODO: Convert this function to use a StringRef. - const char *AppendArgument(const char *arg_cstr, char quote_char = '\0'); + llvm::StringRef AppendArgument(llvm::StringRef arg_str, + char quote_char = '\0'); void AppendArguments(const Args &rhs); void AppendArguments(const char **argv); + // Delete const char* versions of StringRef functions. Normally this would + // not + // be necessary, as const char * is implicitly convertible to StringRef. + // However, + // since the use of const char* is so pervasive, and since StringRef will + // assert + // if you try to construct one from nullptr, this allows the compiler to catch + // instances of the function being invoked with a const char *, allowing us to + // replace them with explicit conversions at each call-site. Once StringRef + // use becomes more pervasive, there will be fewer implicit conversions + // because + // we will be using StringRefs across the whole pipeline, so we won't have to + // have + // this "glue" that converts between the two, and at that point it becomes + // easy + // to just make sure you don't pass nullptr into the function. + // Call-site fixing methodology: + // 1. If you know the string cannot be null (e.g. it's a const char[], or + // it's + // been checked for null), use llvm::StringRef(ptr). + // 2. If you don't know if it can be null (e.g. it's returned from a + // function + // whose semantics are unclear), use + // llvm::StringRef::withNullAsEmpty(ptr). + // 3. If it's .c_str() of a std::string, just pass the std::string directly. + // 4. If it's .str().c_str() of a StringRef, just pass the StringRef + // directly. + void ReplaceArgumentAtIndex(size_t, const char *, char = '\0') = delete; + void AppendArgument(const char *arg_str, char quote_char = '\0') = delete; + void InsertArgumentAtIndex(size_t, const char *, char = '\0') = delete; + static bool StringToBoolean(const char *, bool, bool *) = delete; + static lldb::ScriptLanguage + StringToScriptLanguage(const char *, lldb::ScriptLanguage, bool *) = delete; + static lldb::Encoding + StringToEncoding(const char *, + lldb::Encoding = lldb::eEncodingInvalid) = delete; + static uint32_t StringToGenericRegister(const char *) = delete; + static bool StringToVersion(const char *, uint32_t &, uint32_t &, + uint32_t &) = delete; + //------------------------------------------------------------------ /// Insert the argument value at index \a idx to \a arg_cstr. /// @@ -201,8 +241,8 @@ public: /// @return /// The NULL terminated C string of the copy of \a arg_cstr. //------------------------------------------------------------------ - const char *InsertArgumentAtIndex(size_t idx, const char *arg_cstr, - char quote_char = '\0'); + llvm::StringRef InsertArgumentAtIndex(size_t idx, llvm::StringRef arg_str, + char quote_char = '\0'); //------------------------------------------------------------------ /// Replaces the argument value at index \a idx to \a arg_cstr @@ -221,8 +261,8 @@ public: /// The NULL terminated C string of the copy of \a arg_cstr if /// \a idx was a valid index, NULL otherwise. //------------------------------------------------------------------ - const char *ReplaceArgumentAtIndex(size_t idx, const char *arg_cstr, - char quote_char = '\0'); + llvm::StringRef ReplaceArgumentAtIndex(size_t idx, llvm::StringRef arg_str, + char quote_char = '\0'); //------------------------------------------------------------------ /// Deletes the argument value at index @@ -359,9 +399,6 @@ public: const char *s, lldb::addr_t fail_value, Error *error); - static bool StringToBoolean(const char *s, bool fail_value, - bool *success_ptr); - static bool StringToBoolean(llvm::StringRef s, bool fail_value, bool *success_ptr); @@ -383,15 +420,9 @@ public: // the format character static lldb::Encoding - StringToEncoding(const char *s, - lldb::Encoding fail_value = lldb::eEncodingInvalid); - - static lldb::Encoding StringToEncoding(llvm::StringRef s, lldb::Encoding fail_value = lldb::eEncodingInvalid); - static uint32_t StringToGenericRegister(const char *s); - static uint32_t StringToGenericRegister(llvm::StringRef s); static bool StringToVersion(llvm::StringRef string, uint32_t &major, Modified: lldb/trunk/source/API/SBPlatform.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBPlatform.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/API/SBPlatform.cpp (original) +++ lldb/trunk/source/API/SBPlatform.cpp Mon Sep 19 12:54:06 2016 @@ -251,7 +251,8 @@ SBError SBPlatform::ConnectRemote(SBPlat PlatformSP platform_sp(GetSP()); if (platform_sp && connect_options.GetURL()) { Args args; - args.AppendArgument(connect_options.GetURL()); + args.AppendArgument( + llvm::StringRef::withNullAsEmpty(connect_options.GetURL())); sb_error.ref() = platform_sp->ConnectRemote(args); } else { sb_error.SetErrorString("invalid platform"); Modified: lldb/trunk/source/Breakpoint/BreakpointIDList.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Breakpoint/BreakpointIDList.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Breakpoint/BreakpointIDList.cpp (original) +++ lldb/trunk/source/Breakpoint/BreakpointIDList.cpp Mon Sep 19 12:54:06 2016 @@ -215,7 +215,7 @@ void BreakpointIDList::FindAndReplaceIDR StreamString canonical_id_str; BreakpointID::GetCanonicalReference(&canonical_id_str, bp_id, bp_loc->GetID()); - new_args.AppendArgument(canonical_id_str.GetData()); + new_args.AppendArgument(canonical_id_str.GetString()); } } } @@ -309,7 +309,7 @@ void BreakpointIDList::FindAndReplaceIDR StreamString canonical_id_str; BreakpointID::GetCanonicalReference(&canonical_id_str, cur_bp_id, bp_loc->GetID()); - new_args.AppendArgument(canonical_id_str.GetData()); + new_args.AppendArgument(canonical_id_str.GetString()); } } } else if ((cur_bp_id == end_bp_id) && @@ -321,19 +321,19 @@ void BreakpointIDList::FindAndReplaceIDR StreamString canonical_id_str; BreakpointID::GetCanonicalReference(&canonical_id_str, cur_bp_id, bp_loc->GetID()); - new_args.AppendArgument(canonical_id_str.GetData()); + new_args.AppendArgument(canonical_id_str.GetString()); } } } else { StreamString canonical_id_str; BreakpointID::GetCanonicalReference(&canonical_id_str, cur_bp_id, LLDB_INVALID_BREAK_ID); - new_args.AppendArgument(canonical_id_str.GetData()); + new_args.AppendArgument(canonical_id_str.GetString()); } } } else // else is_range was false { - new_args.AppendArgument(current_arg); + new_args.AppendArgument(llvm::StringRef::withNullAsEmpty(current_arg)); } } @@ -345,7 +345,7 @@ void BreakpointIDList::FindAndReplaceIDR StreamString canonical_id_str; BreakpointID::GetCanonicalReference( &canonical_id_str, bkpt_sp->GetID(), LLDB_INVALID_BREAK_ID); - new_args.AppendArgument(canonical_id_str.GetData()); + new_args.AppendArgument(canonical_id_str.GetString()); } } } Modified: lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectBreakpoint.cpp Mon Sep 19 12:54:06 2016 @@ -172,7 +172,7 @@ public: case 'h': { bool success; - m_catch_bp = Args::StringToBoolean(option_arg, true, &success); + m_catch_bp = Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat( "Invalid boolean value for on-catch option: '%s'", option_arg); @@ -192,7 +192,7 @@ public: case 'K': { bool success; bool value; - value = Args::StringToBoolean(option_arg, true, &success); + value = Args::StringToBoolean(option_strref, true, &success); if (value) m_skip_prologue = eLazyBoolYes; else @@ -223,7 +223,7 @@ public: case 'm': { bool success; bool value; - value = Args::StringToBoolean(option_arg, true, &success); + value = Args::StringToBoolean(option_strref, true, &success); if (value) m_move_to_nearest_code = eLazyBoolYes; else @@ -265,8 +265,8 @@ public: break; case 'O': - m_exception_extra_args.AppendArgument("-O"); - m_exception_extra_args.AppendArgument(option_arg); + m_exception_extra_args.AppendArgument(llvm::StringRef("-O")); + m_exception_extra_args.AppendArgument(option_strref); break; case 'p': @@ -304,7 +304,7 @@ public: case 'w': { bool success; - m_throw_bp = Args::StringToBoolean(option_arg, true, &success); + m_throw_bp = Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat( "Invalid boolean value for on-throw option: '%s'", option_arg); @@ -861,7 +861,8 @@ public: break; case 'o': { bool value, success; - value = Args::StringToBoolean(option_arg, false, &success); + value = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_arg), false, &success); if (success) { m_one_shot_passed = true; m_one_shot = value; Modified: lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectBreakpointCommand.cpp Mon Sep 19 12:54:06 2016 @@ -268,6 +268,7 @@ are no syntax errors may indicate that a ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 'o': @@ -290,7 +291,7 @@ are no syntax errors may indicate that a case 'e': { bool success = false; - m_stop_on_error = Args::StringToBoolean(option_arg, false, &success); + m_stop_on_error = Args::StringToBoolean(option_strref, false, &success); if (!success) error.SetErrorStringWithFormat( "invalid value for stop-on-error: \"%s\"", option_arg); Modified: lldb/trunk/source/Commands/CommandObjectExpression.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectExpression.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectExpression.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectExpression.cpp Mon Sep 19 12:54:06 2016 @@ -78,6 +78,7 @@ Error CommandObjectExpression::CommandOp ExecutionContext *execution_context) { Error error; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); const int short_option = g_option_table[option_idx].short_option; switch (short_option) { @@ -91,7 +92,7 @@ Error CommandObjectExpression::CommandOp case 'a': { bool success; bool result; - result = Args::StringToBoolean(option_arg, true, &success); + result = Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat( "invalid all-threads value setting: \"%s\"", option_arg); @@ -101,7 +102,7 @@ Error CommandObjectExpression::CommandOp case 'i': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, true, &success); + bool tmp_value = Args::StringToBoolean(option_strref, true, &success); if (success) ignore_breakpoints = tmp_value; else @@ -112,7 +113,7 @@ Error CommandObjectExpression::CommandOp case 'j': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, true, &success); + bool tmp_value = Args::StringToBoolean(option_strref, true, &success); if (success) allow_jit = tmp_value; else @@ -134,7 +135,7 @@ Error CommandObjectExpression::CommandOp case 'u': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, true, &success); + bool tmp_value = Args::StringToBoolean(option_strref, true, &success); if (success) unwind_on_error = tmp_value; else @@ -168,7 +169,7 @@ Error CommandObjectExpression::CommandOp case 'X': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, true, &success); + bool tmp_value = Args::StringToBoolean(option_strref, true, &success); if (success) auto_apply_fixits = tmp_value ? eLazyBoolYes : eLazyBoolNo; else Modified: lldb/trunk/source/Commands/CommandObjectLog.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectLog.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectLog.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectLog.cpp Mon Sep 19 12:54:06 2016 @@ -387,8 +387,9 @@ protected: } if (strcasecmp(sub_command, "increment") == 0) { bool success; - bool increment = - Args::StringToBoolean(args.GetArgumentAtIndex(1), false, &success); + bool increment = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(args.GetArgumentAtIndex(1)), false, + &success); if (success) { Timer::SetQuiet(!increment); result.SetStatus(eReturnStatusSuccessFinishNoResult); Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Mon Sep 19 12:54:06 2016 @@ -1478,7 +1478,8 @@ protected: break; case eFormatBoolean: - uval64 = Args::StringToBoolean(value_str, false, &success); + uval64 = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(value_str), false, &success); if (!success) { result.AppendErrorWithFormat( "'%s' is not a valid boolean string value.\n", value_str); Modified: lldb/trunk/source/Commands/CommandObjectMultiword.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMultiword.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectMultiword.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectMultiword.cpp Mon Sep 19 12:54:06 2016 @@ -210,7 +210,7 @@ int CommandObjectMultiword::HandleComple matches.DeleteStringAtIndex(0); input.Shift(); cursor_char_position = 0; - input.AppendArgument(""); + input.AppendArgument(llvm::StringRef()); return cmd_obj->HandleCompletion( input, cursor_index, cursor_char_position, match_start_point, max_return_elements, word_complete, matches); Modified: lldb/trunk/source/Commands/CommandObjectPlatform.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectPlatform.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectPlatform.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectPlatform.cpp Mon Sep 19 12:54:06 2016 @@ -29,6 +29,8 @@ #include "lldb/Target/Process.h" #include "lldb/Utility/Utils.h" +#include "llvm/ADT/SmallString.h" + using namespace lldb; using namespace lldb_private; @@ -1057,9 +1059,9 @@ protected: Module *exe_module = target->GetExecutableModulePointer(); if (exe_module) { m_options.launch_info.GetExecutableFile() = exe_module->GetFileSpec(); - char exe_path[PATH_MAX]; - if (m_options.launch_info.GetExecutableFile().GetPath(exe_path, - sizeof(exe_path))) + llvm::SmallString<PATH_MAX> exe_path; + m_options.launch_info.GetExecutableFile().GetPath(exe_path); + if (!exe_path.empty()) m_options.launch_info.GetArguments().AppendArgument(exe_path); m_options.launch_info.GetArchitecture() = exe_module->GetArchitecture(); } Modified: lldb/trunk/source/Commands/CommandObjectProcess.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectProcess.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectProcess.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectProcess.cpp Mon Sep 19 12:54:06 2016 @@ -212,7 +212,7 @@ protected: if (target_settings_argv0) { m_options.launch_info.GetArguments().AppendArgument( - target_settings_argv0); + llvm::StringRef(target_settings_argv0)); m_options.launch_info.SetExecutableFile( exe_module_sp->GetPlatformFileSpec(), false); } else { @@ -760,12 +760,13 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 's': bool tmp_result; bool success; - tmp_result = Args::StringToBoolean(option_arg, false, &success); + tmp_result = Args::StringToBoolean(option_strref, false, &success); if (!success) error.SetErrorStringWithFormat("invalid boolean option: \"%s\"", option_arg); @@ -1458,7 +1459,7 @@ public: bool VerifyCommandOptionValue(const std::string &option, int &real_value) { bool okay = true; bool success = false; - bool tmp_value = Args::StringToBoolean(option.c_str(), false, &success); + bool tmp_value = Args::StringToBoolean(option, false, &success); if (success && tmp_value) real_value = 1; Modified: lldb/trunk/source/Commands/CommandObjectThread.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectThread.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectThread.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectThread.cpp Mon Sep 19 12:54:06 2016 @@ -157,6 +157,7 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 'c': { @@ -181,7 +182,7 @@ public: case 'e': { bool success; m_extended_backtrace = - Args::StringToBoolean(option_arg, false, &success); + Args::StringToBoolean(option_strref, false, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -315,11 +316,13 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 'a': { bool success; - bool avoid_no_debug = Args::StringToBoolean(option_arg, true, &success); + bool avoid_no_debug = + Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -331,7 +334,8 @@ public: case 'A': { bool success; - bool avoid_no_debug = Args::StringToBoolean(option_arg, true, &success); + bool avoid_no_debug = + Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat( "invalid boolean value for option '%c'", short_option); @@ -1441,11 +1445,12 @@ public: ExecutionContext *execution_context) override { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 'x': { bool success; - bool tmp_value = Args::StringToBoolean(option_arg, false, &success); + bool tmp_value = Args::StringToBoolean(option_strref, false, &success); if (success) m_from_expression = tmp_value; else { Modified: lldb/trunk/source/Commands/CommandObjectType.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectType.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectType.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectType.cpp Mon Sep 19 12:54:06 2016 @@ -298,7 +298,8 @@ private: switch (short_option) { case 'C': - m_cascade = Args::StringToBoolean(option_arg, true, &success); + m_cascade = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_arg), true, &success); if (!success) error.SetErrorStringWithFormat("invalid value for cascade: %s", option_arg); @@ -530,7 +531,8 @@ private: switch (short_option) { case 'C': - m_cascade = Args::StringToBoolean(option_value, true, &success); + m_cascade = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_value), true, &success); if (!success) error.SetErrorStringWithFormat("invalid value for cascade: %s", option_value); @@ -1246,7 +1248,8 @@ Error CommandObjectTypeSummaryAdd::Comma switch (short_option) { case 'C': - m_flags.SetCascades(Args::StringToBoolean(option_arg, true, &success)); + m_flags.SetCascades(Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_arg), true, &success)); if (!success) error.SetErrorStringWithFormat("invalid value for cascade: %s", option_arg); @@ -2557,7 +2560,8 @@ private: switch (short_option) { case 'C': - m_cascade = Args::StringToBoolean(option_arg, true, &success); + m_cascade = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_arg), true, &success); if (!success) error.SetErrorStringWithFormat("invalid value for cascade: %s", option_arg); Modified: lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectWatchpointCommand.cpp Mon Sep 19 12:54:06 2016 @@ -318,7 +318,8 @@ are no syntax errors may indicate that a case 'e': { bool success = false; - m_stop_on_error = Args::StringToBoolean(option_arg, false, &success); + m_stop_on_error = Args::StringToBoolean( + llvm::StringRef::withNullAsEmpty(option_arg), false, &success); if (!success) error.SetErrorStringWithFormat( "invalid value for stop-on-error: \"%s\"", option_arg); Modified: lldb/trunk/source/Host/linux/Host.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/linux/Host.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Host/linux/Host.cpp (original) +++ lldb/trunk/source/Host/linux/Host.cpp Mon Sep 19 12:54:06 2016 @@ -323,7 +323,7 @@ static bool GetProcessAndStatInfo(lldb:: char *next_var = (char *)buf_sp->GetBytes(); char *end_buf = next_var + buf_sp->GetByteSize(); while (next_var < end_buf && 0 != *next_var) { - info_env.AppendArgument(next_var); + info_env.AppendArgument(llvm::StringRef(next_var)); next_var += strlen(next_var) + 1; } @@ -340,7 +340,7 @@ static bool GetProcessAndStatInfo(lldb:: char *next_arg = cmd + strlen(cmd) + 1; end_buf = cmd + buf_sp->GetByteSize(); while (next_arg < end_buf && 0 != *next_arg) { - info_args.AppendArgument(next_arg); + info_args.AppendArgument(llvm::StringRef(next_arg)); next_arg += strlen(next_arg) + 1; } } Modified: lldb/trunk/source/Host/windows/Host.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/windows/Host.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Host/windows/Host.cpp (original) +++ lldb/trunk/source/Host/windows/Host.cpp Mon Sep 19 12:54:06 2016 @@ -273,7 +273,7 @@ Error Host::ShellExpandArguments(Process if (!str_sp) continue; - launch_info.GetArguments().AppendArgument(str_sp->GetValue().c_str()); + launch_info.GetArguments().AppendArgument(str_sp->GetValue()); } } Modified: lldb/trunk/source/Interpreter/Args.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Args.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/Args.cpp (original) +++ lldb/trunk/source/Interpreter/Args.cpp Mon Sep 19 12:54:06 2016 @@ -362,23 +362,23 @@ const char *Args::Unshift(const char *ar void Args::AppendArguments(const Args &rhs) { const size_t rhs_argc = rhs.GetArgumentCount(); for (size_t i = 0; i < rhs_argc; ++i) - AppendArgument(rhs.GetArgumentAtIndex(i), + AppendArgument(llvm::StringRef(rhs.GetArgumentAtIndex(i)), rhs.GetArgumentQuoteCharAtIndex(i)); } void Args::AppendArguments(const char **argv) { if (argv) { for (uint32_t i = 0; argv[i]; ++i) - AppendArgument(argv[i]); + AppendArgument(llvm::StringRef::withNullAsEmpty(argv[i])); } } -const char *Args::AppendArgument(const char *arg_cstr, char quote_char) { - return InsertArgumentAtIndex(GetArgumentCount(), arg_cstr, quote_char); +llvm::StringRef Args::AppendArgument(llvm::StringRef arg_str, char quote_char) { + return InsertArgumentAtIndex(GetArgumentCount(), arg_str, quote_char); } -const char *Args::InsertArgumentAtIndex(size_t idx, const char *arg_cstr, - char quote_char) { +llvm::StringRef Args::InsertArgumentAtIndex(size_t idx, llvm::StringRef arg_str, + char quote_char) { // Since we are using a std::list to hold onto the copied C string and // we don't have direct access to the elements, we have to iterate to // find the value. @@ -387,7 +387,7 @@ const char *Args::InsertArgumentAtIndex( for (pos = m_args.begin(); i > 0 && pos != end; ++pos) --i; - pos = m_args.insert(pos, arg_cstr); + pos = m_args.insert(pos, arg_str); if (idx >= m_args_quote_char.size()) { m_args_quote_char.resize(idx + 1); @@ -399,8 +399,9 @@ const char *Args::InsertArgumentAtIndex( return GetArgumentAtIndex(idx); } -const char *Args::ReplaceArgumentAtIndex(size_t idx, const char *arg_cstr, - char quote_char) { +llvm::StringRef Args::ReplaceArgumentAtIndex(size_t idx, + llvm::StringRef arg_str, + char quote_char) { // Since we are using a std::list to hold onto the copied C string and // we don't have direct access to the elements, we have to iterate to // find the value. @@ -410,7 +411,7 @@ const char *Args::ReplaceArgumentAtIndex --i; if (pos != end) { - pos->assign(arg_cstr); + pos->assign(arg_str); assert(idx < m_argv.size() - 1); m_argv[idx] = pos->c_str(); if (idx >= m_args_quote_char.size()) @@ -732,11 +733,6 @@ const char *Args::StripSpaces(std::strin return s.c_str(); } -bool Args::StringToBoolean(const char *s, bool fail_value, - bool *success_ptr) { - return StringToBoolean(llvm::StringRef(s ? s : ""), fail_value, success_ptr); -} - bool Args::StringToBoolean(llvm::StringRef ref, bool fail_value, bool *success_ptr) { if (success_ptr) @@ -915,13 +911,6 @@ Error Args::StringToFormat(const char *s return error; } -lldb::Encoding Args::StringToEncoding(const char *s, - lldb::Encoding fail_value) { - if (!s) - return fail_value; - return StringToEncoding(llvm::StringRef(s), fail_value); -} - lldb::Encoding Args::StringToEncoding(llvm::StringRef s, lldb::Encoding fail_value) { return llvm::StringSwitch<lldb::Encoding>(s) @@ -932,12 +921,6 @@ lldb::Encoding Args::StringToEncoding(ll .Default(fail_value); } -uint32_t Args::StringToGenericRegister(const char *s) { - if (!s) - return LLDB_INVALID_REGNUM; - return StringToGenericRegister(llvm::StringRef(s)); -} - uint32_t Args::StringToGenericRegister(llvm::StringRef s) { if (s.empty()) return LLDB_INVALID_REGNUM; @@ -1015,13 +998,13 @@ void Args::AddOrReplaceEnvironmentVariab // 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().c_str()); + ReplaceArgumentAtIndex(i, stream.GetString()); return; } } // We didn't find it. Append it instead. - AppendArgument(stream.GetString().c_str()); + AppendArgument(stream.GetString()); } bool Args::ContainsEnvironmentVariable(const char *env_var_name, @@ -1239,7 +1222,7 @@ void Args::ParseAliasOptions(Options &op if (pos != std::string::npos) raw_input_string.erase(pos, strlen(tmp_arg)); } - ReplaceArgumentAtIndex(idx, ""); + ReplaceArgumentAtIndex(idx, llvm::StringRef()); if ((long_options[long_options_index].definition->option_has_arg != OptionParser::eNoArgument) && (OptionParser::GetOptionArgument() != nullptr) && @@ -1252,7 +1235,7 @@ void Args::ParseAliasOptions(Options &op if (pos != std::string::npos) raw_input_string.erase(pos, strlen(tmp_arg)); } - ReplaceArgumentAtIndex(idx + 1, ""); + ReplaceArgumentAtIndex(idx + 1, llvm::StringRef()); } } } Modified: lldb/trunk/source/Interpreter/CommandInterpreter.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandInterpreter.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/CommandInterpreter.cpp (original) +++ lldb/trunk/source/Interpreter/CommandInterpreter.cpp Mon Sep 19 12:54:06 2016 @@ -1760,7 +1760,7 @@ int CommandInterpreter::HandleCompletion look_for_subcommand = true; num_command_matches = 0; matches.DeleteStringAtIndex(0); - parsed_line.AppendArgument(""); + parsed_line.AppendArgument(llvm::StringRef()); cursor_index++; cursor_char_position = 0; } @@ -1842,7 +1842,8 @@ int CommandInterpreter::HandleCompletion partial_parsed_line.GetArgumentAtIndex(cursor_index); if (cursor_char_position == 0 || current_elem[cursor_char_position - 1] != ' ') { - parsed_line.InsertArgumentAtIndex(cursor_index + 1, "", '\0'); + parsed_line.InsertArgumentAtIndex(cursor_index + 1, llvm::StringRef(), + '\0'); cursor_index++; cursor_char_position = 0; } @@ -1987,21 +1988,23 @@ void CommandInterpreter::BuildAliasComma // this above, make // sure we don't // insert it twice - new_args.AppendArgument(value.c_str()); + new_args + .AppendArgument( + value); } else { if (value_type != OptionParser::eOptionalArgument) - new_args.AppendArgument(option.c_str()); + new_args.AppendArgument(option); if (value.compare("<no-argument>") != 0) { int index = GetOptionArgumentPosition(value.c_str()); if (index == 0) { // value was NOT a positional argument; must be a real value if (value_type != OptionParser::eOptionalArgument) - new_args.AppendArgument(value.c_str()); + new_args.AppendArgument(value); else { char buffer[255]; ::snprintf(buffer, sizeof(buffer), "%s%s", option.c_str(), value.c_str()); - new_args.AppendArgument(buffer); + new_args.AppendArgument(llvm::StringRef(buffer)); } } else if (static_cast<size_t>(index) >= @@ -2023,12 +2026,13 @@ void CommandInterpreter::BuildAliasComma } if (value_type != OptionParser::eOptionalArgument) - new_args.AppendArgument(cmd_args.GetArgumentAtIndex(index)); + new_args.AppendArgument(llvm::StringRef::withNullAsEmpty( + cmd_args.GetArgumentAtIndex(index))); else { char buffer[255]; ::snprintf(buffer, sizeof(buffer), "%s%s", option.c_str(), cmd_args.GetArgumentAtIndex(index)); - new_args.AppendArgument(buffer); + new_args.AppendArgument(llvm::StringRef(buffer)); } used[index] = true; } @@ -2038,7 +2042,8 @@ void CommandInterpreter::BuildAliasComma for (size_t j = 0; j < cmd_args.GetArgumentCount(); ++j) { if (!used[j] && !wants_raw_input) - new_args.AppendArgument(cmd_args.GetArgumentAtIndex(j)); + new_args.AppendArgument( + llvm::StringRef(cmd_args.GetArgumentAtIndex(j))); } cmd_args.Clear(); Modified: lldb/trunk/source/Interpreter/CommandObject.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandObject.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/CommandObject.cpp (original) +++ lldb/trunk/source/Interpreter/CommandObject.cpp Mon Sep 19 12:54:06 2016 @@ -300,10 +300,9 @@ int CommandObject::HandleCompletion(Args cursor_index++; // I stick an element on the end of the input, because if the last element - // is - // option that requires an argument, getopt_long_only will freak out. + // is option that requires an argument, getopt_long_only will freak out. - input.AppendArgument("<FAKE-VALUE>"); + input.AppendArgument(llvm::StringRef("<FAKE-VALUE>")); input.ParseArgsForCompletion(*cur_options, opt_element_vector, cursor_index); @@ -1001,7 +1000,8 @@ bool CommandObjectParsed::Execute(const const char *tmp_str = cmd_args.GetArgumentAtIndex(i); if (tmp_str[0] == '`') // back-quote cmd_args.ReplaceArgumentAtIndex( - i, m_interpreter.ProcessEmbeddedScriptCommands(tmp_str)); + i, llvm::StringRef::withNullAsEmpty( + m_interpreter.ProcessEmbeddedScriptCommands(tmp_str))); } if (CheckRequirements(result)) { Modified: lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp (original) +++ lldb/trunk/source/Interpreter/OptionGroupValueObjectDisplay.cpp Mon Sep 19 12:54:06 2016 @@ -85,6 +85,8 @@ Error OptionGroupValueObjectDisplay::Set const int short_option = g_option_table[option_idx].short_option; bool success = false; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); + switch (short_option) { case 'd': { int32_t result; @@ -141,13 +143,13 @@ Error OptionGroupValueObjectDisplay::Set break; case 'S': - use_synth = Args::StringToBoolean(option_arg, true, &success); + use_synth = Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat("invalid synthetic-type '%s'", option_arg); break; case 'V': - run_validator = Args::StringToBoolean(option_arg, true, &success); + run_validator = Args::StringToBoolean(option_strref, true, &success); if (!success) error.SetErrorStringWithFormat("invalid validate '%s'", option_arg); break; Modified: lldb/trunk/source/Interpreter/OptionValueBoolean.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueBoolean.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/OptionValueBoolean.cpp (original) +++ lldb/trunk/source/Interpreter/OptionValueBoolean.cpp Mon Sep 19 12:54:06 2016 @@ -1,5 +1,4 @@ -//===-- OptionValueBoolean.cpp ------------------------------------*- C++ -//-*-===// +//===-- OptionValueBoolean.cpp ----------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -48,8 +47,7 @@ Error OptionValueBoolean::SetValueFromSt case eVarSetOperationReplace: case eVarSetOperationAssign: { bool success = false; - bool value = - Args::StringToBoolean(value_str.str().c_str(), false, &success); + bool value = Args::StringToBoolean(value_str, false, &success); if (success) { m_value_was_set = true; m_current_value = value; Modified: lldb/trunk/source/Interpreter/OptionValueDictionary.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/OptionValueDictionary.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/OptionValueDictionary.cpp (original) +++ lldb/trunk/source/Interpreter/OptionValueDictionary.cpp Mon Sep 19 12:54:06 2016 @@ -85,7 +85,7 @@ size_t OptionValueDictionary::GetArgs(Ar StreamString strm; strm.Printf("%s=", pos->first.GetCString()); pos->second->DumpValue(nullptr, strm, eDumpOptionValue | eDumpOptionRaw); - args.AppendArgument(strm.GetString().c_str()); + args.AppendArgument(strm.GetString()); } return args.GetArgumentCount(); } Modified: lldb/trunk/source/Interpreter/Property.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Property.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Interpreter/Property.cpp (original) +++ lldb/trunk/source/Interpreter/Property.cpp Mon Sep 19 12:54:06 2016 @@ -54,7 +54,7 @@ Property::Property(const PropertyDefinit // default value. if (definition.default_cstr_value) m_value_sp.reset(new OptionValueBoolean(Args::StringToBoolean( - definition.default_cstr_value, false, nullptr))); + llvm::StringRef(definition.default_cstr_value), false, nullptr))); else m_value_sp.reset( new OptionValueBoolean(definition.default_uint_value != 0)); Modified: lldb/trunk/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp (original) +++ lldb/trunk/source/Plugins/Platform/Android/PlatformAndroidRemoteGDBServer.cpp Mon Sep 19 12:54:06 2016 @@ -137,7 +137,7 @@ Error PlatformAndroidRemoteGDBServer::Co if (error.Fail()) return error; - args.ReplaceArgumentAtIndex(0, connect_url.c_str()); + args.ReplaceArgumentAtIndex(0, connect_url); Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PLATFORM)); if (log) Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp Mon Sep 19 12:54:06 2016 @@ -1886,7 +1886,7 @@ PlatformDarwin::LaunchProcess(lldb_priva // we get os_log and NSLog messages mirrored to the target process // stderr. if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE")) - env_vars.AppendArgument("OS_ACTIVITY_DT_MODE=enable"); + env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable")); } // Let our parent class do the real launching. Modified: lldb/trunk/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp (original) +++ lldb/trunk/source/Plugins/Process/Utility/DynamicRegisterInfo.cpp Mon Sep 19 12:54:06 2016 @@ -305,8 +305,7 @@ DynamicRegisterInfo::SetRegisterInfo(con std::string encoding_str; if (reg_info_dict->GetValueForKeyAsString("encoding", encoding_str)) - reg_info.encoding = - Args::StringToEncoding(encoding_str.c_str(), eEncodingUint); + reg_info.encoding = Args::StringToEncoding(encoding_str, eEncodingUint); else reg_info_dict->GetValueForKeyAsInteger("encoding", reg_info.encoding, eEncodingUint); @@ -337,7 +336,7 @@ DynamicRegisterInfo::SetRegisterInfo(con std::string generic_str; if (reg_info_dict->GetValueForKeyAsString("generic", generic_str)) reg_info.kinds[lldb::eRegisterKindGeneric] = - Args::StringToGenericRegister(generic_str.c_str()); + Args::StringToGenericRegister(generic_str); else reg_info_dict->GetValueForKeyAsInteger( "generic", reg_info.kinds[lldb::eRegisterKindGeneric], Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp Mon Sep 19 12:54:06 2016 @@ -1067,31 +1067,31 @@ Error GDBRemoteCommunication::StartDebug char arg_cstr[PATH_MAX]; // Start args with "debugserver /file/path -r --" - debugserver_args.AppendArgument(debugserver_path); + debugserver_args.AppendArgument(llvm::StringRef(debugserver_path)); #if !defined(__APPLE__) // First argument to lldb-server must be mode in which to run. - debugserver_args.AppendArgument("gdbserver"); + debugserver_args.AppendArgument(llvm::StringRef("gdbserver")); #endif // If a url is supplied then use it if (url) - debugserver_args.AppendArgument(url); + debugserver_args.AppendArgument(llvm::StringRef(url)); if (pass_comm_fd >= 0) { StreamString fd_arg; fd_arg.Printf("--fd=%i", pass_comm_fd); - debugserver_args.AppendArgument(fd_arg.GetData()); + debugserver_args.AppendArgument(fd_arg.GetString()); // Send "pass_comm_fd" down to the inferior so it can use it to // communicate back with this process launch_info.AppendDuplicateFileAction(pass_comm_fd, pass_comm_fd); } // use native registers, not the GDB registers - debugserver_args.AppendArgument("--native-regs"); + debugserver_args.AppendArgument(llvm::StringRef("--native-regs")); if (launch_info.GetLaunchInSeparateProcessGroup()) { - debugserver_args.AppendArgument("--setsid"); + debugserver_args.AppendArgument(llvm::StringRef("--setsid")); } llvm::SmallString<PATH_MAX> named_pipe_path; @@ -1137,8 +1137,8 @@ Error GDBRemoteCommunication::StartDebug return error; } int write_fd = socket_pipe.GetWriteFileDescriptor(); - debugserver_args.AppendArgument("--pipe"); - debugserver_args.AppendArgument(llvm::to_string(write_fd).c_str()); + debugserver_args.AppendArgument(llvm::StringRef("--pipe")); + debugserver_args.AppendArgument(llvm::to_string(write_fd)); launch_info.AppendCloseFileAction(socket_pipe.GetReadFileDescriptor()); #endif } else { @@ -1164,8 +1164,8 @@ Error GDBRemoteCommunication::StartDebug // Send the host and port down that debugserver and specify an option // so that it connects back to the port we are listening to in this // process - debugserver_args.AppendArgument("--reverse-connect"); - debugserver_args.AppendArgument(port_cstr); + debugserver_args.AppendArgument(llvm::StringRef("--reverse-connect")); + debugserver_args.AppendArgument(llvm::StringRef(port_cstr)); if (port) *port = port_; } else { @@ -1182,7 +1182,7 @@ Error GDBRemoteCommunication::StartDebug if (env_debugserver_log_file) { ::snprintf(arg_cstr, sizeof(arg_cstr), "--log-file=%s", env_debugserver_log_file); - debugserver_args.AppendArgument(arg_cstr); + debugserver_args.AppendArgument(llvm::StringRef(arg_cstr)); } #if defined(__APPLE__) @@ -1199,7 +1199,7 @@ Error GDBRemoteCommunication::StartDebug if (env_debugserver_log_channels) { ::snprintf(arg_cstr, sizeof(arg_cstr), "--log-channels=%s", env_debugserver_log_channels); - debugserver_args.AppendArgument(arg_cstr); + debugserver_args.AppendArgument(llvm::StringRef(arg_cstr)); } #endif @@ -1215,7 +1215,7 @@ Error GDBRemoteCommunication::StartDebug has_env_var = extra_arg != nullptr; if (has_env_var) { - debugserver_args.AppendArgument(extra_arg); + debugserver_args.AppendArgument(llvm::StringRef(extra_arg)); if (log) log->Printf("GDBRemoteCommunication::%s adding env var %s contents " "to stub command line (%s)", @@ -1224,7 +1224,7 @@ Error GDBRemoteCommunication::StartDebug } while (has_env_var); if (inferior_args && inferior_args->GetArgumentCount() > 0) { - debugserver_args.AppendArgument("--"); + debugserver_args.AppendArgument(llvm::StringRef("--")); debugserver_args.AppendArguments(*inferior_args); } @@ -1232,7 +1232,7 @@ Error GDBRemoteCommunication::StartDebug StringList env; if (Host::GetEnvironment(env)) { for (size_t i = 0; i < env.GetSize(); ++i) - launch_info.GetEnvironmentEntries().AppendArgument(env[i].c_str()); + launch_info.GetEnvironmentEntries().AppendArgument(env[i]); } // Close STDIN, STDOUT and STDERR. Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp Mon Sep 19 12:54:06 2016 @@ -946,7 +946,8 @@ GDBRemoteCommunicationServerCommon::Hand packet.SetFilePos(::strlen("QEnvironment:")); const uint32_t bytes_left = packet.GetBytesLeft(); if (bytes_left > 0) { - m_process_launch_info.GetEnvironmentEntries().AppendArgument(packet.Peek()); + m_process_launch_info.GetEnvironmentEntries().AppendArgument( + llvm::StringRef::withNullAsEmpty(packet.Peek())); return SendOKResponse(); } return SendErrorResponse(12); @@ -960,7 +961,7 @@ GDBRemoteCommunicationServerCommon::Hand if (bytes_left > 0) { std::string str; packet.GetHexByteString(str); - m_process_launch_info.GetEnvironmentEntries().AppendArgument(str.c_str()); + m_process_launch_info.GetEnvironmentEntries().AppendArgument(str); return SendOKResponse(); } return SendErrorResponse(12); @@ -1032,8 +1033,7 @@ GDBRemoteCommunicationServerCommon::Hand if (arg_idx == 0) m_process_launch_info.GetExecutableFile().SetFile(arg.c_str(), false); - m_process_launch_info.GetArguments().AppendArgument( - arg.c_str()); + m_process_launch_info.GetArguments().AppendArgument(arg); if (log) log->Printf("LLGSPacketHandler::%s added arg %d: \"%s\"", __FUNCTION__, actual_arg_index, arg.c_str()); Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original) +++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Mon Sep 19 12:54:06 2016 @@ -4158,8 +4158,7 @@ bool ParseRegisters(XMLNode feature_node alt_name.SetString(value); } else if (name == "encoding") { encoding_set = true; - reg_info.encoding = - Args::StringToEncoding(value.data(), eEncodingUint); + reg_info.encoding = Args::StringToEncoding(value, eEncodingUint); } else if (name == "format") { format_set = true; Format format = eFormatInvalid; @@ -4198,7 +4197,7 @@ bool ParseRegisters(XMLNode feature_node StringConvert::ToUInt32(value.data(), LLDB_INVALID_REGNUM, 0); } else if (name == "generic") { reg_info.kinds[eRegisterKindGeneric] = - Args::StringToGenericRegister(value.data()); + Args::StringToGenericRegister(value); } else if (name == "value_regnums") { SplitCommaSeparatedRegisterNumberString(value, value_regs, 0); } else if (name == "invalidate_regnums") { Modified: lldb/trunk/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp (original) +++ lldb/trunk/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp Mon Sep 19 12:54:06 2016 @@ -429,6 +429,7 @@ public: Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 'a': m_include_any_process = true; @@ -442,7 +443,7 @@ public: break; case 'b': - m_broadcast_events = Args::StringToBoolean(option_arg, true, nullptr); + m_broadcast_events = Args::StringToBoolean(option_strref, true, nullptr); break; case 'c': @@ -458,7 +459,7 @@ public: break; case 'e': - m_echo_to_stderr = Args::StringToBoolean(option_arg, false, nullptr); + m_echo_to_stderr = Args::StringToBoolean(option_strref, false, nullptr); break; case 'f': @@ -469,12 +470,12 @@ public: break; case 'l': - m_live_stream = Args::StringToBoolean(option_arg, false, nullptr); + m_live_stream = Args::StringToBoolean(option_strref, false, nullptr); break; case 'n': m_filter_fall_through_accepts = - Args::StringToBoolean(option_arg, true, nullptr); + Args::StringToBoolean(option_strref, true, nullptr); break; case 'r': Modified: lldb/trunk/source/Target/Process.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Process.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Target/Process.cpp (original) +++ lldb/trunk/source/Target/Process.cpp Mon Sep 19 12:54:06 2016 @@ -416,6 +416,7 @@ Error ProcessLaunchCommandOptions::SetOp ExecutionContext *execution_context) { Error error; const int short_option = m_getopt_table[option_idx].val; + auto option_strref = llvm::StringRef::withNullAsEmpty(option_arg); switch (short_option) { case 's': // Stop at program entry point @@ -484,7 +485,7 @@ Error ProcessLaunchCommandOptions::SetOp { bool success; const bool disable_aslr_arg = - Args::StringToBoolean(option_arg, true, &success); + Args::StringToBoolean(option_strref, true, &success); if (success) disable_aslr = disable_aslr_arg ? eLazyBoolYes : eLazyBoolNo; else @@ -497,7 +498,8 @@ Error ProcessLaunchCommandOptions::SetOp case 'X': // shell expand args. { bool success; - const bool expand_args = Args::StringToBoolean(option_arg, true, &success); + const bool expand_args = + Args::StringToBoolean(option_strref, true, &success); if (success) launch_info.SetShellExpandArguments(expand_args); else @@ -515,7 +517,8 @@ Error ProcessLaunchCommandOptions::SetOp break; case 'v': - launch_info.GetEnvironmentEntries().AppendArgument(option_arg); + launch_info.GetEnvironmentEntries().AppendArgument( + llvm::StringRef::withNullAsEmpty(option_arg)); break; default: Modified: lldb/trunk/source/Target/ProcessInfo.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ProcessInfo.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Target/ProcessInfo.cpp (original) +++ lldb/trunk/source/Target/ProcessInfo.cpp Mon Sep 19 12:54:06 2016 @@ -18,6 +18,8 @@ #include "lldb/Core/Stream.h" #include "lldb/Host/PosixApi.h" +#include "llvm/ADT/SmallString.h" + using namespace lldb; using namespace lldb_private; @@ -66,8 +68,9 @@ void ProcessInfo::SetExecutableFile(cons if (exe_file) { m_executable = exe_file; if (add_exe_file_as_first_arg) { - char filename[PATH_MAX]; - if (exe_file.GetPath(filename, sizeof(filename))) + llvm::SmallString<PATH_MAX> filename; + exe_file.GetPath(filename); + if (!filename.empty()) m_arguments.InsertArgumentAtIndex(0, filename); } } else { Modified: lldb/trunk/source/Target/ProcessLaunchInfo.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ProcessLaunchInfo.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/source/Target/ProcessLaunchInfo.cpp (original) +++ lldb/trunk/source/Target/ProcessLaunchInfo.cpp Mon Sep 19 12:54:06 2016 @@ -344,13 +344,13 @@ bool ProcessLaunchInfo::ConvertArguments return false; Args shell_arguments; std::string safe_arg; - shell_arguments.AppendArgument(shell_executable.c_str()); + shell_arguments.AppendArgument(shell_executable); const llvm::Triple &triple = GetArchitecture().GetTriple(); if (triple.getOS() == llvm::Triple::Win32 && !triple.isWindowsCygwinEnvironment()) - shell_arguments.AppendArgument("/C"); + shell_arguments.AppendArgument(llvm::StringRef("/C")); else - shell_arguments.AppendArgument("-c"); + shell_arguments.AppendArgument(llvm::StringRef("-c")); StreamString shell_command; if (will_debug) { @@ -428,7 +428,7 @@ bool ProcessLaunchInfo::ConvertArguments shell_command.Printf(" %s", arg); } } - shell_arguments.AppendArgument(shell_command.GetString().c_str()); + shell_arguments.AppendArgument(shell_command.GetString()); m_executable = m_shell; m_arguments = shell_arguments; return true; Modified: lldb/trunk/unittests/Interpreter/TestArgs.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Interpreter/TestArgs.cpp?rev=281919&r1=281918&r2=281919&view=diff ============================================================================== --- lldb/trunk/unittests/Interpreter/TestArgs.cpp (original) +++ lldb/trunk/unittests/Interpreter/TestArgs.cpp Mon Sep 19 12:54:06 2016 @@ -57,7 +57,7 @@ TEST(ArgsTest, TestAppendArg) { Args args; args.SetCommandString("first_arg"); EXPECT_EQ(1u, args.GetArgumentCount()); - args.AppendArgument("second_arg"); + args.AppendArgument(llvm::StringRef("second_arg")); EXPECT_EQ(2u, args.GetArgumentCount()); EXPECT_STREQ(args.GetArgumentAtIndex(0), "first_arg"); EXPECT_STREQ(args.GetArgumentAtIndex(1), "second_arg"); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits