improve buf_set_ones
authorZachary T Welch <zw@superlucidity.net>
Sat, 14 Nov 2009 18:41:35 +0000 (10:41 -0800)
committerZachary T Welch <zw@superlucidity.net>
Mon, 16 Nov 2009 08:46:34 +0000 (00:46 -0800)
Use memset instead of loop. Improve types, using void * and unsigned.

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

index e5f9854..8275d12 100644 (file)
@@ -113,17 +113,17 @@ bool buf_cmp_mask(const void *_buf1, const void *_buf2,
 }
 
 
-uint8_t* buf_set_ones(uint8_t *buf, int count)
+void* buf_set_ones(void *_buf, unsigned size)
 {
-       for (unsigned i = 0, num_bytes = CEIL(count, 8); i < num_bytes; i++)
-       {
-               if (count >= 8)
-                       buf[i] = 0xff;
-               else
-                       buf[i] = (1 << count) - 1;
+       uint8_t *buf = _buf;
+       if (!buf)
+               return NULL;
 
-               count -= 8;
-       }
+       memset(buf, 0xff, size / 8);
+
+       unsigned trailing_bits = size % 8;
+       if (trailing_bits)
+               buf[size / 8] = (1 << trailing_bits) - 1;
 
        return buf;
 }
index 07a5862..b988e40 100644 (file)
@@ -76,7 +76,8 @@ bool buf_cmp_mask(const void *buf1, const void *buf2,
 
 void* buf_cpy(const void *from, void *to, unsigned size);
 
-uint8_t* buf_set_ones(uint8_t *buf, int count);
+void* buf_set_ones(void *buf, unsigned count);
+
 uint8_t* buf_set_buf(const uint8_t *src, int src_start,
                uint8_t *dst, int dst_start, int len);