comp.lang.ada
 help / color / mirror / Atom feed
* Interfacing to C: API with structures but without binary layout
@ 2007-06-12 20:09 Maciej Sobczak
  2007-06-12 20:19 ` Lutz Donnerhacke
  2007-06-12 22:36 ` Jeffrey Creem
  0 siblings, 2 replies; 3+ messages in thread
From: Maciej Sobczak @ 2007-06-12 20:09 UTC (permalink / raw)


Another problem with interfacing: consider a C function that expects
some data structure that is defined in terms of C struct definition,
but without clear binary layout.
A motivating example might be the connect(2) system call, which
expects the sockaddr address structure. The only thing we know (by the
standard) about this structure is that it contains *at least* some
given fields. Depending on the actual system, however, it might
contain some more fields for implementation-defined reasons, or they
might be in different order, etc.

Now, in order to call such a function we need access to the
appropriate header file, where the actual structure definition is
provided. But Ada doesn't understand C headers and pragma Import(C,
connect) will not be enough.

A straightforward solution is to create a thin wrapper (in C) for the
given function that will expect parameters in well-defined form and
layout and just forward them to the interesting system call. This
wrapper will have to be compiled separately on each target system,
picking the actual structure definition from the appropriate system
header. Ada can then call the wrapper function.

Is this THE solution?

--
Maciej Sobczak
http://www.msobczak.com/




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

end of thread, other threads:[~2007-06-12 22:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-06-12 20:09 Interfacing to C: API with structures but without binary layout Maciej Sobczak
2007-06-12 20:19 ` Lutz Donnerhacke
2007-06-12 22:36 ` Jeffrey Creem

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