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>
This commit is contained in:
parent
ee78071902
commit
a9d15a0845
|
@ -70,6 +70,14 @@ AC_HEADER_STDC
|
||||||
AC_SEARCH_LIBS(getaddrinfo, socket)
|
AC_SEARCH_LIBS(getaddrinfo, socket)
|
||||||
AC_SEARCH_LIBS(connect, 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'
|
xcbincludedir='${includedir}/xcb'
|
||||||
AC_SUBST(xcbincludedir)
|
AC_SUBST(xcbincludedir)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
static int _xcb_open_unix(char *protocol, const char *file)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
struct sockaddr_un addr = { AF_UNIX };
|
struct sockaddr_un addr;
|
||||||
|
|
||||||
if (protocol && strcmp("unix",protocol))
|
if (protocol && strcmp("unix",protocol))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
strcpy(addr.sun_path, file);
|
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);
|
fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if(fd == -1)
|
if(fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue