improve buf_cpy helper
authorZachary T Welch <zw@superlucidity.net>
Sat, 14 Nov 2009 18:36:57 +0000 (10:36 -0800)
committerZachary T Welch <zw@superlucidity.net>
Mon, 16 Nov 2009 08:46:34 +0000 (00:46 -0800)
Use memcpy for bulk of copy, improve final byte handling.
Improve types by using void * for buffers and unsigned for size.

src/helper/binarybuffer.c
src/helper/binarybuffer.h

index 865d3a3..e5f9854 100644 (file)
@@ -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)
index a51c2e5..07a5862 100644 (file)
@@ -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,