From 95ff6fc6da3cccb2b50600a181c6f9dcb1333283 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 24 Oct 2013 09:41:17 +0000 Subject: * devices.in (dev_storage): Map /dev/zero and /dev/full to \Device\Null. * devices.cc: Regenerate. * dtable.h (struct dtable): Make fhandler_base friend, rather than fhandler_disk_file. * fhandler.cc (fhandler_base::open_with_arch): Create unique id. (fhandler_base::cleanup): Call del_my_locks. (fhandler_base::fcntl): Handle F_GETLK, F_SETLK and F_SETLKW. * fhandler.h (fhandler_base::get_dev): Return real device number. (fhandler_base::set_unique_id): New inline method. (fhandler_disk_file::lock): Drop declaration. (fhandler_disk_file::get_dev): New method, return pc.fs_serial_number. (fhandler_dev_zero::open): Drop declaration. * fhandler_disk_file.cc (fhandler_disk_file::close): Move del_my_locks call to fhandler_base::open_with_arch. (fhandler_disk_file::fcntl): Move handling of locking commands to fhandler_base::fcntl. (fhandler_base::open_fs): Drop call to NtAllocateLocallyUniqueId. * fhandler_zero.cc (fhandler_dev_zero::open): Remove so that default fhandler_base::open is used to open \Device\Null. * flock.cc (fixup_lockf_after_exec): Finding a single fhandler is enough here. (fhandler_base::lock): Replace fhandler_disk_file::lock. Refuse to lock nohandle devices. Handle read/write test using POSIX flags. Explain why. Never fail on SEEK_CUR or SEEK_END, rather assume position 0, just as Linux. * net.cc (fdsock): Create unique id. --- winsup/cygwin/net.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'winsup/cygwin/net.cc') diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index 053c66718..e81de79c1 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -636,6 +636,11 @@ fdsock (cygheap_fdmanip& fd, const device *dev, SOCKET soc) system_printf ("getsockopt(SO_SNDBUF) failed, %u", WSAGetLastError ()); } + /* A unique ID is necessary to recognize fhandler entries which are + duplicated by dup(2) or fork(2). This is used in BSD flock calls + to identify the descriptor. */ + ((fhandler_socket *) fd)->set_unique_id (); + return true; } -- cgit v1.2.3