--- a/libpurple/xfer.c Tue Jul 02 03:07:40 2019 -0500 +++ b/libpurple/xfer.c Thu Jul 04 20:38:04 2019 -0500 @@ -1089,15 +1089,6 @@ r = -1; } - if (r >= 0 && (gsize)r == priv->current_buffer_size) { - /* - * We managed to read the entire buffer. This means our - * network is fast and our buffer is too small, so make it - * bigger. - */ - purple_xfer_increase_buffer_size(xfer); - } - return r; } @@ -1107,6 +1098,7 @@ PurpleXferPrivate *priv = NULL; PurpleXferClass *klass = NULL; gsize s; + gssize r; g_return_val_if_fail(PURPLE_IS_XFER(xfer), 0); g_return_val_if_fail(buffer != NULL, 0); @@ -1124,10 +1116,21 @@ klass = PURPLE_XFER_GET_CLASS(xfer); if(klass && klass->read) { - return klass->read(xfer, buffer, s); + r = klass->read(xfer, buffer, s); + } else { + r = do_read(xfer, buffer, s); } - return do_read(xfer, buffer, s); + if (r >= 0 && (gsize)r == priv->current_buffer_size) { + /* + * We managed to read the entire buffer. This means our + * network is fast and our buffer is too small, so make it + * bigger. + */ + purple_xfer_increase_buffer_size(xfer); + } + + return r; } static gssize