diff options
author | Paul Aurich <darkrain42@pidgin.im> | 2010-03-05 22:20:00 +0000 |
---|---|---|
committer | Paul Aurich <darkrain42@pidgin.im> | 2010-03-05 22:20:00 +0000 |
commit | a57b617125e2175ec95215c0dbfc289a397274e2 (patch) | |
tree | dcaec07e99fbb3819f31be5c585e0481601bd490 | |
parent | e39396362ed8eda6dd79f05799e19d4fa2d66377 (diff) | |
download | pidgin-a57b617125e2175ec95215c0dbfc289a397274e2.tar.gz |
ft: Apply QuLogic's fix from d6b03d30f4 to the UI side too.
-rw-r--r-- | libpurple/ft.c | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/libpurple/ft.c b/libpurple/ft.c index dd5d31c8b8..a6a98d9fe5 100644 --- a/libpurple/ft.c +++ b/libpurple/ft.c @@ -1088,6 +1088,7 @@ do_transfer(PurpleXfer *xfer) 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. */ @@ -1099,41 +1100,41 @@ do_transfer(PurpleXfer *xfer) 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; - } - - /* 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; + if (priv->buffer) { + if (priv->buffer->len < s) { + s -= priv->buffer->len; + read = TRUE; + } else { + read = FALSE; } + } - result = tmp; - } else { - gboolean read = TRUE; - 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; } - } - if (read) { + + result = tmp; + } else { buffer = g_malloc(s); result = fread(buffer, 1, s, xfer->dest_fp); if (result != s) { |