aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-14 10:36:57 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-16 00:46:34 -0800
commitd09e308130619f8667b6f08399cfc7d16dddab36 (patch)
tree5ee5ec53b0a12239101769bbdcb5613a866db37f
parente4ee891759b08d3edb258b34f00b4ae8e3298d06 (diff)
downloadriscv-openocd-d09e308130619f8667b6f08399cfc7d16dddab36.zip
riscv-openocd-d09e308130619f8667b6f08399cfc7d16dddab36.tar.gz
riscv-openocd-d09e308130619f8667b6f08399cfc7d16dddab36.tar.bz2
improve buf_cpy helper
Use memcpy for bulk of copy, improve final byte handling. Improve types by using void * for buffers and unsigned for size.
-rw-r--r--src/helper/binarybuffer.c17
-rw-r--r--src/helper/binarybuffer.h3
2 files changed, 11 insertions, 9 deletions
diff --git a/src/helper/binarybuffer.c b/src/helper/binarybuffer.c
index 865d3a3..e5f9854 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 a51c2e5..07a5862 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,