[haiku-commits] haiku: hrev48617 - src/kits/app

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 6 Jan 2015 16:21:12 +0100 (CET)

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) {


Other related posts:

  • » [haiku-commits] haiku: hrev48617 - src/kits/app - pulkomandy