FFI difference between u8vector and c-string added by semarie on Mon Oct 1 15:00:36 2018
(module test *
(import scheme
srfi-4
(chicken foreign))
(define strerror1
(let ((NL_TEXTMAX (foreign-value "NL_TEXTMAX" int))
(strerror_r (foreign-lambda int "strerror_r" int u8vector size_t))
)
(lambda (errnum)
(let* ((buf (make-u8vector NL_TEXTMAX 0))
(ret (strerror_r errnum buf NL_TEXTMAX)))
(if (zero? ret)
buf
(string-append "error " (number->string errnum)))))))
(define strerror2
(let ((NL_TEXTMAX (foreign-value "NL_TEXTMAX" int))
(strerror_r (foreign-lambda int "strerror_r" int c-string size_t))
)
(lambda (errnum)
(let* ((buf (make-string NL_TEXTMAX))
(ret (strerror_r errnum buf NL_TEXTMAX)))
(if (zero? ret)
buf
(string-append "error " (number->string errnum)))))))
)