diff --git a/src/helper/binarybuffer.c b/src/helper/binarybuffer.c index 865d3a372..e5f9854d4 100644 --- a/src/helper/binarybuffer.c +++ b/src/helper/binarybuffer.c @@ -48,21 +48,22 @@ const unsigned char bit_reverse_table256[] = }; -uint8_t* buf_cpy(const uint8_t *from, uint8_t *to, int size) +void* buf_cpy(const void *from, void *_to, unsigned size) { - if (from == NULL) + if (NULL == from || NULL == _to) return NULL; - for (unsigned i = 0, num_bytes = CEIL(size, 8); i < num_bytes; i++) - to[i] = from[i]; + // copy entire buffer + memcpy(_to, from, CEIL(size, 8)); /* mask out bits that don't belong to the buffer */ - if (size % 8) + unsigned trailing_bits = size % 8; + if (trailing_bits) { - to[size / 8] &= (0xff >> (8 - (size % 8))); + uint8_t *to = _to; + to[size / 8] &= (1 << trailing_bits) - 1; } - - return to; + return _to; } static bool buf_cmp_masked(uint8_t a, uint8_t b, uint8_t m) diff --git a/src/helper/binarybuffer.h b/src/helper/binarybuffer.h index a51c2e578..07a586248 100644 --- a/src/helper/binarybuffer.h +++ b/src/helper/binarybuffer.h @@ -73,7 +73,8 @@ uint32_t flip_u32(uint32_t value, unsigned int num); bool buf_cmp(const void *buf1, const void *buf2, unsigned size); bool buf_cmp_mask(const void *buf1, const void *buf2, const void *mask, unsigned size); -uint8_t* buf_cpy(const uint8_t *from, uint8_t *to, int size); + +void* buf_cpy(const void *from, void *to, unsigned size); uint8_t* buf_set_ones(uint8_t *buf, int count); uint8_t* buf_set_buf(const uint8_t *src, int src_start,