diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-16 14:50:07 -0800 |
---|---|---|
committer | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-16 14:50:07 -0800 |
commit | b6e0f2e1c32930b10403d26d39e71225573bcba9 (patch) | |
tree | 74990218a65c973fc506adf2eaff2ca4f3bb7065 | |
parent | 66300d59661c94bd54a5ff5eff83f20c3217d99d (diff) | |
download | openocd_libswd-b6e0f2e1c32930b10403d26d39e71225573bcba9.tar.gz openocd_libswd-b6e0f2e1c32930b10403d26d39e71225573bcba9.tar.bz2 openocd_libswd-b6e0f2e1c32930b10403d26d39e71225573bcba9.tar.xz openocd_libswd-b6e0f2e1c32930b10403d26d39e71225573bcba9.zip |
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 <dbrownell@users.sourceforge.net>
-rw-r--r-- | src/helper/binarybuffer.h | 6 |
1 files 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) | |