[Xcb-commit] configure.ac src

Julien Danjou jdanjou at kemper.freedesktop.org
Mon Jul 7 09:00:37 PDT 2008


 configure.ac   |    8 ++++++++
 src/xcb_util.c |    7 +++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

New commits:
commit a9d15a08451c76a9250642c9f662f296196f60a0
Author: Petr Salinger <Petr.Salinger at seznam.cz>
Date:   Mon Jul 7 17:57:37 2008 +0200

    fix FreeBSD support
    
    The GNU/kFreeBSD (and BSDs in general) have a different
    layout of struct sockaddr, sockaddr_in, sockaddr_un ...
    
    The first member do not have to be "sa_family",
    they also have "sa_len" field.
    
    Signed-off-by: Julien Danjou <julien at danjou.info>

diff --git a/configure.ac b/configure.ac
index 91f7ae5..8b8cbdf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -70,6 +70,14 @@ AC_HEADER_STDC
 AC_SEARCH_LIBS(getaddrinfo, socket)
 AC_SEARCH_LIBS(connect, socket)
 
+dnl check for the sockaddr_un.sun_len member
+AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
+		[AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])],
+		[],
+		[ #include <sys/types.h>
+		  #include <sys/un.h>
+		])
+								 										
 xcbincludedir='${includedir}/xcb'
 AC_SUBST(xcbincludedir)
 
diff --git a/src/xcb_util.c b/src/xcb_util.c
index 3eacc0d..8c18d71 100644
--- a/src/xcb_util.c
+++ b/src/xcb_util.c
@@ -246,13 +246,16 @@ static int _xcb_open_tcp(char *host, char *protocol, const unsigned short port)
 static int _xcb_open_unix(char *protocol, const char *file)
 {
     int fd;
-    struct sockaddr_un addr = { AF_UNIX };
+    struct sockaddr_un addr;
 
     if (protocol && strcmp("unix",protocol))
         return -1;
 
     strcpy(addr.sun_path, file);
-
+    addr.sun_family = AF_UNIX;
+#if HAVE_SOCKADDR_SUN_LEN
+    addr.sun_len = SUN_LEN(&addr);
+#endif
     fd = socket(AF_UNIX, SOCK_STREAM, 0);
     if(fd == -1)
         return -1;


More information about the xcb-commit mailing list