mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-03-02 13:05:42 +08:00
Cygwin: AF_LOCAL: allow opening with the O_PATH flag
If that flag is not set, or if an attempt is made to open a different type of socket, the errno is now EOPNOTSUPP instead of ENXIO. This is consistent with POSIX, starting with the 2016 edition. Earlier editions were silent on this issue. Opening is done in a (new) fhandler_socket_local::open method by calling fhandler_base::open_fs. Also add a corresponding fhandler_socket_local::close method.
This commit is contained in:
parent
3ed0086d15
commit
b1b4639b12
@ -834,6 +834,8 @@ class fhandler_socket_local: public fhandler_socket_wsock
|
||||
int getsockopt (int level, int optname, const void *optval,
|
||||
__socklen_t *optlen);
|
||||
|
||||
int open (int flags, mode_t mode = 0);
|
||||
int close ();
|
||||
int __reg2 fstat (struct stat *buf);
|
||||
int __reg2 fstatvfs (struct statvfs *buf);
|
||||
int __reg1 fchmod (mode_t newmode);
|
||||
|
@ -634,6 +634,26 @@ fhandler_socket_local::dup (fhandler_base *child, int flags)
|
||||
return fhandler_socket_wsock::dup (child, flags);
|
||||
}
|
||||
|
||||
int
|
||||
fhandler_socket_local::open (int flags, mode_t mode)
|
||||
{
|
||||
/* We don't support opening sockets unless O_PATH is specified. */
|
||||
if (flags & O_PATH)
|
||||
return open_fs (flags, mode);
|
||||
|
||||
set_errno (EOPNOTSUPP);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
fhandler_socket_local::close ()
|
||||
{
|
||||
if (get_flags () & O_PATH)
|
||||
return fhandler_base::close ();
|
||||
else
|
||||
return fhandler_socket_wsock::close ();
|
||||
}
|
||||
|
||||
int __reg2
|
||||
fhandler_socket_local::fstat (struct stat *buf)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user