hrev48617 adds 1 changeset to branch 'master' old head: 29b7900ec85646d7e3cf3356d234369c6084d038 new head: 1bfcb75b292142bbbd2ac65a5e90d194bfdbe0f8 overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=1bfcb75+%5E29b7900 ---------------------------------------------------------------------------- 1bfcb75: BMessage: fix passing messages by area I missed the fact that the BDataIO based Unflatten didn't handle this. Restore the code from the recently removed buffer-based unflatten, so it's possible to pass a message by area again. [ Adrien Destugues <pulkomandy@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev48617 Commit: 1bfcb75b292142bbbd2ac65a5e90d194bfdbe0f8 URL: http://cgit.haiku-os.org/haiku/commit/?id=1bfcb75 Author: Adrien Destugues <pulkomandy@xxxxxxxxx> Date: Tue Jan 6 15:18:34 2015 UTC ---------------------------------------------------------------------------- 1 file changed, 19 insertions(+), 10 deletions(-) src/kits/app/Message.cpp | 29 +++++++++++++++++++---------- ---------------------------------------------------------------------------- diff --git a/src/kits/app/Message.cpp b/src/kits/app/Message.cpp index c6992cd..4b6708d 100644 --- a/src/kits/app/Message.cpp +++ b/src/kits/app/Message.cpp @@ -1311,19 +1311,28 @@ BMessage::Unflatten(BDataIO* stream) what = fHeader->what; - fHeader->message_area = -1; - - if (fHeader->field_count > 0) { - ssize_t fieldsSize = fHeader->field_count * sizeof(field_header); - fFields = (field_header*)malloc(fieldsSize); - if (fFields == NULL) { + if ((fHeader->flags & MESSAGE_FLAG_PASS_BY_AREA) != 0 + && fHeader->message_area >= 0) { + status_t result = _Reference(); + if (result != B_OK) { _InitHeader(); - return B_NO_MEMORY; + return result; } + } else { + fHeader->message_area = -1; - result = stream->Read(fFields, fieldsSize); - if (result != fieldsSize) - return result < 0 ? result : B_BAD_VALUE; + if (fHeader->field_count > 0) { + ssize_t fieldsSize = fHeader->field_count * sizeof(field_header); + fFields = (field_header*)malloc(fieldsSize); + if (fFields == NULL) { + _InitHeader(); + return B_NO_MEMORY; + } + + result = stream->Read(fFields, fieldsSize); + if (result != fieldsSize) + return result < 0 ? result : B_BAD_VALUE; + } } if (fHeader->data_size > 0) {