X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=inotify.lisp;h=8c9738655c932373371df6e8bff01c907254be31;hb=HEAD;hp=4340719527609b5444b308a2ade8983e69a2582f;hpb=f11c5cad2d9ffd566b6e1f3d1ffb6d7cf7c7e855;p=cl-inotify.git diff --git a/inotify.lisp b/inotify.lisp index 4340719..8c97386 100644 --- a/inotify.lisp +++ b/inotify.lisp @@ -28,6 +28,11 @@ (in-package #:cl-inotify) +(eval-when (:compile-toplevel :load-toplevel :execute) + (when (boundp 'in-cloexec) + (pushnew 'inotify1 *features*))) + +#+cl-inotify::inotify1 (defbitfield (inotify1-flag :int) (:cloexec #.in-cloexec) (:nonblock #.in-nonblock)) @@ -97,18 +102,19 @@ thus should be used only with WATCH-RAW)." (defsyscall inotify-init :int "Initialises a new inotify event queue.") +#+cl-inotify::inotify1 (defsyscall inotify-init1 :int "Initialises a new inotify event queue and passes some flags along." (flags inotify1-flag)) (defsyscall inotify-add-watch :int - "Watches a path on a event queue." + "Watches a path on an event queue." (fd :int) (pathname :string) (mask inotify-flag)) (defsyscall inotify-rm-watch :int - "Removes a watched path from a event queue." + "Removes a watched path from an event queue." (fd :int) (wd :int)) @@ -198,8 +204,14 @@ the file descriptor is set to non-blocking I/O." (unwind-protect ;; file descriptor is collected with auto-close (progn - (setf fd (inotify-init1 (and (setf non-block nonblocking) - :nonblock))) + (setf non-block nonblocking) + #+inotify1 + (setf fd (inotify-init1 (and non-block :nonblock))) + #-inotify1 + (setf fd (inotify-init)) + #-inotify1 + (when non-block + (set-nonblocking fd T)) (setf stream ;; TODO: what about the blocking? #-(or clisp sbcl)