improve buf_set_buf helper
[fw/openocd] / src / helper / binarybuffer.c
index e5f9854d44a1fcc966129dd48f2c332deb6005c9..53ad4d395da899ea33de8d40a27c7777749cc070 100644 (file)
@@ -113,26 +113,29 @@ 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;
 }
 
-uint8_t* buf_set_buf(const uint8_t *src, int src_start, uint8_t *dst, int dst_start, int len)
+void* buf_set_buf(const void *_src, unsigned src_start,
+               void *_dst, unsigned dst_start, unsigned len)
 {
-       int src_idx = src_start, dst_idx = dst_start;
+       const uint8_t *src = _src;
+       uint8_t *dst = _dst;
 
-       for (int i = 0; i < len; i++)
+       unsigned src_idx = src_start, dst_idx = dst_start;
+       for (unsigned i = 0; i < len; i++)
        {
                if (((src[src_idx / 8] >> (src_idx % 8)) & 1) == 1)
                        dst[dst_idx / 8] |= 1 << (dst_idx % 8);