Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 40 additions & 12 deletions pstop_c/pstop/src/pstop/endian.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
uint16_t
read_uint16_le(const uint8_t *data, size_t *pos)
{
const uint16_t *bytes = (const uint16_t *)(data + *pos);
const uint8_t *bytes = data + *pos;
*pos = *pos + 2U;
return *bytes;
uint16_t b0 = (uint16_t)bytes[0];
uint16_t b1 = (uint16_t)bytes[1];
uint16_t val = (uint16_t)(b0 | (b1 << 8U));
return val;
}

uint16_t
Expand All @@ -25,9 +28,14 @@ read_uint16_be(const uint8_t *data, size_t *pos)
uint32_t
read_uint32_le(const uint8_t *data, size_t *pos)
{
const uint32_t *bytes = (const uint32_t *)(data + *pos);
const uint8_t *bytes = data + *pos;
*pos = *pos + 4U;
return *bytes;
uint32_t b0 = (uint32_t)bytes[0];
uint32_t b1 = (uint32_t)bytes[1];
uint32_t b2 = (uint32_t)bytes[2];
uint32_t b3 = (uint32_t)bytes[3];
uint32_t val = b0 | (b1 << 8U) | (b2 << 16U) | (b3 << 24U);
return val;
}

uint32_t
Expand All @@ -46,9 +54,18 @@ read_uint32_be(const uint8_t *data, size_t *pos)
uint64_t
read_uint64_le(const uint8_t *data, size_t *pos)
{
const uint64_t *bytes = (const uint64_t *)(data + *pos);
const uint8_t *bytes = data + *pos;
*pos = *pos + 8U;
return *bytes;
uint64_t b0 = (uint64_t)bytes[0];
uint64_t b1 = (uint64_t)bytes[1];
uint64_t b2 = (uint64_t)bytes[2];
uint64_t b3 = (uint64_t)bytes[3];
uint64_t b4 = (uint64_t)bytes[4];
uint64_t b5 = (uint64_t)bytes[5];
uint64_t b6 = (uint64_t)bytes[6];
uint64_t b7 = (uint64_t)bytes[7];
uint64_t val = b0 | (b1 << 8U) | (b2 << 16U) | (b3 << 24U) | (b4 << 32U) | (b5 << 40U) | (b6 << 48U) | (b7 << 56U);
return val;
}

uint64_t
Expand All @@ -71,9 +88,10 @@ read_uint64_be(const uint8_t *data, size_t *pos)
void
write_uint16_le(uint16_t value, uint8_t *data, size_t *pos)
{
uint16_t *bytes = (uint16_t *)(data + *pos);
uint8_t *bytes = data + *pos;
*pos = *pos + 2U;
*bytes = value;
bytes[0] = (uint8_t)(value & 0xFFU);
bytes[1] = (uint8_t)((value >> 8U) & 0xFFU);
}

void
Expand All @@ -88,9 +106,12 @@ write_uint16_be(uint16_t value, uint8_t *data, size_t *pos)
void
write_uint32_le(uint32_t value, uint8_t *data, size_t *pos)
{
uint32_t *bytes = (uint32_t *)(data + *pos);
uint8_t *bytes = data + *pos;
*pos = *pos + 4U;
*bytes = value;
bytes[0] = (uint8_t)(value & 0xFFU);
bytes[1] = (uint8_t)((value >> 8U) & 0xFFU);
bytes[2] = (uint8_t)((value >> 16U) & 0xFFU);
bytes[3] = (uint8_t)((value >> 24U) & 0xFFU);
}

void
Expand All @@ -107,9 +128,16 @@ write_uint32_be(uint32_t value, uint8_t *data, size_t *pos)
void
write_uint64_le(uint64_t value, uint8_t *data, size_t *pos)
{
uint64_t *bytes = (uint64_t *)(data + *pos);
uint8_t *bytes = data + *pos;
*pos = *pos + 8U;
*bytes = value;
bytes[0] = (uint8_t)(value & 0xFFU);
bytes[1] = (uint8_t)((value >> 8U) & 0xFFU);
bytes[2] = (uint8_t)((value >> 16U) & 0xFFU);
bytes[3] = (uint8_t)((value >> 24U) & 0xFFU);
bytes[4] = (uint8_t)((value >> 32U) & 0xFFU);
bytes[5] = (uint8_t)((value >> 40U) & 0xFFU);
bytes[6] = (uint8_t)((value >> 48U) & 0xFFU);
bytes[7] = (uint8_t)((value >> 56U) & 0xFFU);
}

void
Expand Down
Loading