On 27 Jan 2016, at 18:55, suraev(a)alumni.ntnu.no
wrote:
From: Max <msuraev(a)sysmocom.de>
Fix error creeped in while porting code from cpp refs.
Add test case for code in question.
Expand documentatin to clarify function use.
Be more specific here. Which routines were impacted? Sure
all calls to bitvec_write_field. Why do you decide to not
make this variable an in+out variable and instead need to
know how many spaces it advanced? Have you checked the other
code that was converted?
+static void test_unhex(char *hex)
+{
+ struct bitvec b;
+ uint8_t d[64] = {0};
+ b.data = d;
+ b.data_len = sizeof(d);
+ b.cur_bit = 0;
+ printf("%d -=>\n", bitvec_unhex(&b, hex));
+ printf("%s\n%s\n", osmo_hexdump_nospc(d, 64), osmo_hexdump_nospc(hex, 23));
Extend the test to see what happens if you unhex more than d
can hold?
Instead of dumping up to 64bytes can you see how many bytes are
filled?
int bitvec_write_field(struct bitvec *bv, unsigned& write_index, uint64_t val,
unsigned len)
{
unsigned int i;
int rc;
bv->cur_bit = write_index;
for (i = 0; i < len; i++) {
int bit = 0;
if (val & ((uint64_t)1 << (len - i - 1)))
bit = 1;
rc = bitvec_set_bit(bv, (bit_value)bit);
if (rc)
return rc;
}
write_index += len;
return 0;
}
so if you take the "unsigned&" and make it a plain variable then the
write_index += len at the end mkes no sense and can be removed?