invoking renamed foreign function

Anton Vodonosov avodonosov at yandex.ru
Mon May 29 02:25:42 UTC 2017


Luis, thanks for the response

29.05.2017, 05:18, "Luís Oliveira" <luismbo at gmail.com>:
> You can look up both functions using foreign-symbol-pointer
> to decide which one to call. You'd usually call the right one using
> foreign-funcall-pointer, but perhaps you can defcfun both and
> call the right one based on the lookup.

Will that work on Corman?

>
> defcfun-ing non-existent functions will yield runtime warnings on some implementations
> (notably SBCL) so perhaps you might want to implement both the foreign-funcall-pointer
> and defcfun approaches and conditionalise them accordingly.

BTW, CMUCL fails with error in this case.

>
> HTH,
> Luís
>
> On Mon, May 29, 2017, 02:56 Anton Vodonosov <avodonosov at yandex.ru> wrote:
>> Hello,
>>
>> OpenSSL renamed function SSLeay to OpenSSL_version_num.
>> So, so depending on what version of library we work with we
>> need to call either SSLeay or OpenSSL_version_num.
>>
>> What is the best way to do it?
>>
>> The following is one approach:
>>
>> (or (ignore-errors
>>       (cffi:foreign-funcall "OpenSSL_version_num" :long))
>>     (ignore-errors
>>       (cffi:foreign-funcall "SSLeay" :long)))
>>
>> but it won't work on Corman Lisp because it doesn't
>> support cffi:foreign-funcall.
>>
>> I would like to be fully portable. Is there a better way?
>>
>> Best regards,
>> - Anton



More information about the cffi-devel mailing list