[LLDB][Python] fix another fflush issue on NetBSD

Summary:
Here's another instance where we were calling fflush on an input
stream, which is illegal on NetBSD.

Reviewers: labath, mgorny

Reviewed By: mgorny

Subscribers: krytarowski, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D69488
This commit is contained in:
Lawrence D'Anna
2019-10-28 21:59:04 -07:00
parent 5503455ccb
commit 6a93a12a8d
4 changed files with 26 additions and 16 deletions

View File

@@ -1502,12 +1502,19 @@ Expected<PythonFile> PythonFile::FromFile(File &file, const char *mode) {
file_obj = PyFile_FromFd(file.GetDescriptor(), nullptr, mode, -1, nullptr,
"ignore", nullptr, 0);
#else
// Read through the Python source, doesn't seem to modify these strings
char *cmode = const_cast<char *>(mode);
// We pass ::flush instead of ::fclose here so we borrow the FILE* --
// the lldb_private::File still owns it.
file_obj =
PyFile_FromFile(file.GetStream(), const_cast<char *>(""), cmode, ::fflush);
// the lldb_private::File still owns it. NetBSD does not allow
// input files to be flushed, so we have to check for that case too.
int (*closer)(FILE *);
auto opts = file.GetOptions();
if (!opts)
return opts.takeError();
if (opts.get() & File::eOpenOptionWrite)
closer = ::fflush;
else
closer = [](FILE *) { return 0; };
file_obj = PyFile_FromFile(file.GetStream(), py2_const_cast(""),
py2_const_cast(mode), closer);
#endif
if (!file_obj)