aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/eval.txt4
-rw-r--r--src/nvim/memline.c9
-rw-r--r--src/nvim/testdir/test_swap.vim3
3 files changed, 10 insertions, 6 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 0472a67d18..3553174d9f 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -7770,10 +7770,12 @@ swapinfo({fname}) swapinfo()
file
mtime last modification time in seconds
inode Optional: INODE number of the file
+ dirty 1 if file was modified, 0 if not
In case of failure an "error" item is added with the reason:
Cannot open file: file not found or in accessible
Cannot read file: cannot read first block
- magic number mismatch: info in first block is invalid
+ Not a swap file: does not contain correct block ID
+ Magic number mismatch: Info in first block is invalid
synID({lnum}, {col}, {trans}) *synID()*
The result is a Number, which is the syntax ID at the position
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index 3e18c8559a..cbe4ce625a 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -1466,8 +1466,10 @@ void get_b0_dict(const char *fname, dict_T *d)
if ((fd = os_open(fname, O_RDONLY, 0)) >= 0) {
if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0)) {
- if (b0_magic_wrong(&b0)) {
- tv_dict_add_str(d, S_LEN("error"), xstrdup("magic number mismatch"));
+ if (ml_check_b0_id(&b0) == FAIL) {
+ tv_dict_add_str(d, S_LEN("error"), xstrdup("Not a swap file"));
+ } else if (b0_magic_wrong(&b0)) {
+ tv_dict_add_str(d, S_LEN("error"), xstrdup("Magic number mismatch"));
} else {
// We have swap information.
tv_dict_add_str(d, S_LEN("version"), xstrdup((char *)b0.b0_version));
@@ -1477,9 +1479,8 @@ void get_b0_dict(const char *fname, dict_T *d)
tv_dict_add_nr(d, S_LEN("pid"), char_to_long(b0.b0_pid));
tv_dict_add_nr(d, S_LEN("mtime"), char_to_long(b0.b0_mtime));
-#ifdef CHECK_INODE
+ tv_dict_add_nr(d, S_LEN("dirty"), b0.b0_dirty ? 1 : 0);
tv_dict_add_nr(d, S_LEN("inode"), char_to_long(b0.b0_ino));
-#endif
}
} else {
tv_dict_add_str(d, S_LEN("error"), xstrdup("Cannot read file"));
diff --git a/src/nvim/testdir/test_swap.vim b/src/nvim/testdir/test_swap.vim
index 28f995f6fb..241754aae0 100644
--- a/src/nvim/testdir/test_swap.vim
+++ b/src/nvim/testdir/test_swap.vim
@@ -73,6 +73,7 @@ func Test_swapinfo()
call assert_match('\w', info.user)
call assert_equal(hostname(), info.host)
call assert_match('Xswapinfo', info.fname)
+ call assert_match(0, info.dirty)
call assert_equal(getpid(), info.pid)
call assert_match('^\d*$', info.mtime)
if has_key(info, 'inode')
@@ -92,6 +93,6 @@ func Test_swapinfo()
call writefile([repeat('x', 10000)], 'Xnotaswapfile')
let info = swapinfo('Xnotaswapfile')
- call assert_equal('magic number mismatch', info.error)
+ call assert_equal('Not a swap file', info.error)
call delete('Xnotaswapfile')
endfunc