diff options
Diffstat (limited to 'source/ap/vim/patches/7.4.039')
-rw-r--r-- | source/ap/vim/patches/7.4.039 | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/source/ap/vim/patches/7.4.039 b/source/ap/vim/patches/7.4.039 deleted file mode 100644 index 5d653e35..00000000 --- a/source/ap/vim/patches/7.4.039 +++ /dev/null @@ -1,217 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 7.4.039 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 7.4.039 -Problem: MS-Windows: MSCV10 and earlier can't handle symlinks to a - directory properly. -Solution: Add stat_symlink_aware() and wstat_symlink_aware(). (Ken Takata) -Files: src/os_mswin.c, src/os_win32.c, src/os_win32.h - - -*** ../vim-7.4.038/src/os_mswin.c 2013-08-30 16:51:15.000000000 +0200 ---- src/os_mswin.c 2013-09-25 19:09:53.000000000 +0200 -*************** -*** 498,503 **** ---- 498,595 ---- - } - } - -+ 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; -+ BOOL is_symlink = FALSE; -+ -+ hFind = FindFirstFile(name, &findData); -+ if (hFind != INVALID_HANDLE_VALUE) -+ { -+ attr = findData.dwFileAttributes; -+ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT) -+ && (findData.dwReserved0 == IO_REPARSE_TAG_SYMLINK)) -+ is_symlink = TRUE; -+ FindClose(hFind); -+ } -+ if (is_symlink) -+ { -+ h = CreateFile(name, FILE_READ_ATTRIBUTES, -+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, -+ OPEN_EXISTING, -+ (attr & FILE_ATTRIBUTE_DIRECTORY) -+ ? FILE_FLAG_BACKUP_SEMANTICS : 0, -+ NULL); -+ if (h != INVALID_HANDLE_VALUE) -+ { -+ int fd, n; -+ -+ fd = _open_osfhandle((intptr_t)h, _O_RDONLY); -+ n = _fstat(fd, (struct _stat*)stp); -+ _close(fd); -+ return n; -+ } -+ } -+ #endif -+ return stat(name, stp); -+ } -+ -+ #ifdef FEAT_MBYTE -+ 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; -+ DWORD attr = 0; -+ WIN32_FIND_DATAW findDataW; -+ -+ hFind = FindFirstFileW(name, &findDataW); -+ if (hFind != INVALID_HANDLE_VALUE) -+ { -+ attr = findDataW.dwFileAttributes; -+ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT) -+ && (findDataW.dwReserved0 == IO_REPARSE_TAG_SYMLINK)) -+ is_symlink = TRUE; -+ FindClose(hFind); -+ } -+ if (is_symlink) -+ { -+ h = CreateFileW(name, FILE_READ_ATTRIBUTES, -+ FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, -+ OPEN_EXISTING, -+ (attr & FILE_ATTRIBUTE_DIRECTORY) -+ ? FILE_FLAG_BACKUP_SEMANTICS : 0, -+ NULL); -+ if (h != INVALID_HANDLE_VALUE) -+ { -+ int fd; -+ -+ fd = _open_osfhandle((intptr_t)h, _O_RDONLY); -+ n = _fstat(fd, stp); -+ _close(fd); -+ return n; -+ } -+ } -+ # endif -+ return _wstat(name, stp); -+ } -+ #endif - - /* - * stat() can't handle a trailing '/' or '\', remove it first. -*************** -*** 534,540 **** - - if (wp != NULL) - { -! n = _wstat(wp, (struct _stat *)stp); - vim_free(wp); - if (n >= 0) - return n; ---- 626,632 ---- - - if (wp != NULL) - { -! n = wstat_symlink_aware(wp, (struct _stat *)stp); - vim_free(wp); - if (n >= 0) - return n; -*************** -*** 544,550 **** - } - } - #endif -! return stat(buf, stp); - } - - #if defined(FEAT_GUI_MSWIN) || defined(PROTO) ---- 636,642 ---- - } - } - #endif -! return stat_symlink_aware(buf, stp); - } - - #if defined(FEAT_GUI_MSWIN) || defined(PROTO) -*** ../vim-7.4.038/src/os_win32.c 2013-08-30 17:29:10.000000000 +0200 ---- src/os_win32.c 2013-09-25 19:09:53.000000000 +0200 -*************** -*** 78,93 **** - # endif - #endif - -- /* -- * Reparse Point -- */ -- #ifndef FILE_ATTRIBUTE_REPARSE_POINT -- # define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 -- #endif -- #ifndef IO_REPARSE_TAG_SYMLINK -- # define IO_REPARSE_TAG_SYMLINK 0xA000000C -- #endif -- - /* Record all output and all keyboard & mouse input */ - /* #define MCH_WRITE_DUMP */ - ---- 78,83 ---- -*** ../vim-7.4.038/src/os_win32.h 2013-07-21 17:53:13.000000000 +0200 ---- src/os_win32.h 2013-09-25 19:09:53.000000000 +0200 -*************** -*** 130,135 **** ---- 130,148 ---- - # define DFLT_MAXMEMTOT (5*1024) /* use up to 5 Mbyte for Vim */ - #endif - -+ /* -+ * Reparse Point -+ */ -+ #ifndef FILE_ATTRIBUTE_REPARSE_POINT -+ # define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 -+ #endif -+ #ifndef IO_REPARSE_TAG_MOUNT_POINT -+ # define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003 -+ #endif -+ #ifndef IO_REPARSE_TAG_SYMLINK -+ # define IO_REPARSE_TAG_SYMLINK 0xA000000C -+ #endif -+ - #if defined(_MSC_VER) || defined(__BORLANDC__) - /* Support for __try / __except. All versions of MSVC and Borland C are - * expected to have this. Any other compilers that support it? */ -*** ../vim-7.4.038/src/version.c 2013-09-25 18:54:20.000000000 +0200 ---- src/version.c 2013-09-25 19:08:55.000000000 +0200 -*************** -*** 740,741 **** ---- 740,743 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 39, - /**/ - --- - A cow comes flying over the battlements, lowing aggressively. The cow - lands on GALAHAD'S PAGE, squashing him completely. - "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD - - /// Bram Moolenaar -- Bram@Moolenaar.net -- 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 /// |