summaryrefslogtreecommitdiff
path: root/source/Utility/Args.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Utility/Args.cpp')
-rw-r--r--source/Utility/Args.cpp57
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) {