Re: What does it take to make code endian clean?
On Tue, 13 Mar 2001, Geert Uytterhoeven wrote:
> On 13 Mar 2001, Gjermund Gusland Thorsen wrote:
> > What does it take to make code not depending on little or big endian
>
> - Never make assumptions about the ordering of bytes in a multi-word entity
> (short, int, long, long long). I.e. don't cast the address of an int to a
> char pointer and access the individual bytes. Avoid casts of pointers to
> pointers to entities of different sizes.
>
> - When accessing the hardware, use the correct functions for the specific bus
> type. PCI memory space requires {read,write}[bwl](), PCI I/O space requires
> {in,out}[bwl](). These functions take care of the PCI bus being little
> endian.
>
> - When handling data that is in a specific endianness, use the cpu_to[bl]e*()
> and [bl]e*_to_cpu() conversion routines. In the case of TCP/IP (which is
> big endian), use the hton*() and ntoh*() functions.
>
> Anything I'm missing?
Yes: what he was really complaining about was hardcoded Intel assembly in
some source, not endianness issues :-) What does this take? Repeated
flaming of the code author...
Other than that, I think your HOWTO pretty much covers it. Writing code
that is supposed to exchange structured data among machines running a
variety of endianness and word size is another HOWTO (RPC, XDR and
friends).
Michael
Reply to: