Use swap_data() when unflattening a swapped message. It fits this purpose perfectly as it does conversion based on the type code. Now known type like B_INT32_TYPE will get swapped automatically.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21913 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -594,25 +594,13 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
|
|||||||
if (fixedSize)
|
if (fixedSize)
|
||||||
itemSize = dataSize / itemCount;
|
itemSize = dataSize / itemCount;
|
||||||
|
|
||||||
if (fixedSize) {
|
if (format == MESSAGE_FORMAT_R5) {
|
||||||
for (int32 i = 0; i < itemCount; i++) {
|
for (int32 i = 0; i < itemCount; i++) {
|
||||||
// ToDo: what if we are swapped? need B_INT32_TYPEs and the
|
if (!fixedSize) {
|
||||||
// like be swapped here?
|
itemSize = *(ssize_t *)pointer;
|
||||||
result = into->AddData(nameBuffer, type, pointer, itemSize,
|
pointer += sizeof(ssize_t);
|
||||||
fixedSize, itemCount);
|
|
||||||
|
|
||||||
if (result < B_OK) {
|
|
||||||
free(buffer);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer += itemSize;
|
|
||||||
}
|
|
||||||
} else if (format == MESSAGE_FORMAT_R5_SWAPPED) {
|
|
||||||
for (int32 i = 0; i < itemCount; i++) {
|
|
||||||
itemSize = __swap_int32(*(ssize_t *)pointer);
|
|
||||||
pointer += sizeof(ssize_t);
|
|
||||||
|
|
||||||
result = into->AddData(nameBuffer, type, pointer, itemSize,
|
result = into->AddData(nameBuffer, type, pointer, itemSize,
|
||||||
fixedSize, itemCount);
|
fixedSize, itemCount);
|
||||||
|
|
||||||
@@ -621,13 +609,19 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t);
|
if (fixedSize)
|
||||||
|
pointer += itemSize;
|
||||||
|
else
|
||||||
|
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int32 i = 0; i < itemCount; i++) {
|
for (int32 i = 0; i < itemCount; i++) {
|
||||||
itemSize = *(ssize_t *)pointer;
|
if (!fixedSize) {
|
||||||
pointer += sizeof(ssize_t);
|
itemSize = __swap_int32(*(ssize_t *)pointer);
|
||||||
|
pointer += sizeof(ssize_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
swap_data(type, pointer, itemSize, B_SWAP_ALWAYS);
|
||||||
result = into->AddData(nameBuffer, type, pointer, itemSize,
|
result = into->AddData(nameBuffer, type, pointer, itemSize,
|
||||||
fixedSize, itemCount);
|
fixedSize, itemCount);
|
||||||
|
|
||||||
@@ -636,7 +630,10 @@ MessageAdapter::_UnflattenR5Message(uint32 format, BMessage *into,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t);
|
if (fixedSize)
|
||||||
|
pointer += itemSize;
|
||||||
|
else
|
||||||
|
pointer += pad_to_8(itemSize + sizeof(ssize_t)) - sizeof(ssize_t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user