(cond-expand (chicken-5 (import scheme)) (chicken-6 (import (scheme base)) (import (chicken bytevector)))) (import (chicken format)) (import (chicken foreign)) (define stderr (current-error-port)) #> char *copy_scheme_string(C_word string) { return strdup(C_c_string(string)); } <# (define (memfrob arg) (when (not (string? arg)) (error "Incorrect type")) ((foreign-lambda* c-string* ((scheme-object arg) (size_t size)) "C_return(copy_scheme_string(arg, size));") (cond-expand (chicken-5 arg) (chicken-6 (string->utf8 arg))) (string-length arg))) (fprintf stderr "foo: ~s\n" (memfrob "foo")) (fprintf stderr "bar: ~s\n" (memfrob "bar")) (fprintf stderr "foo: ~s\n" (memfrob "foo")) (fprintf stderr "bar: ~s\n" (memfrob "bar"))