1 //===-- Pipe.cpp ------------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Host/Pipe.h"
19 using namespace lldb_private;
21 int Pipe::kInvalidDescriptor = -1;
23 enum PIPES { READ, WRITE }; // Constants 0 and 1 for READ and WRITE
27 m_fds[READ] = Pipe::kInvalidDescriptor;
28 m_fds[WRITE] = Pipe::kInvalidDescriptor;
43 if (::_pipe(m_fds, 256, O_BINARY) == 0)
46 if (::pipe(m_fds) == 0)
49 m_fds[READ] = Pipe::kInvalidDescriptor;
50 m_fds[WRITE] = Pipe::kInvalidDescriptor;
55 Pipe::GetReadFileDescriptor() const
61 Pipe::GetWriteFileDescriptor() const
67 Pipe::ReleaseReadFileDescriptor()
69 const int fd = m_fds[READ];
70 m_fds[READ] = Pipe::kInvalidDescriptor;
75 Pipe::ReleaseWriteFileDescriptor()
77 const int fd = m_fds[WRITE];
78 m_fds[WRITE] = Pipe::kInvalidDescriptor;
85 CloseReadFileDescriptor();
86 CloseWriteFileDescriptor();
90 Pipe::ReadDescriptorIsValid() const
92 return m_fds[READ] != Pipe::kInvalidDescriptor;
96 Pipe::WriteDescriptorIsValid() const
98 return m_fds[WRITE] != Pipe::kInvalidDescriptor;
102 Pipe::IsValid() const
104 return ReadDescriptorIsValid() && WriteDescriptorIsValid();
108 Pipe::CloseReadFileDescriptor()
110 if (ReadDescriptorIsValid())
114 err = _close(m_fds[READ]);
116 err = close(m_fds[READ]);
118 m_fds[READ] = Pipe::kInvalidDescriptor;
125 Pipe::CloseWriteFileDescriptor()
127 if (WriteDescriptorIsValid())
131 err = _close(m_fds[WRITE]);
133 err = close(m_fds[WRITE]);
135 m_fds[WRITE] = Pipe::kInvalidDescriptor;
143 Pipe::Read (void *buf, size_t num_bytes)
145 if (ReadDescriptorIsValid())
147 const int fd = GetReadFileDescriptor();
149 return _read (fd, (char *)buf, num_bytes);
151 return read (fd, buf, num_bytes);
154 return 0; // Return 0 since errno won't be set if we didn't call read
158 Pipe::Write (const void *buf, size_t num_bytes)
160 if (WriteDescriptorIsValid())
162 const int fd = GetWriteFileDescriptor();
164 return _write (fd, (char *)buf, num_bytes);
166 return write (fd, buf, num_bytes);
169 return 0; // Return 0 since errno won't be set if we didn't call write