aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/os
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-05-29 13:23:14 +0200
committerGitHub <noreply@github.com>2024-05-29 13:23:14 +0200
commitf55767afe28a7d90421b97af88e18e2828ed9c01 (patch)
treed8d3c57a763d24154b3b564f167c22d32d585742 /src/nvim/os
parentefa45832ea02e777ce3f5556ef3cd959c164ec24 (diff)
parentb386334cdbbc3e9d79773243fdbd53091488e14d (diff)
downloadrneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.tar.gz
rneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.tar.bz2
rneovim-f55767afe28a7d90421b97af88e18e2828ed9c01.zip
Merge pull request #29016 from bfredl/shadareader
refactor(shada): remove ShaDaReadDef secondary wrapper
Diffstat (limited to 'src/nvim/os')
-rw-r--r--src/nvim/os/fileio.c20
-rw-r--r--src/nvim/os/fileio_defs.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/nvim/os/fileio.c b/src/nvim/os/fileio.c
index fbb2be5104..e58eb96c2e 100644
--- a/src/nvim/os/fileio.c
+++ b/src/nvim/os/fileio.c
@@ -126,6 +126,7 @@ int file_open_fd(FileDescriptor *const ret_fp, const int fd, const int flags)
ret_fp->rv->data = ret_fp;
ret_fp->rv->full_cb = (rbuffer_callback)&file_rb_write_full_cb;
}
+ ret_fp->bytes_read = 0;
return 0;
}
@@ -140,6 +141,18 @@ int file_open_stdin(FileDescriptor *fp)
return error;
}
+/// opens buffer for reading
+void file_open_buffer(FileDescriptor *ret_fp, char *data, size_t len)
+{
+ ret_fp->wr = false;
+ ret_fp->non_blocking = false;
+ ret_fp->fd = -1;
+ ret_fp->eof = true;
+ ret_fp->rv = rbuffer_new_wrap_buf(data, len);
+ ret_fp->_error = 0;
+ ret_fp->bytes_read = 0;
+}
+
/// Close file and free its buffer
///
/// @param[in,out] fp File to close.
@@ -149,6 +162,11 @@ int file_open_stdin(FileDescriptor *fp)
int file_close(FileDescriptor *const fp, const bool do_fsync)
FUNC_ATTR_NONNULL_ALL
{
+ if (fp->fd < 0) {
+ rbuffer_free(fp->rv);
+ return 0;
+ }
+
const int flush_error = (do_fsync ? file_fsync(fp) : file_flush(fp));
const int close_error = os_close(fp->fd);
rbuffer_free(fp->rv);
@@ -294,6 +312,7 @@ ptrdiff_t file_read(FileDescriptor *const fp, char *const ret_buf, const size_t
fp->non_blocking);
if (r_ret >= 0) {
read_remaining -= (size_t)r_ret;
+ fp->bytes_read += (size - read_remaining);
return (ptrdiff_t)(size - read_remaining);
} else if (r_ret < 0) {
return r_ret;
@@ -314,6 +333,7 @@ ptrdiff_t file_read(FileDescriptor *const fp, char *const ret_buf, const size_t
called_read = true;
}
}
+ fp->bytes_read += (size - read_remaining);
return (ptrdiff_t)(size - read_remaining);
}
diff --git a/src/nvim/os/fileio_defs.h b/src/nvim/os/fileio_defs.h
index 3dc8c7b22a..10277d2a7a 100644
--- a/src/nvim/os/fileio_defs.h
+++ b/src/nvim/os/fileio_defs.h
@@ -1,6 +1,7 @@
#pragma once
#include <stdbool.h>
+#include <stdint.h>
#include "nvim/func_attr.h"
#include "nvim/rbuffer_defs.h"
@@ -13,6 +14,7 @@ typedef struct {
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.
+ uint64_t bytes_read; ///< total bytes read so far
} FileDescriptor;
static inline bool file_eof(const FileDescriptor *fp)