aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os/fileio_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/os/fileio_defs.h')
-rw-r--r--src/nvim/os/fileio_defs.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/nvim/os/fileio_defs.h b/src/nvim/os/fileio_defs.h
new file mode 100644
index 0000000000..3dc8c7b22a
--- /dev/null
+++ b/src/nvim/os/fileio_defs.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#include <stdbool.h>
+
+#include "nvim/func_attr.h"
+#include "nvim/rbuffer_defs.h"
+
+/// Structure used to read from/write to file
+typedef struct {
+ int fd; ///< File descriptor.
+ int _error; ///< Error code for use with RBuffer callbacks or zero.
+ RBuffer *rv; ///< Read or write buffer.
+ bool wr; ///< True if file is in write mode.
+ bool eof; ///< True if end of file was encountered.
+ bool non_blocking; ///< True if EAGAIN should not restart syscalls.
+} FileDescriptor;
+
+static inline bool file_eof(const FileDescriptor *fp)
+ REAL_FATTR_ALWAYS_INLINE REAL_FATTR_WARN_UNUSED_RESULT REAL_FATTR_NONNULL_ALL;
+
+/// Check whether end of file was encountered
+///
+/// @param[in] fp File to check.
+///
+/// @return true if it was, false if it was not or read operation was never
+/// performed.
+static inline bool file_eof(const FileDescriptor *const fp)
+{
+ return fp->eof && rbuffer_size(fp->rv) == 0;
+}
+
+static inline int file_fd(const FileDescriptor *fp)
+ REAL_FATTR_ALWAYS_INLINE REAL_FATTR_WARN_UNUSED_RESULT REAL_FATTR_NONNULL_ALL;
+
+/// Return the file descriptor associated with the FileDescriptor structure
+///
+/// @param[in] fp File to check.
+///
+/// @return File descriptor.
+static inline int file_fd(const FileDescriptor *const fp)
+{
+ return fp->fd;
+}