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>2009-08-14 10:58:44 +0400
committerCorinna Vinschen <corinna@vinschen.de>2009-08-14 10:58:44 +0400
commitc1999c4b0c262112ca1fa38fcd1558b9e91a7bf0 (patch)
treea5b744dbd5cadb8f8d6007904b972c654f45edff
parent95a1cc70249dd8b0461b91efbf93b78a4af2a672 (diff)
* (fhandler_socket::getsockname): Fix length returned for unbound
AF_LOCAL sockets. (fhandler_socket::getpeername): Ditto. * net.cc (socketpair): Don't set sun_path and peer_sun_path to make sure getsockname and getpeername return the correct values for AF_LOCAL sockets.
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/fhandler_socket.cc4
-rw-r--r--winsup/cygwin/net.cc4
3 files changed, 11 insertions, 6 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index d6103c0da..3e7336c1b 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,12 @@
+2009-08-14 Corinna Vinschen <corinna@vinschen.de>
+
+ * (fhandler_socket::getsockname): Fix length returned for unbound
+ AF_LOCAL sockets.
+ (fhandler_socket::getpeername): Ditto.
+ * net.cc (socketpair): Don't set sun_path and peer_sun_path to
+ make sure getsockname and getpeername return the correct values
+ for AF_LOCAL sockets.
+
2009-08-13 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::accept): Use sizeof rather
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index f213e5d96..52d03ed07 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -1209,7 +1209,7 @@ fhandler_socket::getsockname (struct sockaddr *name, int *namelen)
if (get_sun_path ())
strncat (sun.sun_path, get_sun_path (), UNIX_PATH_LEN - 1);
memcpy (name, &sun, min (*namelen, (int) SUN_LEN (&sun) + 1));
- *namelen = (int) SUN_LEN (&sun) + 1;
+ *namelen = (int) SUN_LEN (&sun) + (get_sun_path () ? 1 : 0);
res = 0;
}
else
@@ -1283,7 +1283,7 @@ fhandler_socket::getpeername (struct sockaddr *name, int *namelen)
if (get_peer_sun_path ())
strncat (sun.sun_path, get_peer_sun_path (), UNIX_PATH_LEN - 1);
memcpy (name, &sun, min (*namelen, (int) SUN_LEN (&sun) + 1));
- *namelen = (int) SUN_LEN (&sun) + 1;
+ *namelen = (int) SUN_LEN (&sun) + (get_peer_sun_path () ? 1 : 0);
}
else
{
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 80f869a25..c766d7d08 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -2866,8 +2866,6 @@ socketpair (int family, int type, int protocol, int *sb)
if (sb0 >= 0 && fdsock (sb0, dev, insock))
{
- ((fhandler_socket *) sb0)->set_sun_path ("");
- ((fhandler_socket *) sb0)->set_peer_sun_path ("");
((fhandler_socket *) sb0)->set_addr_family (family);
((fhandler_socket *) sb0)->set_socket_type (type);
((fhandler_socket *) sb0)->connect_state (connected);
@@ -2878,8 +2876,6 @@ socketpair (int family, int type, int protocol, int *sb)
if (sb1 >= 0 && fdsock (sb1, dev, outsock))
{
- ((fhandler_socket *) sb1)->set_sun_path ("");
- ((fhandler_socket *) sb1)->set_peer_sun_path ("");
((fhandler_socket *) sb1)->set_addr_family (family);
((fhandler_socket *) sb1)->set_socket_type (type);
((fhandler_socket *) sb1)->connect_state (connected);