diff options
Diffstat (limited to 'source/Utility/Args.cpp')
-rw-r--r-- | source/Utility/Args.cpp | 57 |
1 files changed, 10 insertions, 47 deletions
diff --git a/source/Utility/Args.cpp b/source/Utility/Args.cpp index 77b0d43254a16..9fcc833ce432b 100644 --- a/source/Utility/Args.cpp +++ b/source/Utility/Args.cpp @@ -163,7 +163,6 @@ Args::ArgEntry::ArgEntry(llvm::StringRef str, char quote) : quote(quote) { ::memcpy(data(), str.data() ? str.data() : "", size); ptr[size] = 0; - ref = llvm::StringRef(c_str(), size); } // Args constructor @@ -172,8 +171,8 @@ Args::Args(llvm::StringRef command) { SetCommandString(command); } Args::Args(const Args &rhs) { *this = rhs; } Args::Args(const StringList &list) : Args() { - for (size_t i = 0; i < list.GetSize(); ++i) - AppendArgument(list[i]); + for (const std::string &arg : list) + AppendArgument(arg); } Args &Args::operator=(const Args &rhs) { @@ -182,7 +181,7 @@ Args &Args::operator=(const Args &rhs) { m_argv.clear(); m_entries.clear(); for (auto &entry : rhs.m_entries) { - m_entries.emplace_back(entry.ref, entry.quote); + m_entries.emplace_back(entry.ref(), entry.quote); m_argv.push_back(m_entries.back().data()); } m_argv.push_back(nullptr); @@ -199,7 +198,7 @@ void Args::Dump(Stream &s, const char *label_name) const { int i = 0; for (auto &entry : m_entries) { s.Indent(); - s.Format("{0}[{1}]=\"{2}\"\n", label_name, i++, entry.ref); + s.Format("{0}[{1}]=\"{2}\"\n", label_name, i++, entry.ref()); } s.Format("{0}[{1}]=NULL\n", label_name, i); s.EOL(); @@ -211,7 +210,7 @@ bool Args::GetCommandString(std::string &command) const { for (size_t i = 0; i < m_entries.size(); ++i) { if (i > 0) command += ' '; - command += m_entries[i].ref; + command += m_entries[i].ref(); } return !m_entries.empty(); @@ -226,10 +225,10 @@ bool Args::GetQuotedCommandString(std::string &command) const { if (m_entries[i].quote) { command += m_entries[i].quote; - command += m_entries[i].ref; + command += m_entries[i].ref(); command += m_entries[i].quote; } else { - command += m_entries[i].ref; + command += m_entries[i].ref(); } } @@ -260,12 +259,6 @@ const char *Args::GetArgumentAtIndex(size_t idx) const { return nullptr; } -char Args::GetArgumentQuoteCharAtIndex(size_t idx) const { - if (idx < m_entries.size()) - return m_entries[idx].quote; - return '\0'; -} - char **Args::GetArgumentVector() { assert(!m_argv.empty()); // TODO: functions like execve and posix_spawnp exhibit undefined behavior @@ -299,7 +292,7 @@ void Args::AppendArguments(const Args &rhs) { assert(m_argv.back() == nullptr); m_argv.pop_back(); for (auto &entry : rhs.m_entries) { - m_entries.emplace_back(entry.ref, entry.quote); + m_entries.emplace_back(entry.ref(), entry.quote); m_argv.push_back(m_entries.back().data()); } m_argv.push_back(nullptr); @@ -342,15 +335,8 @@ void Args::ReplaceArgumentAtIndex(size_t idx, llvm::StringRef arg_str, if (idx >= m_entries.size()) return; - if (arg_str.size() > m_entries[idx].ref.size()) { - m_entries[idx] = ArgEntry(arg_str, quote_char); - m_argv[idx] = m_entries[idx].data(); - } else { - const char *src_data = arg_str.data() ? arg_str.data() : ""; - ::memcpy(m_entries[idx].data(), src_data, arg_str.size()); - m_entries[idx].ptr[arg_str.size()] = 0; - m_entries[idx].ref = m_entries[idx].ref.take_front(arg_str.size()); - } + m_entries[idx] = ArgEntry(arg_str, quote_char); + m_argv[idx] = m_entries[idx].data(); } void Args::DeleteArgumentAtIndex(size_t idx) { @@ -388,29 +374,6 @@ void Args::Clear() { m_argv.push_back(nullptr); } -const char *Args::StripSpaces(std::string &s, bool leading, bool trailing, - bool return_null_if_empty) { - static const char *k_white_space = " \t\v"; - if (!s.empty()) { - if (leading) { - size_t pos = s.find_first_not_of(k_white_space); - if (pos == std::string::npos) - s.clear(); - else if (pos > 0) - s.erase(0, pos); - } - - if (trailing) { - size_t rpos = s.find_last_not_of(k_white_space); - if (rpos != std::string::npos && rpos + 1 < s.size()) - s.erase(rpos + 1); - } - } - if (return_null_if_empty && s.empty()) - return nullptr; - return s.c_str(); -} - const char *Args::GetShellSafeArgument(const FileSpec &shell, const char *unsafe_arg, std::string &safe_arg) { |