comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Need a way to convert a constant to a variable
Date: Sat, 5 Aug 2017 21:37:41 +0200
Date: 2017-08-05T21:37:41+02:00	[thread overview]
Message-ID: <om56q5$e7p$1@gioia.aioe.org> (raw)
In-Reply-To: om507u$3u3$1@gioia.aioe.org

On 2017-08-05 19:45, Victor Porton wrote:
> Dmitry A. Kazakov wrote:
> 
>> On 2017-08-05 17:11, Victor Porton wrote:
>>
>>> I do use char_array for interfacing with C.
>>
>> You should probably reconsider it. It works only for C functions that do
>> not expect null as a value, do not return strings allocated outside Ada,
>> do not deallocate strings passed into.
> 
> I use an indefinite holder with char_array inside to represent a C string
> (whose length size_t value ('Length in Ada) I pass separately to a C
> function), which may be either a real string (corresponding to char_array)
> or NULL (corresponding to empty indefinite handler).
> 
> Note that the above is NOT related to NUL-terminated strings.

Yes. What you do is not a good idea. Try this instead:

    type C_String is new Ada.Finalization.Limited_Controlled with record
       Data : chars_ptr := null_ptr;
    end record;
    procedure Set (X : in out C_String; Text : String) is
    begin
       Free (X.Data);
       X.Data := New_String (Text);
    end Set;
    procedure Finalize (X : in out C_String) is
    begin
       Free (X.Data);
    end Finalize;

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  reply	other threads:[~2017-08-05 19:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-05 13:41 Need a way to convert a constant to a variable Victor Porton
2017-08-05 14:48 ` Dmitry A. Kazakov
2017-08-05 15:11   ` Victor Porton
2017-08-05 16:44     ` Dmitry A. Kazakov
2017-08-05 17:45       ` Victor Porton
2017-08-05 19:37         ` Dmitry A. Kazakov [this message]
2017-08-05 15:41 ` Jeffrey R. Carter
2017-08-05 16:25   ` Victor Porton
2017-08-05 20:12     ` Jeffrey R. Carter
2017-08-05 17:59 ` Per Sandberg
2017-08-15 20:05 ` Eryndlia Mavourneen
2017-08-15 20:07   ` Eryndlia Mavourneen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox