forked from aniani/vim
patch 8.2.1793: not consistently giving the "is a directory" warning
Problem: Not consistently giving the "is a directory" warning. Solution: Adjust check for illegal file name and directory. (Yasuhiro Matsumoto, closes #7067)
This commit is contained in:
parent
588d241d44
commit
c8fe645c19
28
src/fileio.c
28
src/fileio.c
@ -211,6 +211,7 @@ readfile(
|
|||||||
char_u *old_b_fname;
|
char_u *old_b_fname;
|
||||||
int using_b_ffname;
|
int using_b_ffname;
|
||||||
int using_b_fname;
|
int using_b_fname;
|
||||||
|
static char *msg_is_a_directory = N_("is a directory");
|
||||||
|
|
||||||
au_did_filetype = FALSE; // reset before triggering any autocommands
|
au_did_filetype = FALSE; // reset before triggering any autocommands
|
||||||
|
|
||||||
@ -310,22 +311,29 @@ readfile(
|
|||||||
else
|
else
|
||||||
msg_scroll = TRUE; // don't overwrite previous file message
|
msg_scroll = TRUE; // don't overwrite previous file message
|
||||||
|
|
||||||
/*
|
|
||||||
* If the name ends in a path separator, we can't open it. Check here,
|
|
||||||
* because reading the file may actually work, but then creating the swap
|
|
||||||
* file may destroy it! Reported on MS-DOS and Win 95.
|
|
||||||
* If the name is too long we might crash further on, quit here.
|
|
||||||
*/
|
|
||||||
if (fname != NULL && *fname != NUL)
|
if (fname != NULL && *fname != NUL)
|
||||||
{
|
{
|
||||||
p = fname + STRLEN(fname);
|
size_t namelen = STRLEN(fname);
|
||||||
if (after_pathsep(fname, p) || STRLEN(fname) >= MAXPATHL)
|
|
||||||
|
// If the name is too long we might crash further on, quit here.
|
||||||
|
if (namelen >= MAXPATHL)
|
||||||
{
|
{
|
||||||
filemess(curbuf, fname, (char_u *)_("Illegal file name"), 0);
|
filemess(curbuf, fname, (char_u *)_("Illegal file name"), 0);
|
||||||
msg_end();
|
msg_end();
|
||||||
msg_scroll = msg_save;
|
msg_scroll = msg_save;
|
||||||
return FAIL;
|
return FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the name ends in a path separator, we can't open it. Check here,
|
||||||
|
// because reading the file may actually work, but then creating the
|
||||||
|
// swap file may destroy it! Reported on MS-DOS and Win 95.
|
||||||
|
if (after_pathsep(fname, fname + namelen))
|
||||||
|
{
|
||||||
|
filemess(curbuf, fname, (char_u *)_(msg_is_a_directory), 0);
|
||||||
|
msg_end();
|
||||||
|
msg_scroll = msg_save;
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!read_stdin && !read_buffer && !read_fifo)
|
if (!read_stdin && !read_buffer && !read_fifo)
|
||||||
@ -349,7 +357,7 @@ readfile(
|
|||||||
|
|
||||||
if (S_ISDIR(perm))
|
if (S_ISDIR(perm))
|
||||||
{
|
{
|
||||||
filemess(curbuf, fname, (char_u *)_("is a directory"), 0);
|
filemess(curbuf, fname, (char_u *)_(msg_is_a_directory), 0);
|
||||||
retval = NOTDONE;
|
retval = NOTDONE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -475,7 +483,7 @@ readfile(
|
|||||||
perm = mch_getperm(fname); // check if the file exists
|
perm = mch_getperm(fname); // check if the file exists
|
||||||
if (isdir_f)
|
if (isdir_f)
|
||||||
{
|
{
|
||||||
filemess(curbuf, sfname, (char_u *)_("is a directory"), 0);
|
filemess(curbuf, sfname, (char_u *)_(msg_is_a_directory), 0);
|
||||||
curbuf->b_p_ro = TRUE; // must use "w!" now
|
curbuf->b_p_ro = TRUE; // must use "w!" now
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1587,6 +1587,31 @@ func Test_edit_illegal_filename()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for editing a directory
|
||||||
|
func Test_edit_is_a_directory()
|
||||||
|
CheckEnglish
|
||||||
|
let dirname = getcwd() . "/Xdir"
|
||||||
|
call mkdir(dirname, 'p')
|
||||||
|
|
||||||
|
new
|
||||||
|
redir => msg
|
||||||
|
exe 'edit' dirname
|
||||||
|
redir END
|
||||||
|
call assert_match("is a directory$", split(msg, "\n")[0])
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
let dirname .= '/'
|
||||||
|
|
||||||
|
new
|
||||||
|
redir => msg
|
||||||
|
exe 'edit' dirname
|
||||||
|
redir END
|
||||||
|
call assert_match("is a directory$", split(msg, "\n")[0])
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call delete(dirname, 'rf')
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for editing a file using invalid file encoding
|
" Test for editing a file using invalid file encoding
|
||||||
func Test_edit_invalid_encoding()
|
func Test_edit_invalid_encoding()
|
||||||
CheckEnglish
|
CheckEnglish
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1793,
|
||||||
/**/
|
/**/
|
||||||
1792,
|
1792,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user