3#include "di/container/path/path.h"
4#include "di/function/container/function.h"
5#include "di/util/prelude.h"
6#include "di/util/scope_exit.h"
7#include "dius/c_definitions.h"
14enum class Protection :
int {
16 Executable = PROT_EXEC,
18 Writeable = PROT_WRITE,
21DI_DEFINE_ENUM_BITWISE_OPERATIONS(Protection)
23enum class MapFlags :
int {
26 Private = MAP_PRIVATE,
28 Anonymous = MAP_ANONYMOUS,
33 Populate = MAP_POPULATE,
37DI_DEFINE_ENUM_BITWISE_OPERATIONS(MapFlags)
46 constexpr explicit SyncFile(
Owned owned,
int fd) : m_owned(owned), m_fd(fd) {}
49 : m_owned(
di::exchange(other.m_owned,
Owned::
No)), m_fd(
di::exchange(other.m_fd, -1)) {}
60 m_owned = di::exchange(other.m_owned,
Owned::No);
61 m_fd = di::exchange(other.m_fd, -1);
65 constexpr auto valid() const ->
bool {
return m_fd != -1; }
66 constexpr explicit operator bool()
const {
return valid(); }
74 auto close() -> di::Expected<void, di::GenericCode>;
76 auto read_some(u64 offset, di::Span<di::Byte>)
const -> di::Expected<size_t, di::GenericCode>;
77 auto read_some(di::Span<di::Byte>)
const -> di::Expected<size_t, di::GenericCode>;
78 auto write_some(u64 offset, di::Span<di::Byte const>)
const -> di::Expected<size_t, di::GenericCode>;
79 auto write_some(di::Span<di::Byte const>)
const -> di::Expected<size_t, di::GenericCode>;
81 auto read_exactly(u64 offset, di::Span<di::Byte>)
const -> di::Expected<void, di::GenericCode>;
82 auto read_exactly(di::Span<di::Byte>)
const -> di::Expected<void, di::GenericCode>;
83 auto write_exactly(u64 offset, di::Span<di::Byte const>)
const -> di::Expected<void, di::GenericCode>;
84 auto write_exactly(di::Span<di::Byte const>)
const -> di::Expected<void, di::GenericCode>;
86 auto resize_file(u64 new_size)
const -> di::Expected<void, di::GenericCode>;
89 auto map(u64 offset,
size_t size, Protection protection, MapFlags flags)
const
90 -> di::Expected<MemoryRegion, di::GenericCode>;
93 auto flush() const ->
di::Expected<
void,
di::GenericCode> {
return {}; }
117DI_DEFINE_ENUM_BITWISE_OPERATIONS(
OpenFlags)
Definition sync_file.h:40
constexpr ~SyncFile()
Definition sync_file.h:51
constexpr auto valid() const -> bool
Definition sync_file.h:65
auto read_exactly(di::Span< di::Byte >) const -> di::Expected< void, di::GenericCode >
auto write_some(di::Span< di::Byte const >) const -> di::Expected< size_t, di::GenericCode >
auto write_exactly(di::Span< di::Byte const >) const -> di::Expected< void, di::GenericCode >
constexpr SyncFile()=default
auto read_exactly(u64 offset, di::Span< di::Byte >) const -> di::Expected< void, di::GenericCode >
constexpr SyncFile(Owned owned, int fd)
Definition sync_file.h:46
auto get_tty_window_size() -> di::Expected< tty::WindowSize, di::GenericCode >
auto resize_file(u64 new_size) const -> di::Expected< void, di::GenericCode >
auto enter_raw_mode() -> di::Expected< RawModeToken, di::GenericCode >
auto operator=(SyncFile &&other) -> SyncFile &
Definition sync_file.h:58
auto read_some(u64 offset, di::Span< di::Byte >) const -> di::Expected< size_t, di::GenericCode >
constexpr SyncFile(SyncFile &&other)
Definition sync_file.h:48
constexpr auto file_descriptor() const -> int
Definition sync_file.h:68
auto flush() const -> di::Expected< void, di::GenericCode >
Definition sync_file.h:93
constexpr auto leak_file_descriptor() -> int
Definition sync_file.h:69
auto close() -> di::Expected< void, di::GenericCode >
auto set_tty_window_size(tty::WindowSize size) -> di::Expected< void, di::GenericCode >
Owned
Definition sync_file.h:42
@ Yes
Definition sync_file.h:42
@ No
Definition sync_file.h:42
auto read_some(di::Span< di::Byte >) const -> di::Expected< size_t, di::GenericCode >
auto interactive_device() const -> bool
Definition sync_file.h:95
auto write_exactly(u64 offset, di::Span< di::Byte const >) const -> di::Expected< void, di::GenericCode >
di::ScopeExit< di::Function< void()> > RawModeToken
Definition sync_file.h:101
auto get_psuedo_terminal_path() -> di::Expected< di::Path, di::GenericCode >
auto write_some(u64 offset, di::Span< di::Byte const >) const -> di::Expected< size_t, di::GenericCode >
Definition directory_entry.h:11
auto open_sync(di::PathView path, OpenMode open_mode, u16 create_mode=0666, OpenFlags flags=OpenFlags::None) -> di::Expected< SyncFile, di::GenericCode >
auto stderr
Definition sync_file.h:127
auto open_psuedo_terminal_controller(OpenMode open_mode) -> di::Expected< SyncFile, di::GenericCode >
OpenFlags
Definition sync_file.h:111
@ KeepAfterExec
Definition sync_file.h:114
@ None
Definition sync_file.h:112
@ NoControllingTerminal
Definition sync_file.h:113
auto read_to_string(di::PathView path) -> di::Result< di::String >
auto open_tempory_file() -> di::Expected< SyncFile, di::GenericCode >
auto stdout
Definition sync_file.h:126
OpenMode
Definition sync_file.h:109
@ Readonly
Definition sync_file.h:109
@ WriteNew
Definition sync_file.h:109
@ AppendOnly
Definition sync_file.h:109
@ AppendReadWrite
Definition sync_file.h:109
@ ReadWrite
Definition sync_file.h:109
@ WriteClobber
Definition sync_file.h:109
@ ReadWriteClobber
Definition sync_file.h:109
auto stdin
Definition sync_file.h:125