(include "sys/inotify.h")
+;; since 2.6.27 according to inotify_init(2)
(constant (in-cloexec "IN_CLOEXEC"))
(constant (in-nonblock "IN_NONBLOCK"))
(constant (in-access "IN_ACCESS"))
(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))
(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))
(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)