//===-- PipeWindows.h -------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef liblldb_Host_windows_PipeWindows_h_ #define liblldb_Host_windows_PipeWindows_h_ #include "lldb/Host/PipeBase.h" #include "lldb/Host/windows/windows.h" namespace lldb_private { /// \class Pipe PipeWindows.h "lldb/Host/windows/PipeWindows.h" /// A windows-based implementation of Pipe, a class that abtracts /// unix style pipes. /// /// A class that abstracts the LLDB core from host pipe functionality. class PipeWindows : public PipeBase { public: static const int kInvalidDescriptor = -1; public: PipeWindows(); PipeWindows(lldb::pipe_t read, lldb::pipe_t write); ~PipeWindows() override; // Create an unnamed pipe. Status CreateNew(bool child_process_inherit) override; // Create a named pipe. Status CreateNewNamed(bool child_process_inherit); Status CreateNew(llvm::StringRef name, bool child_process_inherit) override; Status CreateWithUniqueName(llvm::StringRef prefix, bool child_process_inherit, llvm::SmallVectorImpl &name) override; Status OpenAsReader(llvm::StringRef name, bool child_process_inherit) override; Status OpenAsWriterWithTimeout(llvm::StringRef name, bool child_process_inherit, const std::chrono::microseconds &timeout) override; bool CanRead() const override; bool CanWrite() const override; lldb::pipe_t GetReadPipe() const override { return lldb::pipe_t(m_read); } lldb::pipe_t GetWritePipe() const override { return lldb::pipe_t(m_write); } int GetReadFileDescriptor() const override; int GetWriteFileDescriptor() const override; int ReleaseReadFileDescriptor() override; int ReleaseWriteFileDescriptor() override; void CloseReadFileDescriptor() override; void CloseWriteFileDescriptor() override; void Close() override; Status Delete(llvm::StringRef name) override; Status Write(const void *buf, size_t size, size_t &bytes_written) override; Status ReadWithTimeout(void *buf, size_t size, const std::chrono::microseconds &timeout, size_t &bytes_read) override; // PipeWindows specific methods. These allow access to the underlying OS // handle. HANDLE GetReadNativeHandle(); HANDLE GetWriteNativeHandle(); private: Status OpenNamedPipe(llvm::StringRef name, bool child_process_inherit, bool is_read); HANDLE m_read; HANDLE m_write; int m_read_fd; int m_write_fd; OVERLAPPED m_read_overlapped; OVERLAPPED m_write_overlapped; }; } // namespace lldb_private #endif // liblldb_Host_posix_PipePosix_h_