emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs/src ChangeLog process.c


From: Andreas Schwab
Subject: [Emacs-diffs] emacs/src ChangeLog process.c
Date: Thu, 01 Jan 2009 15:58:41 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Andreas Schwab <schwab> 09/01/01 15:58:41

Modified files:
        src            : ChangeLog process.c 

Log message:
        (conv_sockaddr_to_lisp): Add workaround for
        getsockname bug on BSD.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ChangeLog?cvsroot=emacs&r1=1.7243&r2=1.7244
http://cvs.savannah.gnu.org/viewcvs/emacs/src/process.c?cvsroot=emacs&r1=1.574&r2=1.575

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/src/ChangeLog,v
retrieving revision 1.7243
retrieving revision 1.7244
diff -u -b -r1.7243 -r1.7244
--- ChangeLog   1 Jan 2009 08:54:01 -0000       1.7243
+++ ChangeLog   1 Jan 2009 15:58:38 -0000       1.7244
@@ -1,3 +1,8 @@
+2009-01-01  Andreas Schwab  <address@hidden>
+
+       * process.c (conv_sockaddr_to_lisp): Add workaround for
+       getsockname bug on BSD.
+
 2009-01-01  Chong Yidong  <address@hidden>
 
        * xfns.c (x_create_tip_frame): Set border width of the X window.

Index: process.c
===================================================================
RCS file: /sources/emacs/emacs/src/process.c,v
retrieving revision 1.574
retrieving revision 1.575
diff -u -b -r1.574 -r1.575
--- process.c   19 Dec 2008 22:53:15 -0000      1.574
+++ process.c   1 Jan 2009 15:58:40 -0000       1.575
@@ -41,6 +41,9 @@
 #ifdef HAVE_INTTYPES_H
 #include <inttypes.h>
 #endif
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#endif
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -2264,6 +2267,12 @@
   unsigned char *cp;
   register struct Lisp_Vector *p;
 
+  /* Workaround for a bug in getsockname on BSD: Names bound to
+     sockets in the UNIX domain are inaccessible; getsockname returns
+     a zero length name.  */
+  if (len < OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family))
+    return build_string ("");
+
   switch (sa->sa_family)
     {
     case AF_INET:
@@ -2273,14 +2282,14 @@
        address = Fmake_vector (make_number (len), Qnil);
        p = XVECTOR (address);
        p->contents[--len] = make_number (ntohs (sin->sin_port));
-       cp = (unsigned char *)&sin->sin_addr;
+       cp = (unsigned char *) &sin->sin_addr;
        break;
       }
 #ifdef AF_INET6
     case AF_INET6:
       {
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
-       uint16_t *ip6 = (uint16_t *)&sin6->sin6_addr;
+       uint16_t *ip6 = (uint16_t *) &sin6->sin6_addr;
        len = sizeof (sin6->sin6_addr)/2 + 1;
        address = Fmake_vector (make_number (len), Qnil);
        p = XVECTOR (address);
@@ -2301,11 +2310,11 @@
       }
 #endif
     default:
-      len -= sizeof (sa->sa_family);
+      len -= OFFSETOF (struct sockaddr, sa_family) + sizeof (sa->sa_family);
       address = Fcons (make_number (sa->sa_family),
                       Fmake_vector (make_number (len), Qnil));
       p = XVECTOR (XCDR (address));
-      cp = (unsigned char *) sa + sizeof (sa->sa_family);
+      cp = (unsigned char *) &sa->sa_family + sizeof (sa->sa_family);
       break;
     }
 




reply via email to

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