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.
This commit is contained in:
+19
-10
@@ -1311,19 +1311,28 @@ BMessage::Unflatten(BDataIO* stream)
|
|||||||
|
|
||||||
what = fHeader->what;
|
what = fHeader->what;
|
||||||
|
|
||||||
fHeader->message_area = -1;
|
if ((fHeader->flags & MESSAGE_FLAG_PASS_BY_AREA) != 0
|
||||||
|
&& fHeader->message_area >= 0) {
|
||||||
if (fHeader->field_count > 0) {
|
status_t result = _Reference();
|
||||||
ssize_t fieldsSize = fHeader->field_count * sizeof(field_header);
|
if (result != B_OK) {
|
||||||
fFields = (field_header*)malloc(fieldsSize);
|
|
||||||
if (fFields == NULL) {
|
|
||||||
_InitHeader();
|
_InitHeader();
|
||||||
return B_NO_MEMORY;
|
return result;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
fHeader->message_area = -1;
|
||||||
|
|
||||||
result = stream->Read(fFields, fieldsSize);
|
if (fHeader->field_count > 0) {
|
||||||
if (result != fieldsSize)
|
ssize_t fieldsSize = fHeader->field_count * sizeof(field_header);
|
||||||
return result < 0 ? result : B_BAD_VALUE;
|
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) {
|
if (fHeader->data_size > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user