comp.lang.ada
 help / color / mirror / Atom feed
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!)



  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