foreign-c-libraries/retropikzel/file-append.scm

21 lines
771 B
Scheme

(define-c-library libc '("stdio.h") #f ())
(define-c-procedure c-fopen libc 'fopen 'pointer '(pointer pointer))
;(define-c-procedure c-fputs libc 'fputs 'int '(pointer pointer))
(define-c-procedure c-fputc libc 'fputc 'int '(int pointer))
(define-c-procedure c-fclose libc 'fclose 'int '(pointer))
(define mode-cbv (string->c-bytevector "a"))
(define (with-append-to-file path thunk)
(let* ((path-cbv (string->c-bytevector path))
(file-cbv (c-fopen path-cbv mode-cbv)))
(string-for-each
(lambda (c)
(c-fputc (char->integer c) file-cbv))
(parameterize ((current-output-port (open-output-string)))
(apply thunk '())
(get-output-string (current-output-port))))
(c-fclose file-cbv)
(c-bytevector-free path-cbv)))