nmh-workers
[Top] [All Lists]

Re: [Nmh-workers] nmh 1.5 doesn't work on 64-bit big-endian archs(+patch)

2012-06-14 08:20:55
az wrote:

i've run into another gotcha: the base64-decoder doesn't
work on 64-bit big-endian architectures: mhstore and co. write
files of the correct length but which consist only of \0s.

the culprit is uip/mhparse.c, which contains a pretty ugly
base64 decoder (in two places). that thing allocates a
"long int" as a container for the 24 bits that you get
from four base-64 chars. the container is then accessed
both as a single entity and as a byte array, which
naturally depends on how wide the long int is and in what
order things end up in there.

the code distinguishes between big- and little-endian
systems but wrongly assumes that sizeof(long int) == 4,
which isn't universally true (quel surprise...).

the attached patch fixes the issue, but in the long run we
should insist on posix and use a64l().

Patch applied, thank you.

uip/mhparse.c has the only explicit dependencies on endian-ness.
Cleanup would be most welcome.

David

_______________________________________________
Nmh-workers mailing list
Nmh-workers(_at_)nongnu(_dot_)org
https://lists.nongnu.org/mailman/listinfo/nmh-workers

<Prev in Thread] Current Thread [Next in Thread>