# HG changeset patch # User Paul Aurich # Date 1250136313 0 # Node ID e30de9ebfa69098178ccb1694b2c472621f7f61a # Parent c93ed4d7cabe96f46c153c174edf409db20ff8fd ft: Set completion (for receiving) *after* writing the file. kenshin in #pidgin correctly pointed out this could have falsely failed to write all the data to the file and still declared the transfer "Complete". diff -r c93ed4d7cabe -r e30de9ebfa69 libpurple/ft.c --- a/libpurple/ft.c Thu Aug 13 03:28:38 2009 +0000 +++ b/libpurple/ft.c Thu Aug 13 04:05:13 2009 +0000 @@ -926,9 +926,6 @@ if (xfer->ops.read != NULL) { r = (xfer->ops.read)(buffer, xfer); - if ((purple_xfer_get_size(xfer) > 0) && - ((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer))) - purple_xfer_set_completed(xfer, TRUE); } else { *buffer = g_malloc0(s); @@ -938,9 +935,6 @@ r = 0; else if (r < 0) r = -1; - else if ((purple_xfer_get_size(xfer) > 0) && - ((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer))) - purple_xfer_set_completed(xfer, TRUE); else if (r == 0) r = -1; } @@ -1004,6 +998,10 @@ g_free(buffer); return; } + + if ((purple_xfer_get_size(xfer) > 0) && + ((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer))) + purple_xfer_set_completed(xfer, TRUE); } else if(r < 0) { purple_xfer_cancel_remote(xfer); g_free(buffer);