Patch 7.4.1139
Problem: MS-Windows: getftype() returns "file for symlink to directory.
Solution: Make it return "dir". (Ken Takata)
Files: src/os_mswin.c
*** ../vim-7.4.1138/src/os_mswin.c 2015-10-13 19:43:14.140511991 +0200
--- src/os_mswin.c 2016-01-19 18:57:58.317246524 +0100
***************
*** 506,517 ****
static int
stat_symlink_aware(const char *name, struct stat *stp)
{
! #if defined(_MSC_VER) && _MSC_VER < 1700
! /* Work around for VC10 or earlier. stat() can't handle symlinks properly.
* VC9 or earlier: stat() doesn't support a symlink at all. It retrieves
* status of a symlink itself.
* VC10: stat() supports a symlink to a normal file, but it doesn't
support
! * a symlink to a directory (always returns an error). */
WIN32_FIND_DATA findData;
HANDLE hFind, h;
DWORD attr = 0;
--- 506,521 ----
static int
stat_symlink_aware(const char *name, struct stat *stp)
{
! #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__)
! /* Work around for VC12 or earlier (and MinGW). stat() can't handle
! * symlinks properly.
* VC9 or earlier: stat() doesn't support a symlink at all. It retrieves
* status of a symlink itself.
* VC10: stat() supports a symlink to a normal file, but it doesn't
support
! * a symlink to a directory (always returns an error).
! * VC11 and VC12: stat() doesn't return an error for a symlink to a
! * directory, but it doesn't set S_IFDIR flag.
! * MinGW: Same as VC9. */
WIN32_FIND_DATA findData;
HANDLE hFind, h;
DWORD attr = 0;
***************
*** 540,545 ****
--- 544,551 ----
fd = _open_osfhandle((OPEN_OH_ARGTYPE)h, _O_RDONLY);
n = _fstat(fd, (struct _stat*)stp);
+ if ((n == 0) && (attr & FILE_ATTRIBUTE_DIRECTORY))
+ stp->st_mode = (stp->st_mode & ~S_IFREG) | S_IFDIR;
_close(fd);
return n;
}
***************
*** 552,563 ****
static int
wstat_symlink_aware(const WCHAR *name, struct _stat *stp)
{
! # if defined(_MSC_VER) && _MSC_VER < 1700
! /* Work around for VC10 or earlier. _wstat() can't handle symlinks
properly.
* VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves
* status of a symlink itself.
* VC10: _wstat() supports a symlink to a normal file, but it doesn't
! * support a symlink to a directory (always returns an error). */
int n;
BOOL is_symlink = FALSE;
HANDLE hFind, h;
--- 558,573 ----
static int
wstat_symlink_aware(const WCHAR *name, struct _stat *stp)
{
! # if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__)
! /* Work around for VC12 or earlier (and MinGW). _wstat() can't handle
! * symlinks properly.
* VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves
* status of a symlink itself.
* VC10: _wstat() supports a symlink to a normal file, but it doesn't
! * support a symlink to a directory (always returns an error).
! * VC11 and VC12: _wstat() doesn't return an error for a symlink to a
! * directory, but it doesn't set S_IFDIR flag.
! * MinGW: Same as VC9. */
int n;
BOOL is_symlink = FALSE;
HANDLE hFind, h;
***************
*** 587,592 ****
--- 597,604 ----
fd = _open_osfhandle((OPEN_OH_ARGTYPE)h, _O_RDONLY);
n = _fstat(fd, stp);
+ if ((n == 0) && (attr & FILE_ATTRIBUTE_DIRECTORY))
+ stp->st_mode = (stp->st_mode & ~S_IFREG) | S_IFDIR;
_close(fd);
return n;
}
*** ../vim-7.4.1138/src/version.c 2016-01-19 17:47:19.778767151 +0100
--- src/version.c 2016-01-19 18:59:16.128404054 +0100
***************
*** 743,744 ****
--- 743,746 ----
{ /* Add new patch number below this line */
+ /**/
+ 1139,
/**/
--
hundred-and-one symptoms of being an internet addict:
7. You finally do take that vacation, but only after buying a cellular modem
and a laptop.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.