# HG changeset patch # User Marcus Lundblad # Date 1228614048 0 # Node ID 2ad34edb3c808fa5f21704435a250917008511a7 # Parent e1331f6126ba7a958c498b4a1a9bbf4eb6d758c8# Parent 4895879ebafb6da0a840cbeca4e8da6582f59a97 propagate from branch 'im.pidgin.pidgin' (head 196060989ecbfa760153e43530294b78f8999df6) to branch 'im.pidgin.cpw.malu.xmpp.attention' (head 1147298dc3e1f508d2c2ad981e419c2ef81a3512) diff -r e1331f6126ba -r 2ad34edb3c80 COPYRIGHT --- a/COPYRIGHT Sun Dec 07 01:38:29 2008 +0000 +++ b/COPYRIGHT Sun Dec 07 01:40:48 2008 +0000 @@ -418,6 +418,7 @@ Brian Tarricone Peter Teichman Philip Tellis +Michael Terry Arun A. Tharuvai Cestonaro Thilo Will Thompson diff -r e1331f6126ba -r 2ad34edb3c80 ChangeLog --- a/ChangeLog Sun Dec 07 01:38:29 2008 +0000 +++ b/ChangeLog Sun Dec 07 01:40:48 2008 +0000 @@ -8,7 +8,6 @@ --with-system-ssl-certs and GnuTLS need to include these in the system certs directory. * Corrected maximum message lengths for Yahoo! - * Enable auto-reply on Zephyr, to emulate 'zaway' (Toby Schaffer) * The Buddy State Notification plugin no longer prints duplicate notifications when the same buddy is in multiple groups (Florian Quèze) * The Buddy State Notification plugin no longer turns JID's, MSN Passport @@ -19,10 +18,12 @@ * Various fixes to the nullprpl (Paul Aurich) * Fix a crash when accessing the roomlist for an account that's not connected (Paul Aurich) + * Fix a crash in purple_accounts_delete that happens when this function is + called before the buddy list is initialized (Florian Quèze) Gadu-Gadu: * Fix some problems with Gadu-Gadu buddy icons (Adam Strzelecki) - * Gadu-Gadu now validates that UID's are valid (Adam Strzelecki) + * Gadu-Gadu now checks that UID's are valid (Adam Strzelecki) * Gadu-Gadu now does proper charset translations where needed (Adam Strzelecki) @@ -38,6 +39,13 @@ * Send "client-accepts-full-bind-result" attribute during SASL login. This will fix Google Talk login failures if the user configures the wrong domain for his/her account. + + Zephyr: + * Enable auto-reply, to emulate 'zaway' (Toby Schaffer) + * Fix a crash when an account is configured to use tzc but tzc is not + installed or the configured tzc command is invalid (Michael Terry) + * Fix a 10 second delay waiting on tzc if it is not installed or the + configured command is invalid (Michael Terry) Pidgin: * On GTK+ 2.14 and higher, we're using the gtk-tooltip-delay setting diff -r e1331f6126ba -r 2ad34edb3c80 libpurple/account.c --- a/libpurple/account.c Sun Dec 07 01:38:29 2008 +0000 +++ b/libpurple/account.c Sun Dec 07 01:40:48 2008 +0000 @@ -2499,7 +2499,7 @@ purple_accounts_remove(account); /* Remove this account's buddies */ - for (gnode = purple_get_blist()->root; gnode != NULL; gnode = gnode->next) { + for (gnode = purple_blist_get_root(); gnode != NULL; gnode = gnode->next) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; diff -r e1331f6126ba -r 2ad34edb3c80 libpurple/protocols/zephyr/zephyr.c --- a/libpurple/protocols/zephyr/zephyr.c Sun Dec 07 01:38:29 2008 +0000 +++ b/libpurple/protocols/zephyr/zephyr.c Sun Dec 07 01:40:48 2008 +0000 @@ -1607,27 +1607,21 @@ gboolean found_ps = FALSE; gchar ** tzc_cmd_array = g_strsplit(purple_account_get_string(gc->account,"tzc_command","/usr/bin/tzc -e %s")," ",0); if (close(1) == -1) { - purple_debug_error("zephyr", "stdout couldn't be closed. dying\n"); exit(-1); } if (dup2(zephyr->fromtzc[1], 1) == -1) { - purple_debug_error("zephyr", "dup2 of stdout failed \n"); exit(-1); } if (close(zephyr->fromtzc[1]) == -1) { - purple_debug_error("zephyr", "closing of piped stdout failed\n"); exit(-1); } if (close(0) == -1) { - purple_debug_error("zephyr", "stdin couldn't be closed. dying\n"); exit(-1); } if (dup2(zephyr->totzc[0], 0) == -1) { - purple_debug_error("zephyr", "dup2 of stdin failed \n"); exit(-1); } if (close(zephyr->totzc[0]) == -1) { - purple_debug_error("zephyr", "closing of piped stdin failed\n"); exit(-1); } /* tzc_command should really be of the form @@ -1651,11 +1645,11 @@ } if (!found_ps) { - purple_connection_error(gc,"Tzc command needs %s to set the exposure\n"); - return; + exit(-1); } execvp(tzc_cmd_array[0], tzc_cmd_array); + exit(-1); } else { fd_set rfds; @@ -1667,6 +1661,7 @@ int parenlevel=0; char* tempstr; int tempstridx; + int select_status; zephyr->tzc_pid = pid; /* wait till we have data to read from ssh */ @@ -1678,11 +1673,19 @@ purple_debug_info("zephyr", "about to read from tzc\n"); - select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, NULL); + if (waitpid(pid, NULL, WNOHANG) == 0) { // Only select if tzc is still running + purple_debug_info("zephyr", "about to read from tzc\n"); + select_status = select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, NULL); + } + else { + purple_debug_info("zephyr", "tzc exited early\n"); + select_status = -1; + } FD_ZERO(&rfds); FD_SET(zephyr->fromtzc[ZEPHYR_FD_READ], &rfds); - while (select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, &tv)) { + while (select_status > 0 && + select(zephyr->fromtzc[ZEPHYR_FD_READ] + 1, &rfds, NULL, NULL, &tv) > 0) { read(zephyr->fromtzc[ZEPHYR_FD_READ], bufcur, 1); bufcur++; if ((bufcur - buf) > (bufsize - 1)) {