> On 27 Jan 2016, at 18:55, [email protected] wrote:
> 
> From: Max <[email protected]>
> 
> 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?


Reply via email to