Mail Archives: cygwin/2009/07/15/10:43:22
On Jul 15 13:58, Eric Blake wrote:
> Corinna Vinschen <corinna-cygwin <at> cygwin.com> writes:
> > The fact that accessing //home does not create an
> > exception points to a successful SMB name resolution.
> [...]
> It still seems like chdir() should do some
> sort of stat() test rather than just a successful SMB name resolution when
> attempting to change to //name.
That's not that easy. Since there's no real path //server supported in
Windows Cygwin has to rely on WNetGetResourceInformation for the
existence check and if the existence is confirmed, it allows to open a
file descriptor to this virtual path.
I created a patch which uses WNetOpenEnum for the existence check, but
it needs extremly long to timeout the existence check in such a case.
I assume you're set up to build your own Cygwin DLL, so you may try the
below patch. I'm not yet convinced it's a good thing to apply it,
though. It potentially slows down net operation a lot for the sake of a
rare border case. Frying pan, Fire. Anyway, please give it a try.
Index: fhandler_netdrive.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_netdrive.cc,v
retrieving revision 1.24
diff -u -p -r1.24 fhandler_netdrive.cc
--- fhandler_netdrive.cc 15 Jul 2009 14:31:51 -0000 1.24
+++ fhandler_netdrive.cc 15 Jul 2009 14:40:58 -0000
@@ -164,15 +164,20 @@ fhandler_netdrive::exists ()
*to = (*from == '/') ? '\\' : *from;
*to = '\0';
+ struct net_hdls nh = { NULL, NULL };
NETRESOURCE nr = {0};
- nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
- nr.lpLocalName = NULL;
nr.lpRemoteName = namebuf;
- DWORD ret = create_thread_and_wait (GET_RESOURCE_INFO, &nr, NULL, 0,
- "WNetGetResourceInformation");
- if (ret != ERROR_MORE_DATA && ret != NO_ERROR)
- return 0;
+ DWORD ret = create_thread_and_wait (GET_RESOURCE_OPENENUM,
+ &nr, &nh, 0, "WNetOpenEnum");
+ if (ret != NO_ERROR)
+ {
+ if (nh.dom)
+ WNetCloseEnum (nh.dom);
+ if (nh.net)
+ WNetCloseEnum (nh.net);
+ return 0;
+ }
return 1;
}
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
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
- Raw text -