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)))))))
)