X-Git-Url: http://repo.macrolet.net/gitweb/?p=cl-inotify.git;a=blobdiff_plain;f=inotify.lisp;fp=inotify.lisp;h=8c9738655c932373371df6e8bff01c907254be31;hp=ee4435b4dc94a5c58b120626c450adf6ee476093;hb=68818178b7e34babfeef66d1e7166fd74df21170;hpb=7f7cd611b846a82ebcb93356d5f9bc24a61e55fc diff --git a/inotify.lisp b/inotify.lisp index ee4435b..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,6 +102,7 @@ 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)) @@ -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)