From 4ee234f118980c0cac22fbc37fd1d2a860d728c0 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 4 Dec 2016 17:33:12 +1300 Subject: [PATCH] Remove egregious lack of support for reading directory contents in filesystem driver --- racket/syndicate/drivers/filesystem.rkt | 4 ++-- racket/syndicate/examples/actor/example-filesystem.rkt | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/racket/syndicate/drivers/filesystem.rkt b/racket/syndicate/drivers/filesystem.rkt index c6d6641..fc6c807 100644 --- a/racket/syndicate/drivers/filesystem.rkt +++ b/racket/syndicate/drivers/filesystem.rkt @@ -21,7 +21,7 @@ (track-file name reader-proc)))) (define (read-file name reader-proc) - (and (file-exists? name) + (and (or (file-exists? name) (directory-exists? name)) (reader-proc name))) (define (track-file name reader-proc) @@ -44,7 +44,7 @@ ;; (log-info "track-file-changes ~v: ~v" name msg) (match msg ['quit (void)]))) - (if (file-exists? name) ;; TODO: TOCTTOU :-( + (if (or (file-exists? name) (directory-exists? name)) ;; TODO: TOCTTOU :-( (handle-evt (filesystem-change-evt name) (lambda (_dummy) ;; (log-info "track-file-changes ~v: changed" name) diff --git a/racket/syndicate/examples/actor/example-filesystem.rkt b/racket/syndicate/examples/actor/example-filesystem.rkt index 6c4e6e7..ff1a993 100644 --- a/racket/syndicate/examples/actor/example-filesystem.rkt +++ b/racket/syndicate/examples/actor/example-filesystem.rkt @@ -18,4 +18,11 @@ (actor #:name (list 'monitor name) (stop-when (message (list "close" name))) (on (asserted (file-content name file->bytes $bs)) - (log-info "~a: ~v" name bs))))) + (log-info "~a: ~v" name bs)))) + + ;; The driver can track directory "contents" just as well as files. + (on (message (list "opendir" $name)) + (actor #:name (list 'monitor name) + (stop-when (message (list "close" name))) + (on (asserted (file-content name directory-list $files)) + (log-info "~a: ~v" name files)))))