diff options
author | Lawrence D'Anna <lawrence_danna@apple.com> | 2019-10-15 17:41:40 +0000 |
---|---|---|
committer | Lawrence D'Anna <lawrence_danna@apple.com> | 2019-10-15 17:41:40 +0000 |
commit | 30cf609548d9379178ef618d9c8790459221ed22 (patch) | |
tree | 858eb178708952d85cc7d9e283350f71c0a1d2f3 | |
parent | fdfd6ab12e5e2ad3f6641a3b4442b3140212d29b (diff) | |
download | bcm5719-llvm-30cf609548d9379178ef618d9c8790459221ed22.tar.gz bcm5719-llvm-30cf609548d9379178ef618d9c8790459221ed22.zip |
remove FILE* usage from SBStream.i
Summary:
This patch removes FILE* and replaces it with SBFile and FileSP the
SWIG interface for `SBStream.i`. And this is the last one. With
this change, nothing in the python API will can access a FILE* method
on the C++ side.
Reviewers: JDevlieghere, jasonmolenda, labath
Reviewed By: labath
Subscribers: lldb-commits
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D68960
llvm-svn: 374924
-rw-r--r-- | lldb/include/lldb/API/SBStream.h | 4 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py | 27 | ||||
-rw-r--r-- | lldb/scripts/interface/SBStream.i | 13 | ||||
-rw-r--r-- | lldb/source/API/SBStream.cpp | 18 |
4 files changed, 59 insertions, 3 deletions
diff --git a/lldb/include/lldb/API/SBStream.h b/lldb/include/lldb/API/SBStream.h index 8afbf457562..b78c498e5f3 100644 --- a/lldb/include/lldb/API/SBStream.h +++ b/lldb/include/lldb/API/SBStream.h @@ -39,6 +39,10 @@ public: void RedirectToFile(const char *path, bool append); + void RedirectToFile(lldb::SBFile file); + + void RedirectToFile(lldb::FileSP file); + void RedirectToFileHandle(FILE *fh, bool transfer_fh_ownership); void RedirectToFileDescriptor(int fd, bool transfer_fh_ownership); diff --git a/lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py b/lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py index c9c55b458b4..6b17b07218c 100644 --- a/lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py +++ b/lldb/packages/Python/lldbsuite/test/python_api/file_handle/TestFileHandle.py @@ -892,3 +892,30 @@ class FileHandleTestCase(lldbtest.TestBase): sbf = self.debugger.GetInputFile() if sys.version_info.major >= 3: self.assertEqual(sbf.GetFile().fileno(), 0) + + + @add_test_categories(['pyapi']) + def test_sbstream(self): + + with open(self.out_filename, 'w') as f: + stream = lldb.SBStream() + stream.RedirectToFile(f) + stream.Print("zork") + with open(self.out_filename, 'r') as f: + self.assertEqual(f.read().strip(), "zork") + + with open(self.out_filename, 'w') as f: + stream = lldb.SBStream() + stream.RedirectToFileHandle(f, True) + stream.Print("Yendor") + with open(self.out_filename, 'r') as f: + self.assertEqual(f.read().strip(), "Yendor") + + stream = lldb.SBStream() + f = open(self.out_filename, 'w') + stream.RedirectToFile(lldb.SBFile.Create(f, borrow=False)) + stream.Print("Frobozz") + stream = None + self.assertTrue(f.closed) + with open(self.out_filename, 'r') as f: + self.assertEqual(f.read().strip(), "Frobozz") diff --git a/lldb/scripts/interface/SBStream.i b/lldb/scripts/interface/SBStream.i index fa882906d0e..31fb3802bf6 100644 --- a/lldb/scripts/interface/SBStream.i +++ b/lldb/scripts/interface/SBStream.i @@ -75,7 +75,18 @@ public: RedirectToFile (const char *path, bool append); void - RedirectToFileHandle (FILE *fh, bool transfer_fh_ownership); + RedirectToFile (lldb::SBFile file); + + void + RedirectToFile (lldb::FileSP file); + + %extend { + %feature("autodoc", "DEPRECATED, use RedirectToFile"); + void + RedirectToFileHandle (lldb::FileSP file, bool transfer_fh_ownership) { + self->RedirectToFile(file); + } + } void RedirectToFileDescriptor (int fd, bool transfer_fh_ownership); diff --git a/lldb/source/API/SBStream.cpp b/lldb/source/API/SBStream.cpp index e7c726b90cd..d57634d2947 100644 --- a/lldb/source/API/SBStream.cpp +++ b/lldb/source/API/SBStream.cpp @@ -9,6 +9,7 @@ #include "lldb/API/SBStream.h" #include "SBReproducerPrivate.h" +#include "lldb/API/SBFile.h" #include "lldb/Core/StreamFile.h" #include "lldb/Host/FileSystem.h" #include "lldb/Utility/Status.h" @@ -108,8 +109,19 @@ void SBStream::RedirectToFile(const char *path, bool append) { void SBStream::RedirectToFileHandle(FILE *fh, bool transfer_fh_ownership) { LLDB_RECORD_METHOD(void, SBStream, RedirectToFileHandle, (FILE *, bool), fh, transfer_fh_ownership); + FileSP file = std::make_unique<NativeFile>(fh, transfer_fh_ownership); + return RedirectToFile(file); +} + +void SBStream::RedirectToFile(SBFile file) { + LLDB_RECORD_METHOD(void, SBStream, RedirectToFile, (SBFile), file) + RedirectToFile(file.GetFile()); +} + +void SBStream::RedirectToFile(FileSP file_sp) { + LLDB_RECORD_METHOD(void, SBStream, RedirectToFile, (FileSP), file_sp); - if (fh == nullptr) + if (!file_sp || !file_sp->IsValid()) return; std::string local_data; @@ -120,7 +132,7 @@ void SBStream::RedirectToFileHandle(FILE *fh, bool transfer_fh_ownership) { local_data = static_cast<StreamString *>(m_opaque_up.get())->GetString(); } - m_opaque_up = std::make_unique<StreamFile>(fh, transfer_fh_ownership); + m_opaque_up = std::make_unique<StreamFile>(file_sp); m_is_file = true; // If we had any data locally in our StreamString, then pass that along to @@ -184,6 +196,8 @@ void RegisterMethods<SBStream>(Registry &R) { LLDB_REGISTER_METHOD(const char *, SBStream, GetData, ()); LLDB_REGISTER_METHOD(size_t, SBStream, GetSize, ()); LLDB_REGISTER_METHOD(void, SBStream, RedirectToFile, (const char *, bool)); + LLDB_REGISTER_METHOD(void, SBStream, RedirectToFile, (FileSP)); + LLDB_REGISTER_METHOD(void, SBStream, RedirectToFile, (SBFile)); LLDB_REGISTER_METHOD(void, SBStream, RedirectToFileHandle, (FILE *, bool)); LLDB_REGISTER_METHOD(void, SBStream, RedirectToFileDescriptor, (int, bool)); LLDB_REGISTER_METHOD(void, SBStream, Clear, ()); |