Patches 1-4 and 9:
These patches use the SAFEALIGN macros where it is appropriate. I split
them into several patches for easier review, so that client code changes
are not mixed with the rest of the code and changes that are a little
different than the rest have their own patch.
Patches 5-6:
Here I think it is not needed to use uint8_t* or char*. We cast the
pointer anyway and there are no real alignment issues (the memory is
aligned properly). I was thinking about suppressing the warnings with
#pragma here, but in this particular situation it is IMO better to have
just void*.
Patches 7-8:
These were all false positive warnings. It is possible to suppress them
with additional casting but I found it less readable so I used #pragma.
Patch 10:
We had improperly aligned part of a buffer used in client code. Also
some code blocks here must rely on fact that the buffer they get is
aligned properly (they can do nothing about it if it isn't). In these
cases it is better to silence the warnings, so that it does not make
permanent noise during compilation.
Thanks
Michal