diff options
Diffstat (limited to 'epan/tvbuff.c')
-rw-r--r-- | epan/tvbuff.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/epan/tvbuff.c b/epan/tvbuff.c index 197ba7e754..c56b1d511a 100644 --- a/epan/tvbuff.c +++ b/epan/tvbuff.c @@ -1674,7 +1674,10 @@ tvb_get_bits_buf(tvbuff_t *tvb, gint bit_offset, gint no_of_bits, guint8 *buf, g offset++; value = ((value & bit_mask) << 8) | tvb_get_guint8(tvb, offset); - *buf++ = (guint8) (value >> bit_shift); + if (lsb0) + *buf++ = (guint8) (GUINT16_SWAP_LE_BE(value) >> bit_shift); + else + *buf++ = (guint8) (value >> bit_shift); no_of_bits -= 8; } @@ -1689,11 +1692,13 @@ tvb_get_bits_buf(tvbuff_t *tvb, gint bit_offset, gint no_of_bits, guint8 *buf, g } if (lsb0) { - value = (value >> bit_offset) & (bit_mask8[8-no_of_bits]); + if (tot_no_bits > 8) + value = (GUINT16_SWAP_LE_BE(value) >> bit_offset) & (bit_mask8[8-no_of_bits]); + else + value = (value >> bit_offset) & (bit_mask8[8-no_of_bits]); /* value = (value & ((1 << tot_no_bits)-1)) >> bit_offset; */ - } else { if (tot_no_bits > 8) value = value >> (16 - tot_no_bits); |