33 lines
1.1 KiB
Scheme
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))
|