Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-03-01 18:28:24 +0300
committerCorinna Vinschen <corinna@vinschen.de>2003-03-01 18:28:24 +0300
commit9d913f071f1c00df561d82fb3e5c7d094cf2c6f4 (patch)
treea1c5d5a9aee2475930154ee4cec2f2caf924c2ef
parent82569d7ac64ebd1e1bc0699ca1b2ddc7c1d436de (diff)
* fhandler_socket.cc (get_inet_addr): Open and read socket file using
Win32 calls.
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/fhandler_socket.cc34
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 <corinna@vinschen.de>
+
+ * fhandler_socket.cc (get_inet_addr): Open and read socket file using
+ Win32 calls.
+
2003-02-28 Christopher Faylor <cgf@redhat.com>
* 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