# HG changeset patch # User Ivo Smits # Date 1391209133 -3600 # Node ID 4c083d81f5a8414346721cc25f672c824938219d # Parent 377e7d4fbc1027b11687c2994ead1e1d4d40b3ba Fixes for OpenBSD (thanks to Pi and SeekingFor) diff -r 377e7d4fbc10 -r 4c083d81f5a8 build.sh --- a/build.sh Fri Jan 31 22:57:46 2014 +0100 +++ b/build.sh Fri Jan 31 23:58:53 2014 +0100 @@ -7,6 +7,7 @@ if [ "$(uname -s)" = "OpenBSD" -o "$(uname -s)" = "FreeBSD" -o "$(uname -s)" = "NetBSD" ]; then echo "Detected *BSD" tar="gtar" + export CPATH="/usr/local/include:${CPATH}" elif [ "$(uname -s)" = "SunOS" ]; then echo "Detected SunOS" tar="gtar" diff -r 377e7d4fbc10 -r 4c083d81f5a8 src/common.c --- a/src/common.c Fri Jan 31 22:57:46 2014 +0100 +++ b/src/common.c Fri Jan 31 23:58:53 2014 +0100 @@ -180,6 +180,9 @@ af = ai_remote->ai_family; } if (!af) af = AF_INET; + int sa_size = sizeof(sockaddr_any); + if (af == AF_INET) sa_size = sizeof(struct sockaddr_in); + else if (af == AF_INET6) sa_size = sizeof(struct sockaddr_in6); int sfd = socket(af, SOCK_DGRAM, IPPROTO_UDP); if (sfd < 0) return errorexitp("Could not create UDP socket"); sockaddr_any udpaddr; @@ -189,7 +192,7 @@ int port = 2998; if ((envval = getconf("LOCAL_PORT"))) port = atoi(envval); if (sockaddr_set_port(&udpaddr, port)) return -1; - if (bind(sfd, (struct sockaddr*)&udpaddr, sizeof(udpaddr))) return errorexitp("Could not bind socket"); + if (bind(sfd, &udpaddr.any, sa_size)) return errorexitp("Could not bind socket"); memset(&udpaddr, 0, sizeof(udpaddr)); udpaddr.any.sa_family = af; if (ai_remote) memcpy(&udpaddr, ai_remote->ai_addr, ai_remote->ai_addrlen); @@ -204,7 +207,7 @@ if (session->remote_float) { session->remote_float = 2; } else { - if (connect(sfd, (struct sockaddr*)&udpaddr, sizeof(udpaddr))) return errorexitp("Could not connect socket"); + if (connect(sfd, &udpaddr.any, sa_size)) return errorexitp("Could not connect socket"); } } if (ai_local) freeaddrinfo(ai_local); @@ -318,7 +321,7 @@ char protocol_data[p->protocol_data_size]; memset(protocol_data, 0, p->protocol_data_size); - session.protocol_data = &protocol_data; + session.protocol_data = protocol_data; if (p->init && p->init(&session) < 0) return -1; if (drop_privileges() < 0) return -1;