- b = (unsigned char *) &bits,
- b1 = &b[endian > 0 ? 1 : 2],
- b2 = &b[endian > 0 ? 2 : 1],
- b3 = &b[endian > 0 ? 3 : 0];
+ /* the decoder works on the least-significant three bytes of the bits integer,
+ but their position in memory depend on both endian-ness and size of
+ long int... for little-endian architectures the size is irrelevant, for
+ big-endian archs it's crucial... ideally we'd adopt posix and use a64l instead
+ of this mess. */
+ b = (unsigned char *) &bits;
+ b1 = &b[endian > 0 ? sizeof(bits)==8?5:1 : 2];
+ b2 = &b[endian > 0 ? sizeof(bits)==8?6:2 : 1];
+ b3 = &b[endian > 0 ? sizeof(bits)==8?7:3 : 0];
+