emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master f861353: Remove redundant code in connect_network_s


From: Eli Zaretskii
Subject: [Emacs-diffs] master f861353: Remove redundant code in connect_network_socket
Date: Wed, 17 May 2017 11:14:06 -0400 (EDT)

branch: master
commit f861353b684e5c40dade61f89fd1742e4226a282
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Remove redundant code in connect_network_socket
    
    * src/process.c (connect_network_socket) [HAVE_GETSOCKNAME]:
    Remove redundant type-casting and variables.  Don't call
    'getsockname' to find the port for AF_LOCAL sockets.
    [AF_INET6]: Add an assertion to verify that the ports in the IPv4
    and IPv6 structures are at the same offset and have the same size.
---
 src/process.c | 41 +++++++++++++++++++----------------------
 1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/src/process.c b/src/process.c
index fdea977..ecb1b0c 100644
--- a/src/process.c
+++ b/src/process.c
@@ -3418,34 +3418,31 @@ connect_network_socket (Lisp_Object proc, Lisp_Object 
addrinfos,
            report_file_error ("Cannot bind server socket", Qnil);
 
 #ifdef HAVE_GETSOCKNAME
-         if (p->port == 0)
+         if (p->port == 0
+#ifdef HAVE_LOCAL_SOCKETS
+             && family != AF_LOCAL
+#endif
+             )
            {
-             struct sockaddr_storage sa1;
+             struct sockaddr_in sa1;
              socklen_t len1 = sizeof (sa1);
+#ifdef AF_INET6
+             /* The code below assumes the port is at the same offset
+                and of the same width in both IPv4 and IPv6
+                structures, but the standards don't guarantee that,
+                so we have this assertion to make sure.  */
+             eassert ((offsetof (struct sockaddr_in, sin_port)
+                       == offsetof (struct sockaddr_in6, sin6_port))
+                      && (sizeof (sa1.sin_port)
+                          == sizeof (((struct sockaddr_in6 *) 
&sa1)->sin6_port)));
+#endif
              if (getsockname (s, (struct sockaddr *)&sa1, &len1) == 0)
                {
+                 Lisp_Object service = make_number (ntohs (sa1.sin_port));
+                 contact = Fplist_put (contact, QCservice, service);
                  /* Save the port number so that we can stash it in
                     the process object later.  */
-                 int port = -1;
-                 switch (family)
-                   {
-                   case AF_INET:
-                     ((struct sockaddr_in *) sa)->sin_port
-                       = port = ((struct sockaddr_in *) &sa1)->sin_port;
-                     break;
-# ifdef AF_INET6
-                   case AF_INET6:
-                     ((struct sockaddr_in6 *) sa)->sin6_port
-                       = port = ((struct sockaddr_in6 *) &sa1)->sin6_port;
-                     break;
-# endif
-                   }
-
-                 if (0 <= port)
-                   {
-                     Lisp_Object service = make_number (ntohs (port));
-                     contact = Fplist_put (contact, QCservice, service);
-                   }
+                 ((struct sockaddr_in *) sa)->sin_port = sa1.sin_port;
                }
            }
 #endif



reply via email to

[Prev in Thread] Current Thread [Next in Thread]