freeHaskellFunctionPtr
Marcin 'Qrczak' Kowalczyk
qrczak at knm.org.pl
Wed Jan 3 06:09:19 EST 2001
Wed, 3 Jan 2001 21:12:54 +1100, Fergus Henderson <fjh at cs.mu.oz.au> pisze:
> Well, if they are left, then at very least they should be
> very clearly documented as being non-portable.
They should, they aren't. Perl internally relies on the fact that
memsetting all bits to 0 produces null pointers (at least in one
place). Libraries use identifiers from the namespace reserved
to the C implementation. Libraries use Posix functions, Single
Unix Spec. functions, BSD functions, Linux functions etc. without
documenting what interfaces they require.
> > Yes: me, for the readline library.
>
> Could you be more specific?
typedef struct {...} KEYMAP_ENTRY;
typedef KEYMAP_ENTRY *Keymap;
typedef int Function();
int rl_generic_bind (int type, char *keyseq, char *data, Keymap map)
If type == ISFUNC:
data should be a value of type Function *, cast to char *.
It will be applied to two int values.
If type == ISMACR:
data should be a string.
If type == ISKMAP:
data should be a value of type Keymap, cast to char *.
Function *rl_function_of_keyseq (char *keyseq, Keymap map, int *type)
Returns data as set by rl_generic_bind, cast to Function * this time,
and sets type appropriately.
> Why was the cast needed?
Because the library is designed and written in a horrible way.
> > Another example is dlopen.
>
> I think you mean dlsym().
Sure.
--
__("< Marcin Kowalczyk * qrczak at knm.org.pl http://qrczak.ids.net.pl/
\__/
^^ SYGNATURA ZASTÊPCZA
QRCZAK
More information about the FFI
mailing list