diff options
author | ZyX <kp-pav@yandex.ru> | 2017-07-04 17:03:07 +0300 |
---|---|---|
committer | ZyX <kp-pav@yandex.ru> | 2017-07-04 18:37:01 +0300 |
commit | 5ab9e9f617934fae8f85ceb6db398dbf1e93471d (patch) | |
tree | 98a9aa561834cf61459cec70c5e6e75b36d11ade | |
parent | 94bd0f9915b0515fde449e3ee003ecbff3ad1b42 (diff) | |
download | rneovim-5ab9e9f617934fae8f85ceb6db398dbf1e93471d.tar.gz rneovim-5ab9e9f617934fae8f85ceb6db398dbf1e93471d.tar.bz2 rneovim-5ab9e9f617934fae8f85ceb6db398dbf1e93471d.zip |
os/fileio: Add msgpack_file_write function
-rw-r--r-- | src/nvim/os/fileio.c | 21 | ||||
-rw-r--r-- | test/unit/os/fileio_spec.lua | 16 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/nvim/os/fileio.c b/src/nvim/os/fileio.c index 4309ac723c..d16746b7bf 100644 --- a/src/nvim/os/fileio.c +++ b/src/nvim/os/fileio.c @@ -26,6 +26,7 @@ #include "nvim/globals.h" #include "nvim/rbuffer.h" #include "nvim/macros.h" +#include "nvim/message.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "os/fileio.c.generated.h" @@ -345,3 +346,23 @@ ptrdiff_t file_skip(FileDescriptor *const fp, const size_t size) return (ptrdiff_t)read_bytes; } + +/// Msgpack callback for writing to a file +/// +/// @param data File to write to. +/// @param[in] buf Data to write. +/// @param[in] len Length of the data to write. +/// +/// @return 0 in case of success, -1 in case of error. +int msgpack_file_write(void *data, const char *buf, size_t len) + FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT +{ + assert(len < PTRDIFF_MAX); + const ptrdiff_t written_bytes = file_write((FileDescriptor *)data, buf, len); + if (written_bytes < 0) { + emsgf(_("E5420: Failed to write to file: %s"), + os_strerror((int)written_bytes)); + return -1; + } + return 0; +} diff --git a/test/unit/os/fileio_spec.lua b/test/unit/os/fileio_spec.lua index e3c8e616ce..a33a9637ee 100644 --- a/test/unit/os/fileio_spec.lua +++ b/test/unit/os/fileio_spec.lua @@ -62,6 +62,10 @@ local function file_write(fp, buf) return m.file_write(fp, buf, #buf) end +local function msgpack_file_write(fp, buf) + return m.msgpack_file_write(fp, buf, #buf) +end + local function file_read(fp, size) local buf = nil if size == nil then @@ -393,6 +397,18 @@ describe('file_write', function() end) end) +describe('msgpack_file_write', function() + itp('can write the whole file at once', function() + local err, fp = file_open(filec, m.kFileCreateOnly, 384) + eq(0, err) + eq(true, fp.wr) + local wr = msgpack_file_write(fp, fcontents) + eq(0, wr) + eq(0, m.file_close(fp, false)) + eq(fcontents, io.open(filec):read('*a')) + end) +end) + describe('file_skip', function() itp('can skip 3 bytes', function() local err, fp = file_open(file1, 0, 384) |