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>2018-02-26 19:53:50 +0300
committerCorinna Vinschen <corinna@vinschen.de>2018-02-26 19:56:09 +0300
commit1e5e44a9a5fa0b7f0bfc876f534221f709f01d66 (patch)
tree980aa5463f74dafb83f762ebd3ba12232a3b016b
parent5b6cbef9e087419ffe1dcf039910c26b1fed30b6 (diff)
Cygwin: fhandler_socket: define socketpair as virtual function
...in preparation of moving the type and protocol test into the actual classes. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/fhandler.h8
-rw-r--r--winsup/cygwin/fhandler_socket_inet.cc8
-rw-r--r--winsup/cygwin/fhandler_socket_local.cc4
-rw-r--r--winsup/cygwin/fhandler_socket_unix.cc2
-rw-r--r--winsup/cygwin/net.cc6
5 files changed, 21 insertions, 7 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 863cd312f..1b7e49cc1 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -544,6 +544,8 @@ class fhandler_socket: public fhandler_base
char *get_proc_fd_name (char *buf);
virtual int socket (int af, int type, int protocol, int flags) = 0;
+ virtual int socketpair (int af, int type, int protocol, int flags,
+ fhandler_socket *fh_out) = 0;
virtual int bind (const struct sockaddr *name, int namelen) = 0;
virtual int listen (int backlog) = 0;
virtual int accept4 (struct sockaddr *peer, int *len, int flags) = 0;
@@ -683,6 +685,8 @@ class fhandler_socket_inet: public fhandler_socket_wsock
~fhandler_socket_inet ();
int socket (int af, int type, int protocol, int flags);
+ int socketpair (int af, int type, int protocol, int flags,
+ fhandler_socket *fh_out);
int bind (const struct sockaddr *name, int namelen);
int listen (int backlog);
int accept4 (struct sockaddr *peer, int *len, int flags);
@@ -769,7 +773,7 @@ class fhandler_socket_local: public fhandler_socket_wsock
int socket (int af, int type, int protocol, int flags);
int socketpair (int af, int type, int protocol, int flags,
- fhandler_socket_local *fh_out);
+ fhandler_socket *fh_out);
int bind (const struct sockaddr *name, int namelen);
int listen (int backlog);
int accept4 (struct sockaddr *peer, int *len, int flags);
@@ -838,7 +842,7 @@ class fhandler_socket_unix : public fhandler_socket
int socket (int af, int type, int protocol, int flags);
int socketpair (int af, int type, int protocol, int flags,
- fhandler_socket_unix *fh_out);
+ fhandler_socket *fh_out);
int bind (const struct sockaddr *name, int namelen);
int listen (int backlog);
int accept4 (struct sockaddr *peer, int *len, int flags);
diff --git a/winsup/cygwin/fhandler_socket_inet.cc b/winsup/cygwin/fhandler_socket_inet.cc
index aa3ead7ae..42a3bd265 100644
--- a/winsup/cygwin/fhandler_socket_inet.cc
+++ b/winsup/cygwin/fhandler_socket_inet.cc
@@ -721,6 +721,14 @@ fhandler_socket_inet::socket (int af, int type, int protocol, int flags)
}
int
+fhandler_socket_inet::socketpair (int af, int type, int protocol, int flags,
+ fhandler_socket *fh_out)
+{
+ set_errno (EAFNOSUPPORT);
+ return -1;
+}
+
+int
fhandler_socket_inet::bind (const struct sockaddr *name, int namelen)
{
int res = -1;
diff --git a/winsup/cygwin/fhandler_socket_local.cc b/winsup/cygwin/fhandler_socket_local.cc
index 6ec8fe573..d88476d1c 100644
--- a/winsup/cygwin/fhandler_socket_local.cc
+++ b/winsup/cygwin/fhandler_socket_local.cc
@@ -255,13 +255,15 @@ fhandler_socket_local::socket (int af, int type, int protocol, int flags)
int
fhandler_socket_local::socketpair (int af, int type, int protocol, int flags,
- fhandler_socket_local *fh_out)
+ fhandler_socket *_fh_out)
{
SOCKET insock = INVALID_SOCKET;
SOCKET outsock = INVALID_SOCKET;
SOCKET sock = INVALID_SOCKET;
struct sockaddr_in sock_in, sock_out;
int len;
+ fhandler_socket_local *fh_out = reinterpret_cast<fhandler_socket_local *>
+ (_fh_out);
/* create listening socket */
sock = ::socket (AF_INET, type, 0);
diff --git a/winsup/cygwin/fhandler_socket_unix.cc b/winsup/cygwin/fhandler_socket_unix.cc
index 21d2ad62d..48d0d4c54 100644
--- a/winsup/cygwin/fhandler_socket_unix.cc
+++ b/winsup/cygwin/fhandler_socket_unix.cc
@@ -235,7 +235,7 @@ fhandler_socket_unix::socket (int af, int type, int protocol, int flags)
int
fhandler_socket_unix::socketpair (int af, int type, int protocol, int flags,
- fhandler_socket_unix *fh_out)
+ fhandler_socket *fh_out)
{
set_errno (EAFNOSUPPORT);
return -1;
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index 89945c5a1..bd0a169dd 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -2303,7 +2303,7 @@ socketpair (int af, int type, int protocol, int *sb)
{
int res = -1;
const device *dev;
- fhandler_socket_local *fh_in, *fh_out;
+ fhandler_socket *fh_in, *fh_out;
int flags = type & _SOCK_FLAG_MASK;
type &= ~_SOCK_FLAG_MASK;
@@ -2349,8 +2349,8 @@ socketpair (int af, int type, int protocol, int *sb)
goto done;
}
- fh_in = reinterpret_cast<fhandler_socket_local *> (build_fh_dev (*dev));
- fh_out = reinterpret_cast<fhandler_socket_local *> (build_fh_dev (*dev));
+ fh_in = reinterpret_cast<fhandler_socket *> (build_fh_dev (*dev));
+ fh_out = reinterpret_cast<fhandler_socket *> (build_fh_dev (*dev));
if (fh_in && fh_out
&& fh_in->socketpair (af, type, protocol, flags, fh_out) == 0)
{