diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c
index e0435f2..e37c30b 100644
--- a/obexd/client/transfer.c
+++ b/obexd/client/transfer.c
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 &&