diff options
author | Stefan Hoffmann <stefan991@gmail.com> | 2014-08-09 14:59:52 +0200 |
---|---|---|
committer | Stefan Hoffmann <stefan991@gmail.com> | 2014-08-31 15:33:23 +0200 |
commit | 9ee1c3604c0cc8a3ec1bac32fb33e9c0d0887155 (patch) | |
tree | 3abe9a5632adaceb7890bf76e260e671b2d46b2f | |
parent | e85fe0957d40080f43cbfcbe9eb8864475325b09 (diff) | |
download | rneovim-9ee1c3604c0cc8a3ec1bac32fb33e9c0d0887155.tar.gz rneovim-9ee1c3604c0cc8a3ec1bac32fb33e9c0d0887155.tar.bz2 rneovim-9ee1c3604c0cc8a3ec1bac32fb33e9c0d0887155.zip |
fileinfo: implement os_fileinfo_blocksize
-rw-r--r-- | src/nvim/memfile.c | 9 | ||||
-rw-r--r-- | src/nvim/os/fs.c | 9 | ||||
-rw-r--r-- | test/unit/os/fs_spec.lua | 21 |
3 files changed, 35 insertions, 4 deletions
diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c index 82369b739a..be8148c28d 100644 --- a/src/nvim/memfile.c +++ b/src/nvim/memfile.c @@ -123,10 +123,11 @@ memfile_T *mf_open(char_u *fname, int flags) */ FileInfo file_info; if (mfp->mf_fd >= 0 - && os_get_file_info_fd(mfp->mf_fd, &file_info) - && file_info.stat.st_blksize >= MIN_SWAP_PAGE_SIZE - && file_info.stat.st_blksize <= MAX_SWAP_PAGE_SIZE) { - mfp->mf_page_size = file_info.stat.st_blksize; + && os_get_file_info_fd(mfp->mf_fd, &file_info)) { + uint64_t blocksize = os_fileinfo_blocksize(&file_info); + if (blocksize >= MIN_SWAP_PAGE_SIZE && blocksize <= MAX_SWAP_PAGE_SIZE) { + mfp->mf_page_size = blocksize; + } } if (mfp->mf_fd < 0 || (flags & (O_TRUNC|O_EXCL)) diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index 70a53edb1c..71e8a55c0e 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -412,6 +412,15 @@ uint64_t os_fileinfo_hardlinks(const FileInfo *file_info) return file_info->stat.st_nlink; } +/// Get the blocksize from a `FileInfo`. +/// +/// @return blocksize in bytes. +uint64_t os_fileinfo_blocksize(const FileInfo *file_info) + FUNC_ATTR_NONNULL_ALL +{ + return file_info->stat.st_blksize; +} + /// Get the `FileID` for a given path /// /// @param path Path to the file. diff --git a/test/unit/os/fs_spec.lua b/test/unit/os/fs_spec.lua index 9f6d110e8f..696e6f15cc 100644 --- a/test/unit/os/fs_spec.lua +++ b/test/unit/os/fs_spec.lua @@ -625,6 +625,27 @@ describe('fs function', function() end) end) + describe('os_fileinfo_blocksize', function() + it('returns the correct blocksize of a file', function() + local path = 'unit-test-directory/test.file' + -- there is a bug in luafilesystem where + -- `lfs.attributes path, 'blksize'` returns the worng value: + -- https://github.com/keplerproject/luafilesystem/pull/44 + -- using this workaround for now: + local blksize = lfs.attributes(path).blksize + local file_info = file_info_new() + assert.is_true(fs.os_get_file_info(path, file_info)) + if blksize then + eq(blksize, fs.os_fileinfo_blocksize(file_info)) + else + -- luafs dosn't support blksize on windows + -- libuv on windows returns a constant value as blocksize + -- checking for this constant value should be enough + eq(2048, fs.os_fileinfo_blocksize(file_info)) + end + end) + end) + describe('os_get_file_id', function() it('returns false if given an non-existing file', function() local file_id = file_id_new() |