summaryrefslogtreecommitdiffstats
path: root/lldb/source/API
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-11-16 21:15:24 +0000
committerZachary Turner <zturner@google.com>2016-11-16 21:15:24 +0000
commitc156427ded1dfa7686c90cc56ad16013a079a742 (patch)
treef4912beeebd9e7a04e9c20a8e05d64e25bde192d /lldb/source/API
parent725dc14bb21da8a01709a6b3370a658d071689dc (diff)
downloadbcm5719-llvm-c156427ded1dfa7686c90cc56ad16013a079a742.tar.gz
bcm5719-llvm-c156427ded1dfa7686c90cc56ad16013a079a742.zip
Don't allow direct access to StreamString's internal buffer.
This is a large API change that removes the two functions from StreamString that return a std::string& and a const std::string&, and instead provide one function which returns a StringRef. Direct access to the underlying buffer violates the concept of a "stream" which is intended to provide forward only access, and makes porting to llvm::raw_ostream more difficult in the future. Differential Revision: https://reviews.llvm.org/D26698 llvm-svn: 287152
Diffstat (limited to 'lldb/source/API')
-rw-r--r--lldb/source/API/SBCommandReturnObject.cpp19
-rw-r--r--lldb/source/API/SBFrame.cpp2
-rw-r--r--lldb/source/API/SBStream.cpp11
-rw-r--r--lldb/source/API/SBTarget.cpp2
4 files changed, 17 insertions, 17 deletions
diff --git a/lldb/source/API/SBCommandReturnObject.cpp b/lldb/source/API/SBCommandReturnObject.cpp
index 51e6781ffb5..41d5147af70 100644
--- a/lldb/source/API/SBCommandReturnObject.cpp
+++ b/lldb/source/API/SBCommandReturnObject.cpp
@@ -59,12 +59,14 @@ const char *SBCommandReturnObject::GetOutput() {
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
if (m_opaque_ap) {
+ llvm::StringRef output = m_opaque_ap->GetOutputData();
+ ConstString result(output.empty() ? llvm::StringRef("") : output);
+
if (log)
log->Printf("SBCommandReturnObject(%p)::GetOutput () => \"%s\"",
- static_cast<void *>(m_opaque_ap.get()),
- m_opaque_ap->GetOutputData());
+ static_cast<void *>(m_opaque_ap.get()), result.AsCString());
- return m_opaque_ap->GetOutputData();
+ return result.AsCString();
}
if (log)
@@ -78,12 +80,13 @@ const char *SBCommandReturnObject::GetError() {
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
if (m_opaque_ap) {
+ llvm::StringRef output = m_opaque_ap->GetErrorData();
+ ConstString result(output.empty() ? llvm::StringRef("") : output);
if (log)
log->Printf("SBCommandReturnObject(%p)::GetError () => \"%s\"",
- static_cast<void *>(m_opaque_ap.get()),
- m_opaque_ap->GetErrorData());
+ static_cast<void *>(m_opaque_ap.get()), result.AsCString());
- return m_opaque_ap->GetErrorData();
+ return result.AsCString();
}
if (log)
@@ -94,11 +97,11 @@ const char *SBCommandReturnObject::GetError() {
}
size_t SBCommandReturnObject::GetOutputSize() {
- return (m_opaque_ap ? strlen(m_opaque_ap->GetOutputData()) : 0);
+ return (m_opaque_ap ? m_opaque_ap->GetOutputData().size() : 0);
}
size_t SBCommandReturnObject::GetErrorSize() {
- return (m_opaque_ap ? strlen(m_opaque_ap->GetErrorData()) : 0);
+ return (m_opaque_ap ? m_opaque_ap->GetErrorData().size() : 0);
}
size_t SBCommandReturnObject::PutOutput(FILE *fh) {
diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp
index 31ac0a78eb1..1845b12cfcd 100644
--- a/lldb/source/API/SBFrame.cpp
+++ b/lldb/source/API/SBFrame.cpp
@@ -1295,7 +1295,7 @@ lldb::SBValue SBFrame::EvaluateExpression(const char *expr,
"SBFrame::EvaluateExpression (expr = \"%s\", fetch_dynamic_value "
"= %u) %s",
expr, options.GetFetchDynamicValue(),
- frame_description.GetString().c_str());
+ frame_description.GetData());
}
exe_results = target->EvaluateExpression(expr, frame, expr_value_sp,
diff --git a/lldb/source/API/SBStream.cpp b/lldb/source/API/SBStream.cpp
index 0ade453f845..858e949206f 100644
--- a/lldb/source/API/SBStream.cpp
+++ b/lldb/source/API/SBStream.cpp
@@ -63,8 +63,7 @@ void SBStream::RedirectToFile(const char *path, bool append) {
// See if we have any locally backed data. If so, copy it so we can then
// redirect it to the file so we don't lose the data
if (!m_is_file)
- local_data.swap(
- static_cast<StreamString *>(m_opaque_ap.get())->GetString());
+ local_data = static_cast<StreamString *>(m_opaque_ap.get())->GetString();
}
StreamFile *stream_file = new StreamFile;
uint32_t open_options = File::eOpenOptionWrite | File::eOpenOptionCanCreate;
@@ -97,8 +96,7 @@ void SBStream::RedirectToFileHandle(FILE *fh, bool transfer_fh_ownership) {
// See if we have any locally backed data. If so, copy it so we can then
// redirect it to the file so we don't lose the data
if (!m_is_file)
- local_data.swap(
- static_cast<StreamString *>(m_opaque_ap.get())->GetString());
+ local_data = static_cast<StreamString *>(m_opaque_ap.get())->GetString();
}
m_opaque_ap.reset(new StreamFile(fh, transfer_fh_ownership));
@@ -119,8 +117,7 @@ void SBStream::RedirectToFileDescriptor(int fd, bool transfer_fh_ownership) {
// See if we have any locally backed data. If so, copy it so we can then
// redirect it to the file so we don't lose the data
if (!m_is_file)
- local_data.swap(
- static_cast<StreamString *>(m_opaque_ap.get())->GetString());
+ local_data = static_cast<StreamString *>(m_opaque_ap.get())->GetString();
}
m_opaque_ap.reset(new StreamFile(::fdopen(fd, "w"), transfer_fh_ownership));
@@ -152,6 +149,6 @@ void SBStream::Clear() {
if (m_is_file)
m_opaque_ap.reset();
else
- static_cast<StreamString *>(m_opaque_ap.get())->GetString().clear();
+ static_cast<StreamString *>(m_opaque_ap.get())->Clear();
}
}
diff --git a/lldb/source/API/SBTarget.cpp b/lldb/source/API/SBTarget.cpp
index 7515343e044..fa58e7298d3 100644
--- a/lldb/source/API/SBTarget.cpp
+++ b/lldb/source/API/SBTarget.cpp
@@ -2133,7 +2133,7 @@ lldb::SBValue SBTarget::EvaluateExpression(const char *expr,
"SBTarget::EvaluateExpression (expr = \"%s\", fetch_dynamic_value = "
"%u) %s",
expr, options.GetFetchDynamicValue(),
- frame_description.GetString().c_str());
+ frame_description.GetString().str().c_str());
#endif
exe_results =
target->EvaluateExpression(expr, frame, expr_value_sp, options.ref());
OpenPOWER on IntegriCloud