scheme-libraries/foreign/c/libc.scm

33 lines
1.1 KiB
Scheme

(define libc-name
(cond-expand
(windows "ucrtbase")
(haiku "root")
(guile "c")
(else "c")))
(define-c-library libc
'("stdlib.h" "stdio.h" "string.h")
libc-name
'((additional-versions ("0" "6"))))
(define-c-procedure c-malloc libc 'malloc 'pointer '(int))
(define-c-procedure c-calloc libc 'calloc 'pointer '(int int))
(define-c-procedure c-perror libc 'perror 'void '(pointer))
(define-c-procedure c-free libc 'free 'void '(pointer))
(define-c-procedure c-strlen libc 'strlen 'int '(pointer))
(define-c-procedure c-memset-address->pointer libc 'memset 'pointer '(u64 u8 int))
(define-c-procedure c-memset-pointer->address libc 'memset 'u64 '(pointer u8 int))
(cond-expand
;; FIXME
(ypsilon
(define (make-c-null) (c-memset-address->pointer 0 0 0))
(define (c-null? pointer)
(call-with-current-continuation
(lambda (k)
(with-exception-handler
(lambda (x) (k #f))
(lambda ()
(and (c-bytevector? pointer)
(= (c-memset-pointer->address pointer 0 0) 0))))))))
(else))