changeset 20669:2407ffaefc02 v8.2.0888

patch 8.2.0888: readdirex() returns size -2 for a directory Commit: https://github.com/vim/vim/commit/441d60efd8f0e4a44d0cf4bca11cb72e6c830e47 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 2 22:19:50 2020 +0200 patch 8.2.0888: readdirex() returns size -2 for a directory Problem: Readdirex() returns size -2 for a directory. Solution: Add missing "else". (Ken Takata, closes https://github.com/vim/vim/issues/6185)
author Bram Moolenaar <Bram@vim.org>
date Tue, 02 Jun 2020 22:30:03 +0200
parents ba02770e447a
children acdeafd06233
files src/fileio.c src/testdir/test_functions.vim src/version.c
diffstat 3 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -4575,7 +4575,7 @@ create_readdirex_item(char_u *path, char
 	if (S_ISDIR(st.st_mode))
 	    size = 0;
 	// non-perfect check for overflow
-	if ((off_T)size != (off_T)st.st_size)
+	else if ((off_T)size != (off_T)st.st_size)
 	    size = -2;
 	if (dict_add_number(item, "size", size) == FAIL)
 	    goto theend;
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1864,13 +1864,15 @@ endfunc
 
 func Test_readdirex()
   call mkdir('Xdir')
-  call writefile([], 'Xdir/foo.txt')
-  call writefile([], 'Xdir/bar.txt')
+  call writefile(['foo'], 'Xdir/foo.txt')
+  call writefile(['barbar'], 'Xdir/bar.txt')
   call mkdir('Xdir/dir')
 
   " All results
   let files = readdirex('Xdir')->map({-> v:val.name})
   call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
+  let sizes = readdirex('Xdir')->map({-> v:val.size})
+  call assert_equal([0, 4, 7], sort(sizes))
 
   " Only results containing "f"
   let files = 'Xdir'->readdirex({ e -> stridx(e.name, 'f') != -1 })
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    888,
+/**/
     887,
 /**/
     886,