https://github.com/twogood/unshield/issues/7 fix

Thank you very much for fixing this integer alignment issue!

----- 8< -----

Running on SheevaPlug, unshield simply 'Aborts' when I try to extract a
cab.

The problem lies with macros READ_UINT16 & READ_UINT32 in
lib/internal.h.
In a nutshell, some processors will not tolerate a pointer that is not
correctly aligned for the 'pointed to' type. This arm is one of those.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka15414.html

Unfortunately, the layout of the CAB/HDR files seems to take no interest
in the memory alignment of its content, so successful execution is
highly improbable. With these macros the correct values will only be
read about 1 in 4 times. Failure is guaranteed.

I've replaced the existing definitions with the following. It now works
on my SheevaPlug, and I see no reason why it should not work on any
other cpu, but I haven't tested.

/*
  Access unaligned little endian data retrieved from CAB/HDR files.
  Pointers to buffered data are declared as pointers to uint8_t.

  Some processors (e.g. ARM types) will not tolerate a pointer that
  is not correctly aligned for the pointed to type.

  Other processors (e.g. Intel) don't care about these. So this
  approach is suboptimal for them. Could be optimized if it matters.

  Adapted from kernel source: include/linux/unaligned/le_byteshift.h
*/

----- 8< -----