From 2908e3eb8093cbd3903316a307745d99c42ff250 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 15 Feb 2011 10:31:54 +0000 Subject: [PATCH] * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Use POSIX path to check for symlink. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler_disk_file.cc | 20 ++++++-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 92f27154a..c34b9ecb3 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2011-02-15 Corinna Vinschen + + * fhandler_disk_file.cc (fhandler_disk_file::readdir_helper): Use POSIX + path to check for symlink. + 2011-02-14 Corinna Vinschen * config/i386/profile.h: Sync with Mingw. diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index cc2c23731..a1ae8c184 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -1829,20 +1829,12 @@ fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err, if (RtlEqualUnicodeString (&uname, &ro_u_lnk, TRUE)) { tmp_pathbuf tp; - UNICODE_STRING fbuf; - - tp.u_get (&fbuf); - RtlCopyUnicodeString (&fbuf, pc.get_nt_native_path ()); - RtlAppendUnicodeToString (&fbuf, L"\\"); - RtlAppendUnicodeStringToString (&fbuf, fname); - fbuf.Buffer += 4; /* Skip leading \??\ */ - fbuf.Length -= 4 * sizeof (WCHAR); - if (fbuf.Buffer[1] != L':') /* UNC path */ - { - *(fbuf.Buffer += 2) = L'\\'; - fbuf.Length -= 2 * sizeof (WCHAR); - } - path_conv fpath (&fbuf, PC_SYM_NOFOLLOW); + char *file = tp.c_get (); + char *p = stpcpy (file, pc.normalized_path); + *p++ = '/'; + sys_wcstombs (p, NT_MAX_PATH - (p - file), + fname->Buffer, fname->Length / sizeof (WCHAR)); + path_conv fpath (file, PC_SYM_NOFOLLOW); if (fpath.issymlink ()) { fname->Length -= 4 * sizeof (WCHAR);