[PATCH] Cygwin: fhandler_socket::open: support the O_PATH flag

Ken Brown kbrown@cornell.edu
Mon Jan 13 16:56:00 GMT 2020


On 1/13/2020 10:31 AM, Corinna Vinschen wrote:
> Hi Ken,
> 
> On Dec 26 15:25, Ken Brown wrote:
>> If that flag is not set, fail with EOPNOTSUPP instead of ENXIO.  This
>> is consistent with POSIX, starting with the 2016 edition.  Earlier
>> editions were silent on this issue.
>> ---
>>   winsup/cygwin/fhandler_socket.cc | 13 +++++++++++--
>>   winsup/cygwin/release/3.1.3      |  5 +++++
>>   winsup/doc/new-features.xml      |  5 +++++
>>   3 files changed, 21 insertions(+), 2 deletions(-)
>>   create mode 100644 winsup/cygwin/release/3.1.3
>>
>> diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
>> index 9f33d8087..4a46d5a64 100644
>> --- a/winsup/cygwin/fhandler_socket.cc
>> +++ b/winsup/cygwin/fhandler_socket.cc
>> @@ -269,8 +269,17 @@ fhandler_socket::fcntl (int cmd, intptr_t arg)
>>   int
>>   fhandler_socket::open (int flags, mode_t mode)
>>   {
>> -  set_errno (ENXIO);
>> -  return 0;
>> +  /* We don't support opening sockets unless O_PATH is specified. */
>> +  if (!(flags & O_PATH))
>> +    {
>> +      set_errno (EOPNOTSUPP);
>> +      return 0;
>> +    }
>> +
>> +  query_open (query_read_attributes);
>> +  nohandle (true);
>> +  set_flags (flags);
> 
> Shouldn't that only work with AF_LOCAL/AF_UNIX sockets?  This looks
> like it will return a valid descriptor even for IP sockets.

Thanks for catching that.  I'll fix it.

Ken



More information about the Cygwin-patches mailing list