Hello Diego,

sorry for the late response. I've discovered that like a year ago, I
attempted doing the same, but very much prefer your version. Thanks for
posting the patch, it is merged now :)

Cheers
Vasilij

On 09/04/26 at 11:33pm, Diego A. Mundo wrote:
> 
> Attached is a patch to port inotify to CHICKEN 6. I made sure tests are still 
> passing on C5 too.
> 
> Diego

> From 1f682dad4e39fd9d61a75a4ad6b650c7b0fd52bc Mon Sep 17 00:00:00 2001
> From: "Diego A. Mundo" <[email protected]>
> Date: Fri, 4 Sep 2026 19:27:13 -0400
> Subject: [PATCH] Port to CHICKEN 6
> 
> ---
>  examples/fallkiste.scm     |  2 +-
>  examples/reload.scm        |  2 +-
>  examples/tailf.scm         |  2 +-
>  examples/udisks-watch.scm  |  2 +-
>  inotify-lolevel-module.scm |  8 ++++++--
>  inotify-lolevel.scm        | 15 ++++++++++++++-
>  inotify-module.scm         |  7 ++++++-
>  tests/run.scm              |  2 +-
>  8 files changed, 31 insertions(+), 9 deletions(-)
> 
> diff --git a/examples/fallkiste.scm b/examples/fallkiste.scm
> index 9e52044..c2d1dfe 100644
> --- a/examples/fallkiste.scm
> +++ b/examples/fallkiste.scm
> @@ -2,7 +2,7 @@
>  (cond-expand
>   (chicken-4
>    (use posix inotify scsh-process))
> - (chicken-5
> + ((or chicken-5 chicken-6)
>    (import (chicken base))
>    (import (chicken pathname))
>    (import (chicken process-context))
> diff --git a/examples/reload.scm b/examples/reload.scm
> index c53a0a6..33f16bb 100644
> --- a/examples/reload.scm
> +++ b/examples/reload.scm
> @@ -2,7 +2,7 @@
>  (cond-expand
>   (chicken-4
>    (use inotify utils))
> - (chicken-5
> + ((or chicken-5 chicken-6)
>    (import (chicken base))
>    (import (chicken format))
>    (import (chicken io))
> diff --git a/examples/tailf.scm b/examples/tailf.scm
> index 92bb14e..116efc9 100644
> --- a/examples/tailf.scm
> +++ b/examples/tailf.scm
> @@ -4,7 +4,7 @@
>  (cond-expand
>   (chicken-4
>    (use inotify utils))
> - (chicken-5
> + ((or chicken-5 chicken-6)
>    (import (chicken base))
>    (import (chicken file posix))
>    (import (chicken io))
> diff --git a/examples/udisks-watch.scm b/examples/udisks-watch.scm
> index e63617b..c3d48eb 100644
> --- a/examples/udisks-watch.scm
> +++ b/examples/udisks-watch.scm
> @@ -2,7 +2,7 @@
>  (cond-expand
>   (chicken-4
>    (use irregex inotify scsh-process srfi-18))
> - (chicken-5
> + ((or chicken-5 chicken-6)
>    (import (chicken base))
>    (import (chicken format))
>    (import (chicken irregex))
> diff --git a/inotify-lolevel-module.scm b/inotify-lolevel-module.scm
> index 8e17d0b..2d63279 100644
> --- a/inotify-lolevel-module.scm
> +++ b/inotify-lolevel-module.scm
> @@ -9,15 +9,19 @@ (module inotify-lolevel
>     (chicken-4
>      (import chicken foreign)
>      (use srfi-18 lolevel))
> -   (chicken-5
> +   ((or chicken-5 chicken-6)
>      (import (chicken base))
>      (import (chicken bitwise))
> -    (import (chicken blob))
>      (import (chicken condition))
>      (import (chicken foreign))
>      (import (chicken format))
>      (import (chicken memory))
>      (import (srfi 18))
>      (import miscmacros)))
> +  (cond-expand
> +    (chicken-5
> +     (import (chicken blob)))
> +    (chicken-6
> +     (import (only (chicken bytevector) make-bytevector))))
>  
>    (include "inotify-lolevel.scm"))
> diff --git a/inotify-lolevel.scm b/inotify-lolevel.scm
> index fadd824..3e5b6d4 100644
> --- a/inotify-lolevel.scm
> +++ b/inotify-lolevel.scm
> @@ -34,6 +34,11 @@ (define close
>      "int ret = close(fd);"
>      "C_return(ret < 0 ? -errno : ret);"))
>  
> +(cond-expand
> +  (chicken-6
> +   (define-foreign-type blob u8vector))
> +  (else))
> +
>  (define inotify_next_events
>    (foreign-lambda* int ((blob buf) (int buf_len) (pointer-vector events) 
> (int fd))
>      ;; adapted from inotify(7)
> @@ -60,11 +65,14 @@ (define inotify_next_events
>  ;;; records
>  
>  (define-record event wd flags cookie name)
> -(define-record-printer (event e out)
> +
> +(define (display-event e out)
>    (if (event-name e)
>        (fprintf out "#<event ~a: ~s ~s>" (event-wd e) (event-flags e) 
> (event-name e))
>        (fprintf out "#<event ~a: ~s>" (event-wd e) (event-flags e))))
>  
> +(set-record-printer! event display-event)
> +
>  (define (pointer->event ptr)
>    (let ((wd ((foreign-lambda* int ((inotify_event* event))
>                 "C_return(event->wd);") ptr))
> @@ -226,6 +234,11 @@ (define %min-event-size (foreign-value "sizeof(struct 
> inotify_event)" int))
>  (define %max-event-size (+ %min-event-size (foreign-value "NAME_MAX" int) 1))
>  (define %max-event-count (/ %events-buffer-size %min-event-size))
>  
> +(cond-expand
> +  (chicken-6
> +   (define make-blob make-bytevector))
> +  (else))
> +
>  (define (%next-events! fd)
>    (when (> %max-event-size %events-buffer-size)
>      (abort (usage-error "NAME_MAX exceeds read buffer size" '%next-events!)))
> diff --git a/inotify-module.scm b/inotify-module.scm
> index 15cf753..f8e6b37 100644
> --- a/inotify-module.scm
> +++ b/inotify-module.scm
> @@ -14,7 +14,7 @@ (module inotify
>      (import chicken foreign)
>      (use inotify-lolevel extras srfi-18 srfi-69
>           lolevel posix data-structures files))
> -   (chicken-5
> +   ((or chicken-5 chicken-6)
>      (import (chicken base))
>      (import (chicken condition))
>      (import (chicken file))
> @@ -27,4 +27,9 @@ (module inotify
>      (import queues)
>      (import inotify-lolevel)))
>  
> +  (cond-expand
> +    (chicken-6
> +     (import (only (scheme base) make-parameter)))
> +    (else))
> +
>    (include "inotify.scm"))
> diff --git a/tests/run.scm b/tests/run.scm
> index 0f2d498..648f85b 100644
> --- a/tests/run.scm
> +++ b/tests/run.scm
> @@ -2,7 +2,7 @@
>  (cond-expand
>   (chicken-4
>    (use inotify test srfi-18 posix srfi-1))
> - (chicken-5
> + ((or chicken-5 chicken-6)
>    (import (chicken file))
>    (import (chicken process))
>    (import (srfi 1))
> -- 
> 2.47.3
> 

Attachment: signature.asc
Description: PGP signature

Reply via email to