summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/path.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-02-21 14:29:18 +0000
committerCorinna Vinschen <corinna@vinschen.de>2003-02-21 14:29:18 +0000
commitcf762b08cfb010d9d63e4ca44658c80bdf6ed8cb (patch)
tree18f96c59a7ee7b81b288251ebf493e5bd0e62637 /winsup/cygwin/path.cc
parentd05ef21d4f7e409472361b98945099485052efc0 (diff)
downloadcygnal-cf762b08cfb010d9d63e4ca44658c80bdf6ed8cb.tar.gz
cygnal-cf762b08cfb010d9d63e4ca44658c80bdf6ed8cb.tar.bz2
cygnal-cf762b08cfb010d9d63e4ca44658c80bdf6ed8cb.zip
* dtable.cc (dtable::build_fhandler_from_name): Set some fhandler
data on sockets to evaluate AF_LOCAL sockets correctly. (dtable::build_fhandler): Set unit number on sockets. * fhandler.h (fhandler_socket): Add unit number. (fhandler_socket::get_unit): New method. * fhandler_socket.cc (fhandler_socket::fhandler_socket): Set unit number. (fhandler_socket::fstat): Reorganize to return more Linux-like values. * net.cc: include ctype.h. (fdsock): Set unit number when building fhandler. * path.cc (path_conv::check): Set device type to FH_SOCKET if file is a AF_UNIX socket. (get_devn): Evaluate unit for virtual socket devices. (win32_device_name): Set windows path for sockets to unix_path with just backslashes to keep the different names. * syscalls.cc (fstat64): Don't override st_ino, st_dev and st_rdev for sockets. (stat_worker): Ditto. From Pierre Humblet: * autoload.cc (AccessCheck): Add. (DuplicateToken): Add. * security.h (check_file_access): Declare. * syscalls.cc (access): Convert path to Windows, check existence and readonly attribute. Call check_file_access instead of acl_access. * security.cc (check_file_access): Create. * sec_acl (acl_access): Delete.
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r--winsup/cygwin/path.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index d75f8a0c5..dea1d372f 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -799,10 +799,8 @@ out:
set_has_buggy_open (strcmp (fs.name, "SUNWNFS") == 0);
}
}
-#if 0
if (issocket ())
devn = FH_SOCKET;
-#endif
if (!(opt & PC_FULL))
{
@@ -954,7 +952,10 @@ get_devn (const char *name, int &unit)
devn = FH_PIPEW;
else if (deveq ("tcp") || deveq ("udp") || deveq ("streamsocket")
|| deveq ("dgsocket"))
- devn = FH_SOCKET;
+ {
+ devn = FH_SOCKET;
+ unit = tolower (*name) - 'a';
+ }
return devn;
}
@@ -1118,6 +1119,12 @@ win32_device_name (const char *src_path, char *win32_path,
return false;
switch (devn)
{
+ case FH_SOCKET:
+ char *c;
+ strcpy (win32_path, src_path);
+ while (c = strchr (win32_path, '/'))
+ *c = '\\';
+ break;
case FH_RANDOM:
__small_sprintf (win32_path, devfmt, unit == 8 ? "" : "u");
break;