# HG changeset patch # User Peter O'Gorman # Date 1211850706 0 # Node ID 313b87adb730d25821935c8653fa48336a820671 # Parent 5197256f66b5973eac2656d66242450aae957223 A patch from Peter O'Gorman at The Written Word, Inc. to fix various portability issues. These changes seemed reasonable, even though I wasn't able to test or verify them all in particular. Hopefully we don't break anything on another OS. Refs #3798 committer: Richard Laager diff -r 5197256f66b5 -r 313b87adb730 COPYRIGHT --- a/COPYRIGHT Mon May 26 17:10:55 2008 +0000 +++ b/COPYRIGHT Tue May 27 01:11:46 2008 +0000 @@ -278,6 +278,7 @@ Novell Padraig O'Briain Christopher O'Brien (siege) +Peter O'Gorman Jon Oberheide Yusuke Odate Ruediger Oertel @@ -449,6 +450,7 @@ Matt Wilson Dan Winship Scott Wolchok +The Written Word, Inc. Kevin Wu Won Pui Lam Wong Justin Wood diff -r 5197256f66b5 -r 313b87adb730 configure.ac --- a/configure.ac Mon May 26 17:10:55 2008 +0000 +++ b/configure.ac Tue May 27 01:11:46 2008 +0000 @@ -108,13 +108,14 @@ dnl Checks for programs. AC_PROG_CC +AM_PROG_CC_C_O AC_DISABLE_STATIC -AM_PROG_LIBTOOL +AC_PROG_LIBTOOL LIBTOOL="$LIBTOOL --silent" AC_PROG_INSTALL AC_PROG_INTLTOOL PKG_PROG_PKG_CONFIG - +AC_FUNC_ALLOCA GETTEXT_PACKAGE=pidgin AC_SUBST(GETTEXT_PACKAGE) @@ -210,7 +211,7 @@ [Define to 1 if you have the getaddrinfo function.])], [AC_CHECK_LIB(socket, getaddrinfo, [AC_DEFINE([HAVE_GETADDRINFO]) LIBS="-lsocket -lsnl $LIBS"], , , -lnsl)]) - +AC_CHECK_FUNCS(inet_ntop) dnl Check for socklen_t (in Unix98) AC_MSG_CHECKING(for socklen_t) AC_TRY_COMPILE([ @@ -234,6 +235,12 @@ ]) ]) +dnl Some systems do not have sa_len field for struct sockaddr. +AC_CHECK_MEMBER([struct sockaddr.sa_len], + [AC_DEFINE([HAVE_STRUCT_SOCKADDR_SA_LEN],[1], + [Define if struct sockaddr has an sa_len member])],[:], + [#include ]) + dnl to prevent the g_stat()/g_unlink() crash, dnl (09:50:07) Robot101: LSchiere2: it's easy. +LC_SYS_LARGEFILE somewhere in configure.ac AC_SYS_LARGEFILE diff -r 5197256f66b5 -r 313b87adb730 libpurple/dnsquery.c --- a/libpurple/dnsquery.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/dnsquery.c Tue May 27 01:11:46 2008 +0000 @@ -32,6 +32,9 @@ #include "prefs.h" #include "util.h" +#if (defined(__APPLE__) || defined (__unix__)) && !defined(__osf__) +#define PURPLE_DNSQUERY_USE_FORK +#endif /************************************************************************** * DNS query API **************************************************************************/ @@ -47,16 +50,16 @@ gpointer data; guint timeout; -#if defined(__unix__) || defined(__APPLE__) +#if defined(PURPLE_DNSQUERY_USE_FORK) PurpleDnsQueryResolverProcess *resolver; -#elif defined _WIN32 /* end __unix__ || __APPLE__ */ +#elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */ GThread *resolver; GSList *hosts; gchar *error_message; #endif }; -#if defined(__unix__) || defined(__APPLE__) +#if defined(PURPLE_DNSQUERY_USE_FORK) #define MAX_DNS_CHILDREN 4 @@ -131,7 +134,7 @@ return FALSE; } -#if defined(__unix__) || defined(__APPLE__) +#if defined(PURPLE_DNSQUERY_USE_FORK) /* * Unix! @@ -649,7 +652,7 @@ return query_data; } -#elif defined _WIN32 /* end __unix__ || __APPLE__ */ +#elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */ /* * Windows! @@ -821,7 +824,7 @@ return query_data; } -#else /* not __unix__ or __APPLE__ or _WIN32 */ +#else /* not PURPLE_DNSQUERY_USE_FORK or _WIN32 */ /* * We weren't able to do anything fancier above, so use the @@ -897,7 +900,7 @@ return query_data; } -#endif /* not __unix__ or __APPLE__ or _WIN32 */ +#endif /* not PURPLE_DNSQUERY_USE_FORK or _WIN32 */ void purple_dnsquery_destroy(PurpleDnsQueryData *query_data) @@ -907,7 +910,7 @@ if (ops && ops->destroy) ops->destroy(query_data); -#if defined(__unix__) || defined(__APPLE__) +#if defined(PURPLE_DNSQUERY_USE_FORK) queued_requests = g_slist_remove(queued_requests, query_data); if (query_data->resolver != NULL) @@ -918,7 +921,7 @@ * they just don't listen. */ purple_dnsquery_resolver_destroy(query_data->resolver); -#elif defined _WIN32 /* end __unix__ || __APPLE__ */ +#elif defined _WIN32 /* end PURPLE_DNSQUERY_USE_FORK */ if (query_data->resolver != NULL) { /* @@ -987,7 +990,7 @@ void purple_dnsquery_uninit(void) { -#if defined(__unix__) || defined(__APPLE__) +#if defined(PURPLE_DNSQUERY_USE_FORK) while (free_dns_children != NULL) { purple_dnsquery_resolver_destroy(free_dns_children->data); diff -r 5197256f66b5 -r 313b87adb730 libpurple/dnssrv.c --- a/libpurple/dnssrv.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/dnssrv.c Tue May 27 01:11:46 2008 +0000 @@ -25,8 +25,8 @@ #include "util.h" #ifndef _WIN32 +#include #include -#include #ifdef HAVE_ARPA_NAMESER_COMPAT_H #include #endif diff -r 5197256f66b5 -r 313b87adb730 libpurple/internal.h --- a/libpurple/internal.h Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/internal.h Tue May 27 01:11:46 2008 +0000 @@ -102,7 +102,7 @@ #include #ifdef PURPLE_PLUGINS -# ifndef _WIN32 +# ifdef HAVE_DLFCN_H # include # endif #endif diff -r 5197256f66b5 -r 313b87adb730 libpurple/nat-pmp.c --- a/libpurple/nat-pmp.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/nat-pmp.c Tue May 27 01:11:46 2008 +0000 @@ -125,7 +125,16 @@ if (bitmask & (1 << i)) { addrs[i] = sa; +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa); +#else + if (sa->sa_family == AF_INET) + sa = (struct sockaddr*)(sizeof(struct sockaddr_in) + (char *)sa); +#ifdef AF_INET6 + else if (sa->sa_family == AF_INET6) + sa = (struct sockaddr*)(sizeof(struct sockaddr_in6) + (char *)sa); +#endif +#endif } else { @@ -146,7 +155,12 @@ if ((sin->sin_addr.s_addr == INADDR_ANY) && mask && (ntohl(((struct sockaddr_in *)mask)->sin_addr.s_addr) == 0L || - mask->sa_len == 0)) +#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN + mask->sa_len == 0 +#else + 0 +#endif + )) return 1; else return 0; diff -r 5197256f66b5 -r 313b87adb730 libpurple/network.c --- a/libpurple/network.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/network.c Tue May 27 01:11:46 2008 +0000 @@ -27,9 +27,9 @@ #include "internal.h" #ifndef _WIN32 +#include #include #include -#include #include #include #else diff -r 5197256f66b5 -r 313b87adb730 libpurple/protocols/zephyr/Makefile.am --- a/libpurple/protocols/zephyr/Makefile.am Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/protocols/zephyr/Makefile.am Tue May 27 01:11:46 2008 +0000 @@ -104,7 +104,7 @@ -I$(top_srcdir)/libpurple \ -I$(top_builddir)/libpurple \ -I$(top_srcdir)/libpurple/protocols \ - -DCONFDIR=\"$(confdir)\" \ + -DCONFDIR=\"$(sysconfdir)\" \ $(GLIB_CFLAGS) \ $(KRB4_CFLAGS) \ $(DEBUG_CFLAGS) diff -r 5197256f66b5 -r 313b87adb730 libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Tue May 27 01:11:46 2008 +0000 @@ -892,11 +892,16 @@ gconv1 = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, zt2->name, gc->account); gcc = purple_conversation_get_chat_data(gconv1); - +#ifndef INET_ADDRSTRLEN +#define INET_ADDRSTRLEN 16 +#endif if (!purple_conv_chat_find_user(gcc, sendertmp)) { gchar ipaddr[INET_ADDRSTRLEN]; +#ifdef HAVE_INET_NTOP inet_ntop(AF_INET, ¬ice.z_sender_addr.s_addr, ipaddr, sizeof(ipaddr)); - +#else + memcpy(ipaddr,inet_ntoa(notice.z_sender_addr),sizeof(ipaddr)); +#endif purple_conv_chat_add_user(gcc, sendertmp, ipaddr, PURPLE_CBFLAGS_NONE, TRUE); } g_free(sendertmp); diff -r 5197256f66b5 -r 313b87adb730 libpurple/proxy.c --- a/libpurple/proxy.c Mon May 26 17:10:55 2008 +0000 +++ b/libpurple/proxy.c Tue May 27 01:11:46 2008 +0000 @@ -1726,6 +1726,10 @@ * resolved, and each time a connection attempt fails (assuming there * is another IP address to try). */ +#ifndef INET6_ADDRSTRLEN +#define INET6_ADDRSTRLEN 46 +#endif + static void try_connect(PurpleProxyConnectData *connect_data) { size_t addrlen; @@ -1736,9 +1740,13 @@ connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); addr = connect_data->hosts->data; connect_data->hosts = g_slist_remove(connect_data->hosts, connect_data->hosts->data); - +#ifdef HAVE_INET_NTOP inet_ntop(addr->sa_family, &((struct sockaddr_in *)addr)->sin_addr, ipaddr, sizeof(ipaddr)); +#else + memcpy(ipaddr,inet_ntoa(((struct sockaddr_in *)addr)->sin_addr), + sizeof(ipaddr)); +#endif purple_debug_info("proxy", "Attempting connection to %s\n", ipaddr); switch (purple_proxy_info_get_type(connect_data->gpi)) {