aboutsummaryrefslogtreecommitdiffstats
path: root/epan/tvbuff.c
diff options
context:
space:
mode:
authorFilipe Laíns <lains@archlinux.org>2020-07-24 17:12:19 +0100
committerAnders Broman <a.broman58@gmail.com>2020-08-21 03:38:45 +0000
commite59b3c23381f8f79a3d950e8509b6f84b2956ce7 (patch)
tree2fdb166349a9a097358272e3979fd75bfa9b8275 /epan/tvbuff.c
parentbd7d0742db79d5db84cdabe412484e65ed98c1d7 (diff)
tvb: add tvb_get_bits_array
Change-Id: I2fad824ca417dcd089fabfdf06f28529c7ee9e87 Signed-off-by: Filipe Laíns <lains@archlinux.org> Reviewed-on: https://code.wireshark.org/review/37949 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/tvbuff.c')
-rw-r--r--epan/tvbuff.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/epan/tvbuff.c b/epan/tvbuff.c
index 9352a6f73e..41e3cd0cbf 100644
--- a/epan/tvbuff.c
+++ b/epan/tvbuff.c
@@ -1955,6 +1955,19 @@ static const guint8 bit_mask8[] = {
0xff
};
+
+/* Get a variable ammount of bits
+ *
+ * Return a byte array with bit limited data. The data is aligned to the right.
+ */
+guint8 *
+tvb_get_bits_array(wmem_allocator_t *scope, tvbuff_t *tvb, const gint bit_offset, size_t no_of_bits, size_t *data_length)
+{
+ tvbuff_t *sub_tvb = tvb_new_octet_aligned(tvb, bit_offset, (gint32) no_of_bits);
+ *data_length = tvb_reported_length(sub_tvb);
+ return (guint8*)tvb_memdup(scope, sub_tvb, 0, *data_length);
+}
+
/* Get 1 - 8 bits */
guint8
tvb_get_bits8(tvbuff_t *tvb, guint bit_offset, const gint no_of_bits)