From 6a93a12a8dd98291225a282b5b8f3c97e68ebe49 Mon Sep 17 00:00:00 2001 From: Lawrence D'Anna Date: Mon, 28 Oct 2019 21:59:04 -0700 Subject: [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 --- .../ScriptInterpreter/Python/PythonDataObjects.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp') diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp index 2b85ebf..df8bac9 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp @@ -1502,12 +1502,19 @@ Expected 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(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(""), 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) -- cgit v1.1