aboutsummaryrefslogtreecommitdiffstats
path: root/epan/tvbuff.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2011-05-18 21:33:05 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2011-05-18 21:33:05 +0000
commit7e3bbb27847beda44c4739ddae01ba5b9cf6d776 (patch)
treef1968f17b2a8ccc1090eff81a38d625a59ae0a3e /epan/tvbuff.c
parent11af835982140931eaef82c814568fc82e68247d (diff)
Fix tvb_get_bits_buf for LSB.
svn path=/trunk/; revision=37264
Diffstat (limited to 'epan/tvbuff.c')
-rw-r--r--epan/tvbuff.c11
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);