19 lines
579 B
Text
19 lines
579 B
Text
(import (otus ffi))
|
|
|
|
(define self (load-dynamic-library #f))
|
|
|
|
(define strdup
|
|
(let ((strdup (self type-vptr "strdup" type-string))
|
|
(free (self fft-void "free" type-vptr)))
|
|
(if (and strdup free)
|
|
; we have both native functions
|
|
(lambda (str)
|
|
(let*((dupped (strdup str))
|
|
(result (vptr->string dupped)))
|
|
(free dupped)
|
|
result))
|
|
; windows doesn't have strdup and free, so...
|
|
(lambda (str)
|
|
(list->string (string->list str))))))
|
|
|
|
(print (strdup "Hello World!"))
|