binarybuffer: regression fix
authorDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 16 Nov 2009 22:50:07 +0000 (14:50 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 16 Nov 2009 22:50:07 +0000 (14:50 -0800)
The "improve inline binarybuffer helpers" mis-handled bytes
with the high bit set; treat them as unsigned, not signed.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
src/helper/binarybuffer.h

index 460d0178ad17a1ef8e9176e47818d81f7320508e..6275eaf1e9d1f56ba1521f599a55619748738c63 100644 (file)
@@ -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) |