libbe: Fix MessageAdapter on x86-64.

When unflattening an R5 formatted message, explicitly use int32 rather
than ssize_t, since the latter's size differs by architecture.
This commit is contained in:
Rene Gollent
2013-07-28 21:29:25 -04:00
parent 293d5b1ede
commit 998b880a61
+8 -8
View File
@@ -571,7 +571,7 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
} else } else
itemCount = 1; itemCount = 1;
ssize_t dataSize; int32 dataSize;
if (miniData) { if (miniData) {
uint8 miniSize; uint8 miniSize;
reader(miniSize); reader(miniSize);
@@ -595,15 +595,15 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
reader(buffer, dataSize); reader(buffer, dataSize);
status_t result = B_OK; status_t result = B_OK;
ssize_t itemSize = 0; int32 itemSize = 0;
if (fixedSize) if (fixedSize)
itemSize = dataSize / itemCount; itemSize = dataSize / itemCount;
if (format == MESSAGE_FORMAT_R5) { if (format == MESSAGE_FORMAT_R5) {
for (int32 i = 0; i < itemCount; i++) { for (int32 i = 0; i < itemCount; i++) {
if (!fixedSize) { if (!fixedSize) {
itemSize = *(ssize_t *)pointer; itemSize = *(int32 *)pointer;
pointer += sizeof(ssize_t); pointer += sizeof(int32);
} }
result = into->AddData(nameBuffer, type, pointer, itemSize, result = into->AddData(nameBuffer, type, pointer, itemSize,
@@ -617,13 +617,13 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
if (fixedSize) if (fixedSize)
pointer += itemSize; pointer += itemSize;
else else
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t); pointer += pad_to_8(itemSize + sizeof(int32)) - sizeof(int32);
} }
} else { } else {
for (int32 i = 0; i < itemCount; i++) { for (int32 i = 0; i < itemCount; i++) {
if (!fixedSize) { if (!fixedSize) {
itemSize = __swap_int32(*(ssize_t *)pointer); itemSize = __swap_int32(*(int32 *)pointer);
pointer += sizeof(ssize_t); pointer += sizeof(int32);
} }
swap_data(type, pointer, itemSize, B_SWAP_ALWAYS); swap_data(type, pointer, itemSize, B_SWAP_ALWAYS);
@@ -638,7 +638,7 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
if (fixedSize) if (fixedSize)
pointer += itemSize; pointer += itemSize;
else else
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t); pointer += pad_to_8(itemSize + sizeof(int32)) - sizeof(int32);
} }
} }