comp.lang.ada
 help / color / mirror / Atom feed
* Converting pointers to non nul-terminated C "strings" to Ada string
@ 2009-02-14  6:58 xorquewasp
  2009-02-14  9:26 ` Dmitry A. Kazakov
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: xorquewasp @ 2009-02-14  6:58 UTC (permalink / raw)


Hello.

I have some C code that returns a pointer to a buffer of
"data" (not a string, just raw data) and also returns the
size of the buffer:

void
get_data (char **ptr, int *size);

int size;
char *ptr;

get_data (&ptr, &size);

The code is part of a library that I don't control, so I can't
change the interface.

I've defined the Ada equivalent as:

    package CS renames Interfaces.C.Strings;
    package C renames Interfaces.C;

    procedure memory_data
      (data   : out CS.chars_ptr;
       size   : out C.int);
    pragma Import (C, memory_data, "get_data");

This works correctly, however I'm having trouble converting
the chars_ptr type to an Ada string given that it's not nul-
terminated.

Attempts to do the following:

return CS.Value (Item => data, Length => size);

... results in a String as long as the position of the first nul in
the
C string (the position is inevitably less than the length of the
string).

Is it possible to properly convert unterminated C strings or do I
need to start messing about with raw System.Address types?



^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2009-02-15 17:44 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-14  6:58 Converting pointers to non nul-terminated C "strings" to Ada string xorquewasp
2009-02-14  9:26 ` Dmitry A. Kazakov
2009-02-14 10:38   ` xorquewasp
2009-02-14 11:16     ` Dmitry A. Kazakov
2009-02-14 11:37       ` xorquewasp
2009-02-14  9:27 ` Hibou57 (Yannick Duchêne)
2009-02-14 10:41   ` xorquewasp
2009-02-15 17:44     ` Georg Bauhaus
2009-02-14 11:47   ` Jacob Sparre Andersen
2009-02-14 14:25     ` Hibou57 (Yannick Duchêne)
2009-02-14  9:28 ` sjw
2009-02-14  9:33 ` likai3g

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