Tue, 09 Mar 2010 21:41:55 +0000
propagate from branch 'im.pidgin.pidgin' (head 5684cbe452f79eb2b96f221d37c1f83383b60514)
to branch 'im.pidgin.cpw.malu.ft_thumbnails' (head b17c70609bd50faf3c5345f417a0755e71f12077)
--- a/.mtn-ignore Sun Feb 28 22:56:50 2010 +0000 +++ b/.mtn-ignore Tue Mar 09 21:41:55 2010 +0000 @@ -38,7 +38,10 @@ pidgin.spec$ pidgin-.*.tar.gz pidgin-.*.tar.bz2 +pidgin-*.*.*-dbgsym$ +pidgin-*.*.*-dbgsym.zip$ pidgin-*.*.*-win32bin$ +pidgin-*.*.*-win32-bin.zip$ pidgin/pidgin$ pidgin/pixmaps/emotes/default/24/theme pidgin/pixmaps/emotes/none/theme @@ -48,6 +51,9 @@ pidgin/plugins/perl/common/Makefile.old pidgin/win32/pidgin_dll_rc.rc$ pidgin/win32/pidgin_exe_rc.rc$ +pidgin/win32/nsis/gtk-runtime-*.*.*.*.zip +pidgin/win32/nsis/gtk_runtime_stage$ +pidgin/win32/nsis/pidgin-translations.nsh$ install-sh libpurple/dbus-bindings.c libpurple/dbus-signals.c
--- a/COPYRIGHT Sun Feb 28 22:56:50 2010 +0000 +++ b/COPYRIGHT Tue Mar 09 21:41:55 2010 +0000 @@ -303,6 +303,7 @@ Peter McCurdy Kurt McKee Torrey McMahon +Greg McNew Robert McQueen Mihály Mészáros Robert Mibus
--- a/ChangeLog Sun Feb 28 22:56:50 2010 +0000 +++ b/ChangeLog Tue Mar 09 21:41:55 2010 +0000 @@ -15,12 +15,28 @@ * Use GtkStatusIcon for the docklet, providing better integration in notification area. * Added UI for sending attentions (buzz, nudge) on supporting protocols. - * Make the search dialog unobtrusive in the conversation window (by making - it look and behave like the search dialog in Firefox) + * Make the search dialog unobtrusive in the conversation window (by + making it look and behave like the search dialog in Firefox) + * The Recent Log Activity sort method for the Buddy List now + distinguishes between no activity and a small amount of activity + in the distant past. (Greg McNew) Bonjour: * Added support for IPv6. (Thanks to T_X for testing) + Gadu-Gadu: + * Updated our bundled libgadu to 1.9.0-rc2 (many thanks to Krzysztof + Klinikowski for the work and testing put in here!) + + ICQ: + * X-Status (Custom ICQ status icon) support (Andrew Ivanov, Tomáš Kebert, + Yuriy Yevgrafov, and trac users bob007, salieff, and nops) + + XMPP: + * Direct messages to a specific resource only upon receipt of a message + with content (as opposed to a typing notification, etc). (Thanks to + rjoly for testing) + version 2.6.6 (02/18/2010): libpurple: * Fix 'make check' on OS X. (David Fang)
--- a/ChangeLog.win32 Sun Feb 28 22:56:50 2010 +0000 +++ b/ChangeLog.win32 Tue Mar 09 21:41:55 2010 +0000 @@ -4,6 +4,10 @@ * Win9x no longer supported. * Crash Report files (pidgin.RPT) are now generated in the ~/.purple directory instead of the installation directory. + * NSS SSL Library upgraded to 3.12.5 (thanks to Berke Viktor) + * GtkSpell upgraded to 2.0.16, changing the spellchecking backend to + enchant. This means that myspell, hunspell (OpenOffice) and existing + aspell dictionaries can be used. version 2.6.6 (02/18/2010): * Installer translations for: Norwegian nynorsk
--- a/Makefile.mingw Sun Feb 28 22:56:50 2010 +0000 +++ b/Makefile.mingw Tue Mar 09 21:41:55 2010 +0000 @@ -31,10 +31,7 @@ exit; \ }' VERSION) -GTK_INSTALL_VERSION = $(shell \ - source ../gtk_installer/version.sh; \ - echo $$gtk_version \ -) +GTK_INSTALL_VERSION = 2.14.7.0 STRIPPED_RELEASE_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-win32bin DEBUG_SYMBOLS_DIR = $(PIDGIN_TREE_TOP)/pidgin-$(PIDGIN_VERSION)-dbgsym @@ -44,19 +41,22 @@ # should be included in this list so they don't get stripped EXTERNAL_DLLS = \ comerr32.dll \ + exchndl.dll \ freebl3.dll \ gssapi32.dll \ k5sprt32.dll \ krb5_32.dll \ - libgtkspell.dll \ + libenchant.dll \ + libgtkspell-0.dll \ libmeanwhile-1.dll \ + libnspr4.dll \ + libplc4.dll \ + libplds4.dll \ libsasl.dll \ libxml2.dll \ - nspr4.dll \ nss3.dll \ nssckbi.dll \ - plc4.dll \ - plds4.dll \ + nssutil3.dll \ saslANONYMOUS.dll \ saslCRAMMD5.dll \ saslDIGESTMD5.dll \ @@ -67,12 +67,13 @@ libsilcclient-1-1-2.dll \ smime3.dll \ softokn3.dll \ + sqlite3.dll \ ssl3.dll #build an expression for `find` to use to ignore the above files EXTERNAL_DLLS_FIND_EXP = $(patsubst %,-o -name %,$(EXTERNAL_DLLS)) -.PHONY: all docs install installer installer_offline installer_zip debug_symbols_zip installers clean uninstall create_release_install_dir generate_translations_installer_include $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) +.PHONY: all docs install installer installer_offline installer_zip debug_symbols_zip installers clean uninstall create_release_install_dir generate_installer_includes $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) @@ -89,26 +90,48 @@ endif $(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) install $(MAKE) -C share/sounds -f $(MINGW_MAKEFILE) install + mkdir -p $(PIDGIN_INSTALL_DIR)/spellcheck + cp $(GTKSPELL_TOP)/bin/libgtkspell-0.dll $(PIDGIN_INSTALL_DIR)/spellcheck + cp $(ENCHANT_TOP)/bin/libenchant.dll $(PIDGIN_INSTALL_DIR)/spellcheck + cp -R $(ENCHANT_TOP)/lib $(PIDGIN_INSTALL_DIR)/spellcheck + cp $(WIN32_DEV_TOP)/pidgin-inst-deps-20100223/exchndl.dll $(PIDGIN_INSTALL_DIR) -generate_translations_installer_include: create_release_install_dir - rm -f pidgin/win32/nsis/pidgin-translations.nsh +pidgin/win32/nsis/gtk-runtime-$(GTK_BUNDLE_VERSION).zip: + pidgin/win32/nsis/generate_gtk_zip.sh `pwd` + +generate_installer_includes: create_release_install_dir pidgin/win32/nsis/gtk-runtime-$(GTK_BUNDLE_VERSION).zip debug_symbols_zip + rm -f pidgin/win32/nsis/pidgin-translations.nsh pidgin/win32/nsis/pidgin-spellcheck.nsh pidgin/win32/nsis/pidgin-spellcheck-preselect.nsh find $(STRIPPED_RELEASE_DIR)/locale -maxdepth 1 -mindepth 1 \ -exec basename {} ';' \ | sed -e s/^/\!insertmacro\ LANG_SECTION\ \"/ -e s/$$/\"/ \ > pidgin/win32/nsis/pidgin-translations.nsh + #Convert the available.lst lines to "!insertmacro SPELLCHECK_SECTION lang lang_name lang_file" + sed -e "/^#/d" -e "s/^[^,]\{1,\},[^,]\{1,\},/\"/" \ + -e "s/,/\"\ \"/" -e "s/,/\"\ \"/" -e "s/[\ \t]*$$/\"/" \ + -e "s/^/\!insertmacro\ SPELLCHECK_SECTION\ /" \ + pidgin/win32/nsis/available.lst \ + > pidgin/win32/nsis/pidgin-spellcheck.nsh + #Convert the lines to "!insertmacro CHECK_SPELLCHECK_SECTION lang" + iconv -f latin1 -t utf-8 pidgin/win32/nsis/pidgin-spellcheck.nsh | \ + sed -e "s/SPELLCHECK_SECTION/CHECK_SPELLCHECK_SECTION/" \ + -e "s/ \"[^\"]*\"\ \"[^\"]*\"[\t\ ]*$$//" | \ + iconv -f utf-8 -t latin1 \ + > pidgin/win32/nsis/pidgin-spellcheck-preselect.nsh create_release_install_dir: install rm -rf $(STRIPPED_RELEASE_DIR) - cp -R $(PIDGIN_INSTALL_DIR) $(STRIPPED_RELEASE_DIR) + mkdir $(STRIPPED_RELEASE_DIR) + tar -cf - $(PIDGIN_INSTALL_DIR) --exclude=Gtk --exclude=spellcheck/share \ + | tar --strip 2 -xC $(STRIPPED_RELEASE_DIR) -f - find $(STRIPPED_RELEASE_DIR) \( -name '*.dll' -o -name '*.exe' \) \ -not \( -false $(EXTERNAL_DLLS_FIND_EXP) \) \ -exec $(STRIP) --strip-unneeded {} ';' -installer: create_release_install_dir generate_translations_installer_include +installer: generate_installer_includes $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION).exe ./ -installer_offline: create_release_install_dir generate_translations_installer_include debug_symbols_zip +installer_offline: generate_installer_includes $(MAKENSIS) $(MAKENSISOPT)V3 $(MAKENSISOPT)DPIDGIN_VERSION="$(PIDGIN_VERSION)" $(MAKENSISOPT)DPIDGIN_PRODUCT_VERSION="$(PIDGIN_PRODUCT_VERSION)" $(MAKENSISOPT)DOFFLINE_INSTALLER $(MAKENSISOPT)DPIDGIN_INSTALL_DIR="$(STRIPPED_RELEASE_DIR)" $(MAKENSISOPT)DGTK_INSTALL_VERSION="$(GTK_INSTALL_VERSION)" pidgin/win32/nsis/pidgin-installer.nsi mv pidgin/win32/nsis/pidgin-$(PIDGIN_VERSION)-offline.exe ./
--- a/configure.ac Sun Feb 28 22:56:50 2010 +0000 +++ b/configure.ac Tue Mar 09 21:41:55 2010 +0000 @@ -2394,6 +2394,30 @@ AC_DEFINE(HAVE_TM_GMTOFF, 1, [Define if you have a tm_gmtoff member in struct tm]) fi +AC_CACHE_CHECK([whether va_lists can be copied by value], ac_cv_va_val_copy,[ + AC_TRY_RUN([#include <stdarg.h> +#include <stdlib.h> + void f (int i, ...) { + va_list args1, args2; + va_start (args1, i); + args2 = args1; + if (va_arg (args2, int) != 42 || va_arg (args1, int) != 42) + exit (1); + va_end (args1); va_end (args2); + } + int main() { + f (0, 42); + return 0; + }], + [ac_cv_va_val_copy=yes], + [ac_cv_va_val_copy=no], + [ac_cv_va_val_copy=yes]) +]) + +if test "x$ac_cv_va_val_copy" = "xno"; then + AC_DEFINE(VA_COPY_AS_ARRAY, 1, ['va_lists' cannot be copied as values]) +fi + dnl ####################################################################### dnl # Check for check dnl ####################################################################### @@ -2583,6 +2607,7 @@ echo Build with Cyrus SASL support. : $enable_cyrus_sasl echo Use kerberos 4 with zephyr.... : $kerberos echo Use external libzephyr........ : $zephyr +echo Use external libgadu.......... : $gadu_libs echo Install pixmaps............... : $enable_pixmaps echo Install translations.......... : $enable_i18n echo Has you....................... : yes
--- a/libpurple/connection.h Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/connection.h Tue Mar 09 21:41:55 2010 +0000 @@ -44,8 +44,9 @@ PURPLE_CONNECTION_NO_FONTSIZE = 0x0020, /**< Connection does not send/receive font sizes */ PURPLE_CONNECTION_NO_URLDESC = 0x0040, /**< Connection does not support descriptions with links */ PURPLE_CONNECTION_NO_IMAGES = 0x0080, /**< Connection does not support sending of images */ - PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100 /**< Connection supports sending and receiving custom smileys */ - + PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY = 0x0100, /**< Connection supports sending and receiving custom smileys */ + PURPLE_CONNECTION_SUPPORT_MOODS = 0x0200, /**< Connection supports setting moods */ + PURPLE_CONNECTION_SUPPORT_MOOD_MESSAGES = 0x0400 /**< Connection supports setting a message on moods */ } PurpleConnectionFlags; typedef enum
--- a/libpurple/ft.c Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/ft.c Tue Mar 09 21:41:55 2010 +0000 @@ -622,7 +622,7 @@ type = purple_xfer_get_type(xfer); account = purple_xfer_get_account(xfer); - purple_debug_misc("xfer", "request accepted for %p\n", xfer); + purple_debug_misc("xfer", "request accepted for %p\n", xfer); if (!filename && type == PURPLE_XFER_RECEIVE) { xfer->status = PURPLE_XFER_STATUS_ACCEPTED; @@ -1128,9 +1128,10 @@ return; } } else if (xfer->type == PURPLE_XFER_SEND) { - size_t result; + size_t result = 0; size_t s = MIN(purple_xfer_get_bytes_remaining(xfer), xfer->current_buffer_size); PurpleXferPrivData *priv = g_hash_table_lookup(xfers_data, xfer); + gboolean read = TRUE; /* this is so the prpl can keep the connection open if it needs to for some odd reason. */ @@ -1142,54 +1143,59 @@ return; } - if (ui_ops && ui_ops->ui_read) { - gssize tmp = ui_ops->ui_read(xfer, &buffer, s); - if (tmp == 0) { - /* - * The UI claimed it was ready, but didn't have any data for - * us... It will call purple_xfer_ui_ready when ready, which - * sets back up this watcher. - */ - if (xfer->watcher != 0) { - purple_input_remove(xfer->watcher); - xfer->watcher = 0; + if (priv->buffer) { + if (priv->buffer->len < s) { + s -= priv->buffer->len; + read = TRUE; + } else { + read = FALSE; + } + } + + if (read) { + if (ui_ops && ui_ops->ui_read) { + gssize tmp = ui_ops->ui_read(xfer, &buffer, s); + if (tmp == 0) { + /* + * The UI claimed it was ready, but didn't have any data for + * us... It will call purple_xfer_ui_ready when ready, which + * sets back up this watcher. + */ + if (xfer->watcher != 0) { + purple_input_remove(xfer->watcher); + xfer->watcher = 0; + } + + /* Need to indicate the prpl is still ready... */ + priv->ready |= PURPLE_XFER_READY_PRPL; + + g_return_if_reached(); + } else if (tmp < 0) { + purple_debug_error("filetransfer", "Unable to read whole buffer.\n"); + purple_xfer_cancel_local(xfer); + return; } - /* Need to indicate the prpl is still ready... */ - priv->ready |= PURPLE_XFER_READY_PRPL; - - /* - * if we requested 0 bytes it's only normal that end up here - * we shouldn't return as we still have something to - * write in priv->buffer - */ - if (s != 0) - g_return_if_reached(); - } else if (tmp < 0) { - purple_debug_error("filetransfer", "Unable to read whole buffer.\n"); - purple_xfer_cancel_local(xfer); - return; - } - - result = tmp; - } else { - buffer = g_malloc0(s); - result = fread(buffer, 1, s, xfer->dest_fp); - if (result != s) { - purple_debug_error("filetransfer", "Unable to read whole buffer.\n"); - purple_xfer_cancel_local(xfer); - g_free(buffer); - return; + result = tmp; + } else { + buffer = g_malloc(s); + result = fread(buffer, 1, s, xfer->dest_fp); + if (result != s) { + purple_debug_error("filetransfer", "Unable to read whole buffer.\n"); + purple_xfer_cancel_local(xfer); + g_free(buffer); + return; + } } } - + if (priv->buffer) { priv->buffer = g_byte_array_append(priv->buffer, buffer, result); g_free(buffer); buffer = priv->buffer->data; result = priv->buffer->len; } - + r = purple_xfer_write(xfer, buffer, result); if (r == -1) { @@ -1204,12 +1210,12 @@ */ purple_xfer_increase_buffer_size(xfer); } else { - if (ui_ops && ui_ops->data_not_sent) - ui_ops->data_not_sent(xfer, buffer + r, result -r); + if (ui_ops && ui_ops->data_not_sent) + ui_ops->data_not_sent(xfer, buffer + r, result - r); } if (priv->buffer) { - /* + /* * Remove what we wrote * If we wrote the whole buffer the byte array will be empty * Otherwise we'll kee what wasn't sent for next time.
--- a/libpurple/log.c Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/log.c Tue Mar 09 21:41:55 2010 +0000 @@ -302,7 +302,7 @@ } } - score = (gint)score_double; + score = (gint) ceil(score_double); g_hash_table_replace(logsize_users_decayed, lu, GINT_TO_POINTER(score)); } return score;
--- a/libpurple/plugins/perl/common/module.h Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/plugins/perl/common/module.h Tue Mar 09 21:41:55 2010 +0000 @@ -9,6 +9,7 @@ #include <glib.h> #ifdef _WIN32 #undef pipe +#undef STRINGIFY #endif #include <EXTERN.h> #include <perl.h>
--- a/libpurple/plugins/perl/perl-common.c Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/plugins/perl/perl-common.c Tue Mar 09 21:41:55 2010 +0000 @@ -472,74 +472,74 @@ } SV * -purple_perl_sv_from_vargs(const PurpleValue *value, va_list args, void ***copy_arg) +purple_perl_sv_from_vargs(const PurpleValue *value, va_list *args, void ***copy_arg) { if (purple_value_is_outgoing(value)) { switch (purple_value_get_type(value)) { case PURPLE_TYPE_SUBTYPE: - if ((*copy_arg = va_arg(args, void **)) == NULL) + if ((*copy_arg = va_arg(*args, void **)) == NULL) return &PL_sv_undef; return purple_perl_sv_from_subtype(value, *(void **)*copy_arg); case PURPLE_TYPE_BOOLEAN: - if ((*copy_arg = (void *)va_arg(args, gboolean *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, gboolean *)) == NULL) return &PL_sv_undef; return newSViv(*(gboolean *)*copy_arg); case PURPLE_TYPE_INT: - if ((*copy_arg = (void *)va_arg(args, int *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, int *)) == NULL) return &PL_sv_undef; return newSViv(*(int *)*copy_arg); case PURPLE_TYPE_UINT: - if ((*copy_arg = (void *)va_arg(args, unsigned int *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, unsigned int *)) == NULL) return &PL_sv_undef; return newSVuv(*(unsigned int *)*copy_arg); case PURPLE_TYPE_LONG: - if ((*copy_arg = (void *)va_arg(args, long *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, long *)) == NULL) return &PL_sv_undef; return newSViv(*(long *)*copy_arg); case PURPLE_TYPE_ULONG: - if ((*copy_arg = (void *)va_arg(args, + if ((*copy_arg = (void *)va_arg(*args, unsigned long *)) == NULL) return &PL_sv_undef; return newSVuv(*(unsigned long *)*copy_arg); case PURPLE_TYPE_INT64: - if ((*copy_arg = (void *)va_arg(args, gint64 *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, gint64 *)) == NULL) return &PL_sv_undef; return newSViv(*(gint64 *)*copy_arg); case PURPLE_TYPE_UINT64: - if ((*copy_arg = (void *)va_arg(args, guint64 *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, guint64 *)) == NULL) return &PL_sv_undef; return newSVuv(*(guint64 *)*copy_arg); case PURPLE_TYPE_STRING: - if ((*copy_arg = (void *)va_arg(args, char **)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, char **)) == NULL) return &PL_sv_undef; return newSVGChar(*(char **)*copy_arg); case PURPLE_TYPE_POINTER: - if ((*copy_arg = va_arg(args, void **)) == NULL) + if ((*copy_arg = va_arg(*args, void **)) == NULL) return &PL_sv_undef; return newSViv((IV)*(void **)*copy_arg); case PURPLE_TYPE_BOXED: /* Uh.. I dunno. Try this? */ - if ((*copy_arg = va_arg(args, void **)) == NULL) + if ((*copy_arg = va_arg(*args, void **)) == NULL) return &PL_sv_undef; return sv_2mortal(purple_perl_bless_object( @@ -553,40 +553,40 @@ } else { switch (purple_value_get_type(value)) { case PURPLE_TYPE_SUBTYPE: - if ((*copy_arg = va_arg(args, void *)) == NULL) + if ((*copy_arg = va_arg(*args, void *)) == NULL) return &PL_sv_undef; return purple_perl_sv_from_subtype(value, *copy_arg); case PURPLE_TYPE_BOOLEAN: - *copy_arg = GINT_TO_POINTER( va_arg(args, gboolean) ); + *copy_arg = GINT_TO_POINTER( va_arg(*args, gboolean) ); return newSViv((gboolean)GPOINTER_TO_INT(*copy_arg)); case PURPLE_TYPE_INT: - *copy_arg = GINT_TO_POINTER( va_arg(args, int) ); + *copy_arg = GINT_TO_POINTER( va_arg(*args, int) ); return newSViv(GPOINTER_TO_INT(*copy_arg)); case PURPLE_TYPE_UINT: - *copy_arg = GUINT_TO_POINTER(va_arg(args, unsigned int)); + *copy_arg = GUINT_TO_POINTER(va_arg(*args, unsigned int)); return newSVuv(GPOINTER_TO_UINT(*copy_arg)); case PURPLE_TYPE_LONG: - *copy_arg = (void *)va_arg(args, long); + *copy_arg = (void *)va_arg(*args, long); return newSViv((long)*copy_arg); case PURPLE_TYPE_ULONG: - *copy_arg = (void *)va_arg(args, unsigned long); + *copy_arg = (void *)va_arg(*args, unsigned long); return newSVuv((unsigned long)*copy_arg); case PURPLE_TYPE_INT64: #if 0 /* XXX This yells and complains. */ - *copy_arg = va_arg(args, gint64); + *copy_arg = va_arg(*args, gint64); return newSViv(*copy_arg); #endif @@ -595,27 +595,27 @@ case PURPLE_TYPE_UINT64: /* XXX This also yells and complains. */ #if 0 - *copy_arg = (void *)va_arg(args, guint64); + *copy_arg = (void *)va_arg(*args, guint64); return newSVuv(*copy_arg); #endif break; case PURPLE_TYPE_STRING: - if ((*copy_arg = (void *)va_arg(args, char *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, char *)) == NULL) return &PL_sv_undef; return newSVGChar((char *)*copy_arg); case PURPLE_TYPE_POINTER: - if ((*copy_arg = (void *)va_arg(args, void *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL) return &PL_sv_undef; return newSViv((IV)*copy_arg); case PURPLE_TYPE_BOXED: /* Uh.. I dunno. Try this? */ - if ((*copy_arg = (void *)va_arg(args, void *)) == NULL) + if ((*copy_arg = (void *)va_arg(*args, void *)) == NULL) return &PL_sv_undef; return sv_2mortal(purple_perl_bless_object(*copy_arg,
--- a/libpurple/plugins/perl/perl-common.h Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/plugins/perl/perl-common.h Tue Mar 09 21:41:55 2010 +0000 @@ -3,6 +3,7 @@ #include <glib.h> #ifdef _WIN32 +#undef STRINGIFY #undef pipe #endif #include <EXTERN.h> @@ -65,7 +66,7 @@ #endif void *purple_perl_data_from_sv(PurpleValue *value, SV *sv); -SV *purple_perl_sv_from_vargs(const PurpleValue *value, va_list args, +SV *purple_perl_sv_from_vargs(const PurpleValue *value, va_list *args, void ***copy_arg); SV *purple_perl_sv_from_fun(PurplePlugin *plugin, SV *callback); #endif /* _PURPLE_PERL_COMMON_H_ */
--- a/libpurple/plugins/perl/perl-handlers.c Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/plugins/perl/perl-handlers.c Tue Mar 09 21:41:55 2010 +0000 @@ -298,7 +298,11 @@ for (i = 0; i < value_count; i++) { sv_args[i] = purple_perl_sv_from_vargs(values[i], - args, +#ifdef VA_COPY_AS_ARRAY + (va_list*)args, +#else + (va_list*)&args, +#endif ©_args[i]); XPUSHs(sv_args[i]);
--- a/libpurple/plugins/ssl/Makefile.mingw Sun Feb 28 22:56:50 2010 +0000 +++ b/libpurple/plugins/ssl/Makefile.mingw Tue Mar 09 21:41:55 2010 +0000 @@ -15,14 +15,16 @@ NEEDED_DLLS = \ $(NSS_TOP)/lib/freebl3.dll \ + $(NSS_TOP)/lib/libnspr4.dll \ + $(NSS_TOP)/lib/libplc4.dll \ + $(NSS_TOP)/lib/libplds4.dll \ $(NSS_TOP)/lib/nss3.dll \ $(NSS_TOP)/lib/nssckbi.dll \ - $(NSS_TOP)/lib/softokn3.dll \ + $(NSS_TOP)/lib/nssutil3.dll \ $(NSS_TOP)/lib/smime3.dll \ - $(NSS_TOP)/lib/ssl3.dll \ - $(NSPR_TOP)/lib/nspr4.dll \ - $(NSPR_TOP)/lib/plc4.dll \