This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin] Cygwin: fhandler_socket: define socketpair as virtual function


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=1e5e44a9a5fa0b7f0bfc876f534221f709f01d66

commit 1e5e44a9a5fa0b7f0bfc876f534221f709f01d66
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Mon Feb 26 17:53:50 2018 +0100

    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>

Diff:
---
 winsup/cygwin/fhandler.h               | 8 ++++++--
 winsup/cygwin/fhandler_socket_inet.cc  | 8 ++++++++
 winsup/cygwin/fhandler_socket_local.cc | 4 +++-
 winsup/cygwin/fhandler_socket_unix.cc  | 2 +-
 winsup/cygwin/net.cc                   | 6 +++---
 5 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 863cd31..1b7e49c 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 aa3ead7..42a3bd2 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 6ec8fe5..d88476d 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 21d2ad6..48d0d4c 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 89945c5..bd0a169 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)
 	{


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]