From 15130f0c06e143e77e7fa9a22c3080e5449fc2ac Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 14 Jul 2010 17:13:36 +0300 Subject: [PATCH] obexd: fix not reading all buffered data --- obexd/client/transfer.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c index e0435f219..e37c30b8e 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c @@ -235,19 +235,26 @@ static void get_xfer_listing_progress(GwObexXfer *xfer, struct transfer_callback *callback = transfer->callback; gint bsize, bread; - bsize = transfer->buffer_len - transfer->filled; + do { + bsize = transfer->buffer_len - transfer->filled; - if (bsize < DEFAULT_BUFFER_SIZE) { - transfer->buffer_len += DEFAULT_BUFFER_SIZE; - transfer->buffer = g_realloc(transfer->buffer, transfer->buffer_len); - bsize += DEFAULT_BUFFER_SIZE; - } + if (bsize < DEFAULT_BUFFER_SIZE) { + transfer->buffer_len += DEFAULT_BUFFER_SIZE; + transfer->buffer = g_realloc(transfer->buffer, transfer->buffer_len); + bsize += DEFAULT_BUFFER_SIZE; + } - if (gw_obex_xfer_read(xfer, transfer->buffer + transfer->filled, - bsize, &bread, &transfer->err) == FALSE) - goto fail; + if (gw_obex_xfer_read(xfer, transfer->buffer + transfer->filled, + bsize, &bread, &transfer->err) == FALSE) { + if (transfer->err == GW_OBEX_ERROR_NO_DATA) { + transfer->err = 0; + break; + } else + goto fail; + } - transfer->filled += bread; + transfer->filled += bread; + } while (bread != 0); if (gw_obex_xfer_object_done(xfer)) { if (transfer->filled > 0 && -- 2.47.3