From: Simon Wright <simon@pushface.org>
Subject: Re: Using GNAT.Sockets with Streams and Byte Swapping
Date: Thu, 26 May 2005 07:00:08 +0100
Date: 2005-05-26T07:00:08+01:00 [thread overview]
Message-ID: <m2wtpmttlj.fsf@grendel.local> (raw)
In-Reply-To: 1117014486.871500.288200@g44g2000cwa.googlegroups.com
"markp" <markwork66@yahoo.com> writes:
> I am having a problem using GNAT.socket with streams. I can create a
> stream easily and send data as follows:
>
> Msg_Type'Write(
> My_Stream_Access,
> Msg);
>
> This will work fine of both machines are the same "endian". However, if
> I need to swap bytes on the variable Msg before I send, I get garbled
> data on the other end.
>
> Is there a problem with swapping bytes before the call to 'Write?
Not as far as I know. Though it's a much better idea to swap bytes
_in_ 'Write (and 'Read).
You can write your own 'Read, 'Write attribute subprograms.
Or, you can rebuild the runtime on both sides using an XDR version of
System.Stream_Attributes (s-stratt.adb).
In recent (supported) GNATs and in GCC 3.4, 4.0 this has been supplied
in s-strxdr.adb (so copy s-strxdr.adb to s-stratt.adb and rebuild --
see Makefile.adalib in your .../adalib directory under the GCC
runtime, though Some Assembly Will [probably] Be Required).
If you are on a PowerPC the only difference between doing this and
doing nothing on the PPC (running natively big-endian -- who does
otherwise?) is that natively Wide_Character is 2 bytes, while the XDR
form is 4 bytes.
There is a problem with s-strxdr.adb, it raises the wrong exception
(an internal Data_Error rather than the standed End_Error, ISTR).
What we ended up doing was using the native PPC s-stratt.adb and
writing our own on the x86 side to match what the PPC was doing
(easier to argue the acceptability of a vendor-supplied runtime, and
our delivery platform is the PPC!)
next prev parent reply other threads:[~2005-05-26 6:00 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-25 9:48 Using GNAT.Sockets with Streams and Byte Swapping markp
2005-05-26 6:00 ` Simon Wright [this message]
2005-05-26 9:28 ` markp
2005-05-26 9:50 ` Alex R. Mosteo
2005-05-26 10:01 ` Duncan Sands
2005-05-26 11:35 ` markp
2005-05-26 18:51 ` Pascal Obry
2005-05-26 20:29 ` Simon Wright
2005-05-26 21:02 ` Florian Weimer
2005-05-27 6:38 ` Vinzent 'Gadget' Hoefler
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox