Hi,
+/* Load unaligned n-byte integer (little-endian encoding) into uintXX_t */ +static inline uintXX_t osmo_loadXXle_ext(const uint8_t *p, uint8_t n)
Is "uint8_t *" the right type here ? I would think "void *" to be better.
When loading from a msgb, sure we get uint8_t * (well unsigned char * actually, which just happen to match uint8_t on our architecture).
But if you try to load a value from a struct pointer that might not be aligned, you'll get possibly a int16_t or something and you'll need an explicit cast. While casting to void * is implicit in C.
like :
struct test { int8_t foo; int16_t bar };
struct test *tp = (struct test *) msgb->data; /* Note that I'm not especially happy with the explicit cast here either ... data should be void* imho */
osmo_load16be(&tp->bar);
vs
osmo_load16be((uint8_t*)&tp->bar);
Cheers,
Sylvain