diff --git a/android/avctp.c b/android/avctp.c
index 2271d2c..4556ceb 100644
--- a/android/avctp.c
+++ b/android/avctp.c
goto send;
}
- packet_size += handler->cb(session, avctp->transaction,
- operands, operand_count,
- handler->user_data);
+ ret = handler->cb(session, avctp->transaction, operands, operand_count,
+ handler->user_data);
+ if (ret < 0) {
+ if (ret == -EAGAIN)
+ return TRUE;
+ goto failed;
+ }
+
+ packet_size += ret;
send:
if (packet_size != 0) {
diff --git a/android/avctp.h b/android/avctp.h
index 6bfc4cb..b395188 100644
--- a/android/avctp.h
+++ b/android/avctp.h
typedef gboolean (*avctp_browsing_rsp_cb) (struct avctp *session,
uint8_t *operands, size_t operand_count,
void *user_data);
-typedef size_t (*avctp_browsing_pdu_cb) (struct avctp *session,
+typedef ssize_t (*avctp_browsing_pdu_cb) (struct avctp *session,
uint8_t transaction,
uint8_t *operands, size_t operand_count,
void *user_data);