From 9d913f071f1c00df561d82fb3e5c7d094cf2c6f4 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Sat, 1 Mar 2003 15:28:24 +0000 Subject: [PATCH] * fhandler_socket.cc (get_inet_addr): Open and read socket file using Win32 calls. --- winsup/cygwin/ChangeLog | 5 +++++ winsup/cygwin/fhandler_socket.cc | 34 +++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index b2639ac5f..583347528 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2003-03-01 Corinna Vinschen + + * fhandler_socket.cc (get_inet_addr): Open and read socket file using + Win32 calls. + 2003-02-28 Christopher Faylor * cygwin.din: Wrap atexit and exit with cygwin, thread-safe functions. diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 416dc39d9..07afa3955 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -61,15 +61,35 @@ get_inet_addr (const struct sockaddr *in, int inlen, } else if (in->sa_family == AF_LOCAL) { - int fd = open (in->sa_data, O_RDONLY); - if (fd == -1) - return 0; - + path_conv pc (in->sa_data, PC_SYM_FOLLOW); + if (pc.error) + { + set_errno (pc.error); + return 0; + } + if (!pc.exists ()) + { + set_errno (ENOENT); + return 0; + } + if (!pc.issocket ()) + { + set_errno (EBADF); + return 0; + } + HANDLE fh = CreateFile (pc, GENERIC_READ, wincap.shared (), &sec_none, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + if (fh == INVALID_HANDLE_VALUE) + { + __seterrno (); + return 0; + } int ret = 0; + DWORD len = 0; char buf[128]; memset (buf, 0, sizeof buf); - if (read (fd, buf, sizeof buf) != -1) - { + if (ReadFile (fh, buf, 128, &len, 0)) + { sockaddr_in sin; sin.sin_family = AF_INET; sscanf (buf + strlen (SOCKET_COOKIE), "%hu %08x-%08x-%08x-%08x", @@ -81,7 +101,7 @@ get_inet_addr (const struct sockaddr *in, int inlen, *outlen = sizeof sin; ret = 1; } - close (fd); + CloseHandle (fh); return ret; } else