|
@@ -93,14 +93,22 @@ static int8_t ReadRawByte(GPBCodedInputStreamState *state) {
|
|
|
|
|
|
static int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
|
|
static int32_t ReadRawLittleEndian32(GPBCodedInputStreamState *state) {
|
|
CheckSize(state, sizeof(int32_t));
|
|
CheckSize(state, sizeof(int32_t));
|
|
- int32_t value = OSReadLittleInt32(state->bytes, state->bufferPos);
|
|
|
|
|
|
+ // Not using OSReadLittleInt32 because it has undocumented dependency
|
|
|
|
+ // on reads being aligned.
|
|
|
|
+ int32_t value;
|
|
|
|
+ memcpy(&value, state->bytes + state->bufferPos, sizeof(int32_t));
|
|
|
|
+ value = OSSwapLittleToHostInt32(value);
|
|
state->bufferPos += sizeof(int32_t);
|
|
state->bufferPos += sizeof(int32_t);
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|
|
|
|
|
|
static int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
|
|
static int64_t ReadRawLittleEndian64(GPBCodedInputStreamState *state) {
|
|
CheckSize(state, sizeof(int64_t));
|
|
CheckSize(state, sizeof(int64_t));
|
|
- int64_t value = OSReadLittleInt64(state->bytes, state->bufferPos);
|
|
|
|
|
|
+ // Not using OSReadLittleInt64 because it has undocumented dependency
|
|
|
|
+ // on reads being aligned.
|
|
|
|
+ int64_t value;
|
|
|
|
+ memcpy(&value, state->bytes + state->bufferPos, sizeof(int64_t));
|
|
|
|
+ value = OSSwapLittleToHostInt64(value);
|
|
state->bufferPos += sizeof(int64_t);
|
|
state->bufferPos += sizeof(int64_t);
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|