Fix tvb_get_bits_buf for LSB.
authorJakub Zawadzki <darkjames-ws@darkjames.pl>
Wed, 18 May 2011 21:33:05 +0000 (21:33 -0000)
committerJakub Zawadzki <darkjames-ws@darkjames.pl>
Wed, 18 May 2011 21:33:05 +0000 (21:33 -0000)
svn path=/trunk/; revision=37264

epan/tvbuff.c

index 197ba7e754761811d33053222a85b3852954c427..c56b1d511a7ef2948a97a9026c79980178b3eafb 100644 (file)
@@ -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);