diff --git a/cffi-dirent.asd b/cffi-dirent.asd
new file mode 100644
index 0000000..dae7a00
--- /dev/null
+++ b/cffi-dirent.asd
@@ -0,0 +1,36 @@
+;;
+;; cffi-dirent - Common Lisp wrapper for dirent.h
+;;
+;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
+;;
+;; Permission to use, copy, modify, and distribute this software for any
+;; purpose with or without fee is hereby granted, provided that the above
+;; copyright notice and this permission notice appear in all copies.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;;
+
+(in-package :common-lisp-user)
+
+(defpackage :cffi-dirent.system
+ (:use :common-lisp :asdf))
+
+(in-package :cffi-dirent.system)
+
+(defsystem :cffi-dirent
+ :name "cffi-dirent"
+ :author "Thomas de Grivel <thoxdg@gmail.com>"
+ :version "0.1"
+ :description "Common Lisp wrapper for dirent.h"
+ :defsystem-depends-on ("cffi-grovel")
+ :depends-on ("cffi" "cffi-errno")
+ :components
+ ((:file "package")
+ (:cffi-grovel-file "grovel-dirent" :depends-on ("package"))
+ (:file "cffi-dirent" :depends-on ("grovel-dirent"))))
diff --git a/cffi-dirent.lisp b/cffi-dirent.lisp
new file mode 100644
index 0000000..1f863a7
--- /dev/null
+++ b/cffi-dirent.lisp
@@ -0,0 +1,101 @@
+;;
+;; cffi-dirent - Common Lisp wrapper for dirent.h
+;;
+;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
+;;
+;; Permission to use, copy, modify, and distribute this software for any
+;; purpose with or without fee is hereby granted, provided that the above
+;; copyright notice and this permission notice appear in all copies.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;;
+
+(in-package :cffi-dirent)
+
+(defcfun ("opendir" c-opendir) :pointer
+ (name :string))
+
+(defun opendir (name)
+ (let ((dirp (c-opendir name)))
+ (if (null-pointer-p dirp)
+ (error-errno "opendir")
+ dirp)))
+
+(defcfun ("fdopendir" c-fdopendir) :pointer
+ (fd :int))
+
+(defun fdopendir (fd)
+ (let ((dirp (c-fdopendir fd)))
+ (if (null-pointer-p dirp)
+ (error-errno "fdopendir")
+ dirp)))
+
+(defcfun ("closedir" c-closedir) :int
+ (dirp :pointer))
+
+(defun closedir (dirp)
+ (let ((r (c-closedir dirp)))
+ (if (< r 0)
+ (error-errno "closedir")
+ r)))
+
+(defmacro with-dir ((var name) &body body)
+ (let ((dirp (gensym "DIRP-")))
+ `(let ((,dirp (opendir ,name)))
+ (unwind-protect (let ((,var ,dirp))
+ ,@body)
+ (closedir ,dirp)))))
+
+(defcfun ("readdir" c-readdir) :pointer
+ (dirp :pointer))
+
+(defun readdir (dirp)
+ (setf errno 0)
+ (let ((dirent (c-readdir dirp)))
+ (if (null-pointer-p dirent)
+ (if (zerop errno)
+ nil
+ (error-errno "readdir"))
+ dirent)))
+
+(defun dirent-ino (dirent)
+ (foreign-slot-value dirent '(:struct dirent) 'd-ino))
+
+(defun dirent-off (dirent)
+ (foreign-slot-value dirent '(:struct dirent) 'd-off))
+
+(defun dirent-reclen (dirent)
+ (foreign-slot-value dirent '(:struct dirent) 'd-reclen))
+
+(defun dirent-type (dirent)
+ (foreign-slot-value dirent '(:struct dirent) 'd-type))
+
+(defun dirent-name (dirent)
+ (let ((d-name (foreign-slot-value dirent '(:struct dirent) 'd-name)))
+ (convert-from-foreign d-name :string)))
+
+(defmacro do-dir ((var name) &body body)
+ (let ((dirp (gensym "DIRP-"))
+ (dirent (gensym "DIRENT-")))
+ `(with-dir (,dirp ,name)
+ (loop
+ (let ((,dirent (readdir ,dirp)))
+ (unless ,dirent
+ (return))
+ (let ((,var ,dirent))
+ ,@body))))))
+
+#+test
+(do-dir (df "/")
+ (format t "~&~S ~S ~S ~S ~S~%"
+ (dirent-ino df)
+ (dirent-off df)
+ (dirent-reclen df)
+ (dirent-type df)
+ (dirent-name df)))
diff --git a/cffi-fcntl.asd b/cffi-fcntl.asd
deleted file mode 100644
index 7fc105a..0000000
--- a/cffi-fcntl.asd
+++ /dev/null
@@ -1,36 +0,0 @@
-;;
-;; cffi-fcntl - Common Lisp wrapper for fcntl.h
-;;
-;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
-;;
-;; Permission to use, copy, modify, and distribute this software for any
-;; purpose with or without fee is hereby granted, provided that the above
-;; copyright notice and this permission notice appear in all copies.
-;;
-;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-;;
-
-(in-package :common-lisp-user)
-
-(defpackage :cffi-fcntl.system
- (:use :common-lisp :asdf))
-
-(in-package :cffi-fcntl.system)
-
-(defsystem :cffi-fcntl
- :name "cffi-fcntl"
- :author "Thomas de Grivel <thoxdg@gmail.com>"
- :version "0.1"
- :description "Common Lisp wrapper for fcntl.h"
- :defsystem-depends-on ("cffi-grovel")
- :depends-on ("cffi" "cffi-errno")
- :components
- ((:file "package")
- (:cffi-grovel-file "grovel-fcntl" :depends-on ("package"))
- (:file "cffi-fcntl" :depends-on ("grovel-fcntl"))))
diff --git a/cffi-fcntl.lisp b/cffi-fcntl.lisp
deleted file mode 100644
index f90528c..0000000
--- a/cffi-fcntl.lisp
+++ /dev/null
@@ -1,85 +0,0 @@
-;;
-;; cffi-fcntl - Common Lisp wrapper for fcntl.h
-;;
-;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
-;;
-;; Permission to use, copy, modify, and distribute this software for any
-;; purpose with or without fee is hereby granted, provided that the above
-;; copyright notice and this permission notice appear in all copies.
-;;
-;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-;;
-
-(in-package :cffi-fcntl)
-
-(defcfun ("fcntl" c-fcntl) :int
- (fd :int)
- (cmd :int))
-
-(defcfun ("fcntl" c-fcntl/int) :int
- (fd :int)
- (cmd :int)
- (arg :int))
-
-(defcfun ("fcntl" c-fcntl/pointer) :int
- (fd :int)
- (cmd :int)
- (arg :pointer))
-
-(defun getfl (fd)
- (c-fcntl fd +f-getfl+))
-
-(defun setfl (fd flags)
- (c-fcntl/int fd +f-setfl+ flags))
-
-(defcfun ("open" c-open/2) :int
- (pathname :string)
- (flags :int))
-
-(defcfun ("open" c-open/3) :int
- (pathname :string)
- (flags :int)
- (mode mode-t))
-
-(defun open (pathname flags &optional mode)
- (let ((fd (if (= 0 (logand flags +o-creat+))
- (c-open/2 pathname flags)
- (c-open/3 pathname flags mode))))
- (when (< fd 0)
- (error-errno "open"))
- fd))
-
-(defcfun ("openat" c-openat/3) :int
- (dirfd :int)
- (pathname :string)
- (flags :int))
-
-(defcfun ("openat" c-openat/4) :int
- (dirfd :int)
- (pathname :string)
- (flags :int)
- (mode mode-t))
-
-(defun openat (dirfd pathname flags &optional mode)
- (let ((fd (if (= 0 (logand flags +o-creat+))
- (c-openat/3 dirfd pathname flags)
- (c-openat/4 dirfd pathname flags mode))))
- (when (< fd 0)
- (error-errno "openat"))
- fd))
-
-(defcfun ("creat" c-creat) :int
- (file :string)
- (mode mode-t))
-
-(defun creat (file mode)
- (let ((fd (c-creat file mode)))
- (when (< fd 0)
- (error-errno "creat"))
- fd))
diff --git a/grovel-dirent.lisp b/grovel-dirent.lisp
new file mode 100644
index 0000000..2c116ac
--- /dev/null
+++ b/grovel-dirent.lisp
@@ -0,0 +1,42 @@
+;;
+;; cffi-dirent - Common Lisp wrapper for dirent.h
+;;
+;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
+;;
+;; Permission to use, copy, modify, and distribute this software for any
+;; purpose with or without fee is hereby granted, provided that the above
+;; copyright notice and this permission notice appear in all copies.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+;;
+
+(in-package :cffi-dirent)
+
+(include "dirent.h")
+;(include "fcntl.h")
+
+(ctype ino-t "ino_t")
+(ctype off-t "off_t")
+
+(cstruct dirent "struct dirent"
+ (d-ino "d_ino" :type ino-t)
+ (d-off "d_off" :type off-t)
+ (d-reclen "d_reclen" :type :unsigned-short)
+ (d-type "d_type" :type :unsigned-char)
+ (d-name "d_name" :type :char :count 256))
+
+(constant (+dt-unknown+ "DT_UNKNOWN"))
+(constant (+dt-fifo+ "DT_FIFO"))
+(constant (+dt-chr+ "DT_CHR"))
+(constant (+dt-dir+ "DT_DIR"))
+(constant (+dt-blk+ "DT_BLK"))
+(constant (+dt-reg+ "DT_REG"))
+(constant (+dt-lnk+ "DT_LNK"))
+(constant (+dt-sock+ "DT_SOCK"))
+(constant (+dt-wht+ "DT_WHT"))
diff --git a/grovel-fcntl.lisp b/grovel-fcntl.lisp
deleted file mode 100644
index 7431fc9..0000000
--- a/grovel-fcntl.lisp
+++ /dev/null
@@ -1,160 +0,0 @@
-;;
-;; cffi-fcntl - Common Lisp wrapper for fcntl.h
-;;
-;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
-;;
-;; Permission to use, copy, modify, and distribute this software for any
-;; purpose with or without fee is hereby granted, provided that the above
-;; copyright notice and this permission notice appear in all copies.
-;;
-;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-;;
-
-(in-package :cffi-fcntl)
-
-(include "fcntl.h")
-
-(ctype mode-t "mode_t")
-(ctype off-t "off_t")
-(ctype pid-t "pid_t")
-
-(constant (+s-ifmt+ "S_IFMT"))
-(constant (+s-ifdir+ "S_IFDIR"))
-(constant (+s-ifchr+ "S_IFCHR"))
-(constant (+s-ifblk+ "S_IFBLK"))
-(constant (+s-ififo+ "S_IFIFO"))
-(constant (+s-iflnk+ "S_IFLNK"))
-(constant (+s-ifsock+ "S_IFSOCK"))
-(constant (+s-isuid+ "S_ISUID"))
-(constant (+s-isgid+ "S_ISGID"))
-(constant (+s-irusr+ "S_IRUSR"))
-(constant (+s-iwusr+ "S_IWUSR"))
-(constant (+s-ixusr+ "S_IXUSR"))
-(constant (+s-irwxu+ "S_IRWXU"))
-(constant (+s-irgrp+ "S_IRGRP"))
-(constant (+s-iwgrp+ "S_IWGRP"))
-(constant (+s-ixgrp+ "S_IXGRP"))
-(constant (+s-irwxg+ "S_IRWXG"))
-(constant (+s-iroth+ "S_IROTH"))
-(constant (+s-iwoth+ "S_IWOTH"))
-(constant (+s-ixoth+ "S_IXOTH"))
-(constant (+s-irwxo+ "S_IRWXO"))
-
-(constant (+r-ok+ "R_OK"))
-(constant (+w-ok+ "W_OK"))
-(constant (+x-ok+ "X_OK"))
-(constant (+f-ok+ "F_OK"))
-
-(constant (+seek-set+ "SEEK_SET"))
-(constant (+seek-cur+ "SEEK_CUR"))
-(constant (+seek-end+ "SEEK_END"))
-
-(constant (+o-rdonly+ "O_RDONLY"))
-(constant (+o-wronly+ "O_WRONLY"))
-(constant (+o-rdwr+ "O_RDWR"))
-(constant (+o-creat+ "O_CREAT"))
-(constant (+o-excl+ "O_EXCL"))
-(constant (+o-noctty+ "O_NOCTTY"))
-(constant (+o-trunc+ "O_TRUNC"))
-(constant (+o-append+ "O_APPEND"))
-(constant (+o-nonblock+ "O_NONBLOCK"))
-(constant (+o-ndelay+ "O_NDELAY"))
-(constant (+o-sync+ "O_SYNC"))
-(constant (+o-sync+ "O_FSYNC"))
-(constant (+o-async+ "O_ASYNC"))
-(constant (+o-largefile+ "O_LARGEFILE"))
-(constant (+o-directory+ "O_DIRECTORY"))
-(constant (+o-nofollow+ "O_NOFOLLOW"))
-(constant (+o-cloexec+ "O_CLOEXEC"))
-;(constant (+o-direct+ "O_DIRECT"))
-;(constant (+o-noatime+ "O_NOATIME"))
-;(constant (+o-path+ "O_PATH"))
-(constant (+o-dsync+ "O_DSYNC"))
-;(constant (+o-tmpfile+ "O_TMPFILE"))
-
-(constant (+f-getlk+ "F_GETLK"))
-(constant (+f-setlk+ "F_SETLK"))
-(constant (+f-setlkw+ "F_SETLKW"))
-(constant (+f-getlk64+ "F_GETLK64"))
-(constant (+f-setlk64+ "F_SETLK64"))
-(constant (+f-setlkw64+ "F_SETLKW64"))
-
-(constant (+f-dupfd+ "F_DUPFD"))
-(constant (+f-getfd+ "F_GETFD"))
-(constant (+f-setfd+ "F_SETFD"))
-
-(constant (+f-getfl+ "F_GETFL"))
-(constant (+f-setfl+ "F_SETFL"))
-
-(constant (+f-setown+ "F_SETOWN"))
-(constant (+f-getown+ "F_GETOWN"))
-
-;(constant (+f-setsig+ "F_SETSIG"))
-;(constant (+f-getsig+ "F_GETSIG"))
-
-;(constant (+f-setown-ex+ "F_SETOWN_EX"))
-;(constant (+f-getown-ex+ "F_GETOWN_EX"))
-
-;(constant (+f-setlease+ "F_SETLEASE"))
-;(constant (+f-getlease+ "F_GETLEASE"))
-;(constant (+f-notify+ "F_NOTIFY"))
-;(constant (+f-setpipe-sz+ "F_SETPIPE_SZ"))
-;(constant (+f-getpipe-sz+ "F_GETPIPE_SZ"))
-
-(constant (+f-dupfd-cloexec+ "F_DUPFD_CLOEXEC"))
-
-;(constant (+f-cloexec+ "F_CLOEXEC"))
-
-(constant (+f-rdlck+ "F_RDLCK"))
-(constant (+f-wrlck+ "F_WRLCK"))
-(constant (+f-unlck+ "F_UNLCK"))
-
-(constant (+f-exlck+ "F_EXLCK"))
-(constant (+f-shlck+ "F_SHLCK"))
-
-(constant (+lock-sh+ "LOCK_SH"))
-(constant (+lock-ex+ "LOCK_EX"))
-(constant (+lock-nb+ "LOCK_NB"))
-(constant (+lock-un+ "LOCK_UN"))
-
-;(constant (+lock-mand+ "LOCK_MAND"))
-;(constant (+lock-read+ "LOCK_READ"))
-;(constant (+lock-write+ "LOCK_WRITE"))
-;(constant (+lock-rw+ "LOCK_RW"))
-
-;(constant (+dn-access+ "DN_ACCESS"))
-;(constant (+dn-modify+ "DN_MODIFY"))
-;(constant (+dn-create+ "DN_CREATE"))
-;(constant (+dn-delete+ "DN_DELETE"))
-;(constant (+dn-rename+ "DN_RENAME"))
-;(constant (+dn-attrib+ "DN_ATTRIB"))
-;(constant (+dn-multishot+ "DN_MULTISHOT"))
-
-(constant (+posix-fadv-normal+ "POSIX_FADV_NORMAL"))
-(constant (+posix-fadv-random+ "POSIX_FADV_RANDOM"))
-(constant (+posix-fadv-sequential+ "POSIX_FADV_SEQUENTIAL"))
-(constant (+posix-fadv-willneed+ "POSIX_FADV_WILLNEED"))
-(constant (+posix-fadv-dontneed+ "POSIX_FADV_DONTNEED"))
-(constant (+posix-fadv-noreuse+ "POSIX_FADV_NOREUSE"))
-
-;(constant (+sync-file-range-wait-before+ "SYNC_FILE_RANGE_WAIT_BEFORE"))
-;(constant (+sync-file-range-write+ "SYNC_FILE_RANGE_WRITE"))
-;(constant (+sync-file-range-wait-after+ "SYNC_FILE_RANGE_WAIT_AFTER"))
-
-;(constant (+splice-f-move+ "SPLICE_F_MOVE"))
-;(constant (+splice-f-nonblock+ "SPLICE_F_NONBLOCK"))
-;(constant (+splice-f-more+ "SPLICE_F_MORE"))
-;(constant (+splice-f-gift+ "SPLICE_F_GIFT"))
-
-;(constant (+falloc-fl-keep-size+ "FALLOC_FL_KEEP_SIZE"))
-;(constant (+falloc-fl-punch-hole+ "FALLOC_FL_PUNCH_HOLE"))
-;(constant (+falloc-fl-collapse-range+ "FALLOC_FL_COLLAPSE_RANGE"))
-;(constant (+falloc-fl-zero-range+ "FALLOC_FL_ZERO_RANGE"))
-
-;(constant (+max-handle-sz+ "MAX_HANDLE_SZ"))
diff --git a/package.lisp b/package.lisp
index 651168c..c47b394 100644
--- a/package.lisp
+++ b/package.lisp
@@ -1,5 +1,5 @@
;;
-;; cffi-fcntl - Common Lisp wrapper for fcntl.h
+;; cffi-dirent - Common Lisp wrapper for dirent.h
;;
;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
;;
@@ -18,8 +18,8 @@
(in-package :common-lisp)
-(defpackage :cffi-fcntl
- (:nicknames :fcntl)
+(defpackage :cffi-dirent
+ (:nicknames :dirent)
(:use
:cffi
:common-lisp
@@ -27,95 +27,22 @@
(:shadow
#:open)
(:export
- #:c-fcntl
- #:c-fcntl/int
- #:c-fcntl/pointer
- #:getfl
- #:setfl
- #:open
- #:openat
- #:creat
- #:+o-rdonly+
- #:+o-wronly+
- #:+o-rdwr+
- #:+o-creat+
- #:+o-excl+
- #:+o-noctty+
- #:+o-trunc+
- #:+o-append+
- #:+o-nonblock+
- #:+o-ndelay+
- #:+o-sync+
- #:+o-sync+
- #:+o-async+
- #:+o-largefile+
- #:+o-directory+
- #:+o-nofollow+
- #:+o-cloexec+
- #:+o-direct+
- #:+o-noatime+
- #:+o-path+
- #:+o-dsync+
- #:+o-tmpfile+
- #:+f-getlk+
- #:+f-setlk+
- #:+f-setlkw+
- #:+f-getlk64+
- #:+f-setlk64+
- #:+f-setlkw64+
- #:+f-dupfd+
- #:+f-getfd+
- #:+f-setfd+
- #:+f-getfl+
- #:+f-setfl+
- #:+f-setown+
- #:+f-getown+
- #:+f-setsig+
- #:+f-getsig+
- #:+f-setown-ex+
- #:+f-getown-ex+
- #:+f-setlease+
- #:+f-getlease+
- #:+f-notify+
- #:+f-setpipe-sz+
- #:+f-getpipe-sz+
- #:+f-dupfd-cloexec+
- #:+f-cloexec+
- #:+f-rdlck+
- #:+f-wrlck+
- #:+f-unlck+
- #:+f-exlck+
- #:+f-shlck+
- #:+lock-sh+
- #:+lock-ex+
- #:+lock-nb+
- #:+lock-un+
- #:+lock-mand+
- #:+lock-read+
- #:+lock-write+
- #:+lock-rw+
- #:+dn-access+
- #:+dn-modify+
- #:+dn-create+
- #:+dn-delete+
- #:+dn-rename+
- #:+dn-attrib+
- #:+dn-multishot+
- #:+posix-fadv-normal+
- #:+posix-fadv-random+
- #:+posix-fadv-sequential+
- #:+posix-fadv-willneed+
- #:+posix-fadv-dontneed+
- #:+posix-fadv-noreuse+
- #:+sync-file-range-wait-before+
- #:+sync-file-range-write+
- #:+sync-file-range-wait-after+
- #:+splice-f-move+
- #:+splice-f-nonblock+
- #:+splice-f-more+
- #:+splice-f-gift+
- #:+falloc-fl-keep-size+
- #:+falloc-fl-punch-hole+
- #:+falloc-fl-collapse-range+
- #:+falloc-fl-zero-range+
- #:+max-handle-sz+))
+ #:c-opendir
+ #:c-fdopendir
+ #:c-closedir
+ #:c-readdir
+ #:c-readdir-r
+ #:c-rewinddir
+ #:c-seekdir
+ #:c-telldir
+ #:opendir
+ #:fdopendir
+ #:closedir
+ #:with-dir
+ #:readdir
+ #:dirent-name
+ #:do-dir
+ #:readdir-r
+ #:rewinddir
+ #:seekdir
+ #:telldir))