diff options
| author | Zachary Turner <zturner@google.com> | 2016-11-16 21:15:24 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2016-11-16 21:15:24 +0000 |
| commit | c156427ded1dfa7686c90cc56ad16013a079a742 (patch) | |
| tree | f4912beeebd9e7a04e9c20a8e05d64e25bde192d /lldb/source/API | |
| parent | 725dc14bb21da8a01709a6b3370a658d071689dc (diff) | |
| download | bcm5719-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.cpp | 19 | ||||
| -rw-r--r-- | lldb/source/API/SBFrame.cpp | 2 | ||||
| -rw-r--r-- | lldb/source/API/SBStream.cpp | 11 | ||||
| -rw-r--r-- | lldb/source/API/SBTarget.cpp | 2 |
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()); |

