[PATCH] Fix error introduced in a15f05f1b43d8e85d9a3f72a0a

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Holger Freyther holger at freyther.de
Wed Jan 27 19:49:05 UTC 2016


> On 27 Jan 2016, at 18:55, suraev at alumni.ntnu.no wrote:
> 
> From: Max <msuraev at 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?





More information about the OpenBSC mailing list