From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: "Jeffrey R. Carter" Newsgroups: comp.lang.ada Subject: Re: Ada x Datagram Sockets Date: Fri, 8 Feb 2019 22:26:18 +0100 Organization: Also freenews.netfront.net; news.tornevall.net; news.eternal-september.org Message-ID: References: <47f17695-f9a5-4024-b2da-3f13209dc4fd@googlegroups.com> <818f5ff4-f18d-42b8-950d-9b597c012aa4@googlegroups.com> <62406dfb-54c9-4db3-b461-0ad72d4a782c@googlegroups.com> <519fd5e0-eb4e-432e-85cc-d7a37510c957@googlegroups.com> <9c63d0be-fffa-4dab-a879-921fd723b8d8@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 8 Feb 2019 21:26:18 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="cf39270f367c6fcde773ac96889c27ba"; logging-data="26000"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/3oJbgqx0ccTn2wJXbx820aPqqdZIjsd8=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 Cancel-Lock: sha1:DdABfGF14tyRTOTTNzx+BTexUGY= In-Reply-To: <9c63d0be-fffa-4dab-a879-921fd723b8d8@googlegroups.com> Content-Language: en-US Xref: reader01.eternal-september.org comp.lang.ada:55472 Date: 2019-02-08T22:26:18+01:00 List-Id: On 2/8/19 9:35 PM, Rego, P. wrote: >> What the OP needs to do is >> >> 1. Get Length, the length of the data. >> 2. Create C : Interfaces.C.char_array (1 .. Length) >> 3. Transfer the data into C >> 4. Use Interfaces.C.To_Ada (C) to transform C into an Ada String Now that I look at it in more detail, it's probably better to do something like function To_String (Buffer : Ada.Streams.Stream_Element_Array) return String is Result : String (1 .. Buffer'Length); Last : Natural := 0; begin -- To_String Convert : for I in Buffer'range loop exit Convert when Buffer (I) = 0; -- If NUL terminated Last := Last + 1; Result (Last) := Character'Val (Buffer (I) ); end loop Convert; return Result (1 .. Last); end To_String; Buffer : Ada.Streams.Stream_Element_Array (1 .. Big_Enough); Last : Ada.Streams.Stream_Element_Offset; ... Receive_Socket (Socket => Socket, Item => Buffer, Last => Last); Do_Something (To => To_String (Buffer (1 .. Last) ) ); -- Jeff Carter "I've seen projects fail miserably for blindly applying the Agile catechism: we're Agile, we don't need to stop and think, we just go ahead and code!" Bertrand Meyer 150