From bce1e6a4d284cfa5fe991763124a55b6d0d60ab7 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Mon, 23 Jul 2018 23:59:52 +0800 Subject: [PATCH] adding define-c-strerror --- tools/chibi-ffi | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/chibi-ffi b/tools/chibi-ffi index e30f39f2..132557f1 100755 --- a/tools/chibi-ffi +++ b/tools/chibi-ffi @@ -567,6 +567,28 @@ (for-each (lambda (x) (set! *consts* (cons (list type x) *consts*))) (cddr expr)))))) +;; custom strerror which reports constants as their names +(define-syntax define-c-strerror + (er-macro-transformer + (lambda (expr rename compare) + (let ((name (cadr expr)) + (errnos (cddr expr))) + `(,(rename 'c-declare) + ,(string-concatenate + `("\nchar* " ,(x->string name) "(const int err) { + static char buf[64]; + switch (err) { +" + ,@(map (lambda (errno) + (let ((e (x->string errno))) + (string-append " case " e ": return \"" e "\";\n"))) + errnos) + + " } + sprintf(buf, \"unknown error: %d\", err); + return buf; +}"))))))) + (define-syntax c-typedef (er-macro-transformer (lambda (expr rename compare)