This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin] cygwin: readdir: Activate check for remote reparse points


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=185cd97d24150db8964754ae0cbb69102dd6cfdb

commit 185cd97d24150db8964754ae0cbb69102dd6cfdb
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Tue Jun 20 10:06:17 2017 +0200

    cygwin: readdir: Activate check for remote reparse points
    
    Fix and move comment accordingly.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/fhandler_disk_file.cc | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index f8adcaa..ca1da38 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -189,6 +189,10 @@ readdir_check_reparse_point (POBJECT_ATTRIBUTES attr, bool remote)
 		      &io, FSCTL_GET_REPARSE_POINT, NULL, 0,
 		      (LPVOID) rp, MAXIMUM_REPARSE_DATA_BUFFER_SIZE)))
 	{
+	  /* If reparse point is stored on a remote volume, lstat returns
+	     them as normal files or dirs, not as symlink.  For a description,
+	     see the comment preceeding remote check in
+	     symlink_info::check_reparse_point. */
 	  if (!remote && rp->ReparseTag == IO_REPARSE_TAG_MOUNT_POINT)
 	    {
 	      RtlInitCountedUnicodeString (&subst,
@@ -2028,10 +2032,7 @@ fhandler_disk_file::readdir_helper (DIR *dir, dirent *de, DWORD w32_err,
 
       InitializeObjectAttributes (&oattr, fname, pc.objcaseinsensitive (),
 				  get_handle (), NULL);
-      /* FUTURE: Ideally would know at this point if reparse point
-         is stored on a remote volume. Without this, may return DT_LNK
-         for remote names that end up lstat-ing as a normal directory. */
-      if (readdir_check_reparse_point (&oattr, false/*remote*/))
+      if (readdir_check_reparse_point (&oattr, isremote ()))
         de->d_type = DT_LNK;
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]