summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-16 14:50:07 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-11-16 14:50:07 -0800
commitb6e0f2e1c32930b10403d26d39e71225573bcba9 (patch)
tree74990218a65c973fc506adf2eaff2ca4f3bb7065
parent66300d59661c94bd54a5ff5eff83f20c3217d99d (diff)
downloadopenocd_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.h6
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) |