From b6e0f2e1c32930b10403d26d39e71225573bcba9 Mon Sep 17 00:00:00 2001 From: David Brownell Date: Mon, 16 Nov 2009 14:50:07 -0800 Subject: binarybuffer: regression fix The "improve inline binarybuffer helpers" mis-handled bytes with the high bit set; treat them as unsigned, not signed. Signed-off-by: David Brownell --- src/helper/binarybuffer.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/helper/binarybuffer.h b/src/helper/binarybuffer.h index 460d0178..6275eaf1 100644 --- a/src/helper/binarybuffer.h +++ b/src/helper/binarybuffer.h @@ -41,7 +41,8 @@ static inline void buf_set_u32(void *_buffer, unsigned first, unsigned num, uint32_t value) { - char *buffer = (char *)_buffer; + uint8_t *buffer = (uint8_t *)_buffer; + if ((num == 32) && (first == 0)) { buffer[3] = (value >> 24) & 0xff; buffer[2] = (value >> 16) & 0xff; @@ -69,7 +70,8 @@ static inline void buf_set_u32(void *_buffer, static inline uint32_t buf_get_u32(const void *_buffer, unsigned first, unsigned num) { - char *buffer = (char *)_buffer; + uint8_t *buffer = (uint8_t *)_buffer; + if ((num == 32) && (first == 0)) { return (((uint32_t)buffer[3]) << 24) | (((uint32_t)buffer[2]) << 16) | -- cgit v1.2.3