diff --git a/lldb/include/lldb/API/SBCommandReturnObject.h b/lldb/include/lldb/API/SBCommandReturnObject.h index b45eb9c14c04..2b7cce5ded59 100644 --- a/lldb/include/lldb/API/SBCommandReturnObject.h +++ b/lldb/include/lldb/API/SBCommandReturnObject.h @@ -83,13 +83,21 @@ public: bool GetDescription (lldb::SBStream &description); - + + // deprecated, these two functions do not take + // ownership of file handle void SetImmediateOutputFile (FILE *fh); void SetImmediateErrorFile (FILE *fh); + void + SetImmediateOutputFile (FILE *fh, bool transfer_ownership); + + void + SetImmediateErrorFile (FILE *fh, bool transfer_ownership); + void PutCString(const char* string, int len = -1); diff --git a/lldb/scripts/interface/SBCommandReturnObject.i b/lldb/scripts/interface/SBCommandReturnObject.i index 5ade97bebfec..ae32b79b5834 100644 --- a/lldb/scripts/interface/SBCommandReturnObject.i +++ b/lldb/scripts/interface/SBCommandReturnObject.i @@ -84,11 +84,17 @@ public: bool GetDescription (lldb::SBStream &description); - void - SetImmediateOutputFile (FILE *fh); - - void - SetImmediateErrorFile (FILE *fh); + + // wrapping here so that lldb takes ownership of the + // new FILE* created inside of the swig interface + %extend { + void SetImmediateOutputFile(FILE *fh) { + self->SetImmediateOutputFile(fh, true); + } + void SetImmediateErrorFile(FILE *fh) { + self->SetImmediateErrorFile(fh, true); + } + } void PutCString(const char* string, int len); diff --git a/lldb/source/API/SBCommandReturnObject.cpp b/lldb/source/API/SBCommandReturnObject.cpp index a2ed4d6e8c26..a7bc31da8a89 100644 --- a/lldb/source/API/SBCommandReturnObject.cpp +++ b/lldb/source/API/SBCommandReturnObject.cpp @@ -258,15 +258,27 @@ SBCommandReturnObject::GetDescription (SBStream &description) void SBCommandReturnObject::SetImmediateOutputFile(FILE *fh) { - if (m_opaque_ap) - m_opaque_ap->SetImmediateOutputFile(fh); + SetImmediateOutputFile(fh, false); } void SBCommandReturnObject::SetImmediateErrorFile(FILE *fh) +{ + SetImmediateErrorFile(fh, false); +} + +void +SBCommandReturnObject::SetImmediateOutputFile(FILE *fh, bool transfer_ownership) { if (m_opaque_ap) - m_opaque_ap->SetImmediateErrorFile(fh); + m_opaque_ap->SetImmediateOutputFile(fh, transfer_ownership); +} + +void +SBCommandReturnObject::SetImmediateErrorFile(FILE *fh, bool transfer_ownership) +{ + if (m_opaque_ap) + m_opaque_ap->SetImmediateErrorFile(fh, transfer_ownership); } void