diff options
author | Petr Salinger <Petr.Salinger@seznam.cz> | 2008-07-07 17:57:37 +0200 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2008-07-07 17:57:37 +0200 |
commit | a9d15a08451c76a9250642c9f662f296196f60a0 (patch) | |
tree | 3bd9e1daef52a5f3fc047ecfe8ba5b648b276236 | |
parent | ee78071902e93ce22a3170f0937c158fd16894d8 (diff) |
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@danjou.info>
-rw-r--r-- | configure.ac | 8 | ||||
-rw-r--r-- | src/xcb_util.c | 7 |
2 files changed, 13 insertions, 2 deletions
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; |