aboutsummaryrefslogtreecommitdiff
path: root/include/cru/common/platform/unix
diff options
context:
space:
mode:
Diffstat (limited to 'include/cru/common/platform/unix')
-rw-r--r--include/cru/common/platform/unix/PosixSpawnSubProcess.h50
-rw-r--r--include/cru/common/platform/unix/UnixFileStream.h39
-rw-r--r--include/cru/common/platform/unix/UnixPipe.h70
3 files changed, 0 insertions, 159 deletions
diff --git a/include/cru/common/platform/unix/PosixSpawnSubProcess.h b/include/cru/common/platform/unix/PosixSpawnSubProcess.h
deleted file mode 100644
index ee4e912a..00000000
--- a/include/cru/common/platform/unix/PosixSpawnSubProcess.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#pragma once
-
-#include "../../PreConfig.h"
-
-#ifndef CRU_PLATFORM_UNIX
-#error "This file can only be included on unix."
-#endif
-
-#include "../../Base.h"
-#include "../../SubProcess.h"
-#include "../../io/AutoReadStream.h"
-
-#include "UnixFileStream.h"
-#include "UnixPipe.h"
-
-#include <spawn.h>
-
-namespace cru::platform::unix {
-class PosixSpawnSubProcessImpl : public Object,
- public virtual IPlatformSubProcessImpl {
- CRU_DEFINE_CLASS_LOG_TAG(u"PosixSpawnSubProcess")
-
- public:
- explicit PosixSpawnSubProcessImpl();
- ~PosixSpawnSubProcessImpl();
-
- void PlatformCreateProcess(const SubProcessStartInfo& start_info) override;
- SubProcessExitResult PlatformWaitForProcess() override;
- void PlatformKillProcess() override;
-
- io::Stream* GetStdinStream() override;
- io::Stream* GetStdoutStream() override;
- io::Stream* GetStderrStream() override;
-
- private:
- pid_t pid_;
- int exit_code_;
-
- UnixPipe stdin_pipe_;
- UnixPipe stdout_pipe_;
- UnixPipe stderr_pipe_;
-
- std::unique_ptr<UnixFileStream> stdin_stream_;
- std::unique_ptr<UnixFileStream> stdout_stream_;
- std::unique_ptr<UnixFileStream> stderr_stream_;
-
- std::unique_ptr<io::AutoReadStream> stdout_buffer_stream_;
- std::unique_ptr<io::AutoReadStream> stderr_buffer_stream_;
-};
-} // namespace cru::platform::unix
diff --git a/include/cru/common/platform/unix/UnixFileStream.h b/include/cru/common/platform/unix/UnixFileStream.h
deleted file mode 100644
index 8021f21a..00000000
--- a/include/cru/common/platform/unix/UnixFileStream.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#pragma once
-
-#include "../../PreConfig.h"
-
-#ifndef CRU_PLATFORM_UNIX
-#error "This file can only be included on unix."
-#endif
-
-#include "../../io/Stream.h"
-
-namespace cru::platform::unix {
-class UnixFileStream : public io::Stream {
- private:
- static constexpr auto kLogTag = u"cru::platform::unix::UnixFileStream";
-
- public:
- UnixFileStream(const char* path, int oflag, mode_t mode = 0660);
- UnixFileStream(int fd, bool can_seek, bool can_read, bool can_write,
- bool auto_close);
- ~UnixFileStream() override;
-
- public:
- CRU_STREAM_IMPLEMENT_CLOSE_BY_DO_CLOSE
-
- int GetFileDescriptor() const { return file_descriptor_; }
-
- protected:
- Index DoSeek(Index offset, SeekOrigin origin = SeekOrigin::Current) override;
- Index DoRead(std::byte* buffer, Index offset, Index size) override;
- Index DoWrite(const std::byte* buffer, Index offset, Index size) override;
-
- private:
- void DoClose();
-
- private:
- int file_descriptor_; // -1 for no file descriptor
- bool auto_close_;
-};
-} // namespace cru::platform::unix
diff --git a/include/cru/common/platform/unix/UnixPipe.h b/include/cru/common/platform/unix/UnixPipe.h
deleted file mode 100644
index cf35fb11..00000000
--- a/include/cru/common/platform/unix/UnixPipe.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#pragma once
-
-#include "../../PreConfig.h"
-
-#ifndef CRU_PLATFORM_UNIX
-#error "This file can only be included on unix."
-#endif
-
-#include "../../Base.h"
-#include "../../Bitmask.h"
-
-namespace cru::platform::unix {
-namespace details {
-struct UnixPipeFlagTag;
-}
-using UnixPipeFlag = Bitmask<details::UnixPipeFlagTag>;
-struct UnixPipeFlags {
- constexpr static auto NonBlock = UnixPipeFlag::FromOffset(1);
-};
-
-/**
- * @brief an unix pipe, commonly for communication of parent process and child
- * process.
- *
- * There are two types of pipes sorted by its usage. For stdin, parent process
- * SEND data to child process. For stdout and stderr, parent process RECEIVE
- * data from child process. Each pipe has two ends, one for read and the other
- * for write. But for send and receive, they are reversed. It is a little
- * confused to consider which end should be used by parent and which end should
- * be used by child. So this class help you make it clear. You specify SEND or
- * RECEIVE, and this class give you a parent used end and a child used end.
- *
- * This class will only close the end used by parent when it is destructed. It
- * is the user's duty to close the one used by child.
- */
-class UnixPipe : public Object {
- private:
- constexpr static auto kLogTag = u"cru::platform::unix::UnixPipe";
-
- public:
- enum class Usage {
- Send,
- Receive,
- };
-
- explicit UnixPipe(Usage usage, bool auto_close, UnixPipeFlag flags = {});
-
- CRU_DELETE_COPY(UnixPipe)
- CRU_DELETE_MOVE(UnixPipe)
-
- ~UnixPipe();
-
- /**
- * @brief aka, the one used by parent process.
- */
- int GetSelfFileDescriptor();
-
- /**
- * @brief aka, the one used by child process.
- */
- int GetOtherFileDescriptor();
-
- private:
- Usage usage_;
- bool auto_close_;
- UnixPipeFlag flags_;
- int read_fd_;
- int write_fd_;
-};
-} // namespace cru::platform::unix