diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c
index b85f2fb..e0435f2 100644
--- a/obexd/client/transfer.c
+++ b/obexd/client/transfer.c
{
struct session_data *session = transfer->session;
+ DBG("%p", transfer);
+
if (transfer->xfer) {
gw_obex_xfer_close(transfer->xfer, NULL);
gw_obex_xfer_free(transfer->xfer);
return NULL;
}
- DBG("Transfer(%p) registered %s", transfer, transfer->path);
-
done:
+ DBG("%p registered %s", transfer, transfer->path);
+
session->pending = g_slist_append(session->pending, transfer);
return transfer;
if (transfer->path) {
g_dbus_unregister_interface(session->conn,
transfer->path, TRANSFER_INTERFACE);
-
- DBG("Transfer(%p) unregistered %s", transfer,
- transfer->path);
}
+ DBG("%p unregistered %s", transfer, transfer->path);
+
transfer_free(transfer);
}
if (gw_obex_xfer_read(xfer, transfer->buffer + transfer->filled,
bsize, &bread, &transfer->err) == FALSE)
- goto done;
+ goto fail;
transfer->filled += bread;
if (gw_obex_xfer_object_done(xfer)) {
- if (transfer->buffer[transfer->filled - 1] == '\0')
+ if (transfer->filled > 0 &&
+ transfer->buffer[transfer->filled - 1] == '\0')
goto done;
bsize = transfer->buffer_len - transfer->filled;
done:
transfer->size = strlen(transfer->buffer);
+fail:
if (callback)
callback->func(transfer, transfer->size, transfer->err,
callback->data);
if (transfer->xfer != NULL)
return -EALREADY;
- if (g_strcmp0(transfer->type, "x-bt/vcard-listing") == 0 ||
- g_strcmp0(transfer->type, "x-bt/phonebook") == 0 ||
- g_strcmp0(transfer->type, "x-obex/folder-listing") == 0)
+ if (transfer->type != NULL &&
+ (strncmp(transfer->type, "x-obex/", 7) == 0 ||
+ strncmp(transfer->type, "x-bt/", 5) == 0))
cb = get_xfer_listing_progress;
else {
int fd = open(transfer->name ? : transfer->filename,