Hi Corinna,

Corinna Vinschen wrote:
The only thing obviously broken now are symlinks. I've done some
debugging and tracked it down to the fact that any call like this:

path.c:2254:      if (NT_SUCCESS (status)
path.c:2255:      && NT_SUCCESS (status
path.c:2256:             = NtQueryInformationFile (h, &io, &fbi, sizeof fbi,
path.c:2257:                           FileBasicInformation)))

will return STATUS_NOT_SUPPORTED. I will need to do some further
learning to understand if this is a show stopper for symlinks,
although any wisdom dispensed would be greatly appreciated.

Is ity possible that the status code is not the one from
the NtQueryInformationFile call but rather from the
NtCreateFile call before?  In that case the first NT_SUCCESS (status)
is what fails.

A couple of lines above, line 2211ff, there's this:

...

There are two places which check for STATUS_EAS_NOT_SUPPORTED.
If you check additionally for STATUS_NOT_SUPPORTED in both places,
does it work now?
That worked! Thank you very very much. I've attached the patch.

I guess it remains to be seen if there are any other issues. But so
far it's looking good :-)

Kind regards,
Shaddy

Index: winsup/cygwin/path.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/path.cc,v
retrieving revision 1.555
diff -u -r1.555 path.cc
--- winsup/cygwin/path.cc       17 Jul 2009 09:00:19 -0000      1.555
+++ winsup/cygwin/path.cc       22 Jul 2009 16:58:00 -0000
@@ -2210,6 +2210,7 @@
                             eabuf, easize);
       /* No right to access EAs or EAs not supported? */
       if (status == STATUS_ACCESS_DENIED || status == STATUS_EAS_NOT_SUPPORTED
+         || status == STATUS_NOT_SUPPORTED
          /* Or a bug in Samba 3.2.x (x <= 7) when accessing a share's root dir
             which has EAs enabled? */
          || status == STATUS_INVALID_PARAMETER)
@@ -2217,7 +2218,7 @@
          no_ea = true;
          /* If EAs are not supported, there's no sense to check them again
             whith suffixes attached.  So we set eabuf/easize to 0 here once. */
-         if (status == STATUS_EAS_NOT_SUPPORTED)
+         if (status == STATUS_EAS_NOT_SUPPORTED || status == 
STATUS_NOT_SUPPORTED)
            {
              eabuf = NULL;
              easize = 0;

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to