X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Finterface.lisp;h=0995a1d23c20cf2057885d942d4391ac6a64d9f1;hb=7c75cd363da90afe334e936aad2b63437ea5905d;hp=c01f0310709655f0009717267202835dd41b1c39;hpb=1448e312cf2de1103b8f771b0ad3408efe43bbdb;p=sbcl.git diff --git a/contrib/sb-posix/interface.lisp b/contrib/sb-posix/interface.lisp index c01f031..0995a1d 100644 --- a/contrib/sb-posix/interface.lisp +++ b/contrib/sb-posix/interface.lisp @@ -126,6 +126,15 @@ (define-call* "unlink" int minusp (pathname filename)) (define-call #-netbsd "opendir" #+netbsd "_opendir" (* t) null-alien (pathname filename)) +#+inode64 +(define-call ("readdir" :c-name "readdir$INODE64" :options :largefile) + (* dirent) + ;; readdir() has the worst error convention in the world. It's just + ;; too painful to support. (return is NULL _and_ errno "unchanged" + ;; is not an error, it's EOF). + not + (dir (* t))) +#-inode64 (define-call (#-netbsd "readdir" #+netbsd "_readdir" :options :largefile) (* dirent) ;; readdir() has the worst error convention in the world. It's just @@ -514,7 +523,9 @@ (defmacro define-stat-call (name arg designator-fun type) ;; FIXME: this isn't the documented way of doing this, surely? - (let ((lisp-name (lisp-for-c-symbol name))) + (let ((lisp-name (lisp-for-c-symbol name)) + (real-name #+inode64 (format nil "~A$INODE64" name) + #-inode64 name)) `(progn (export ',lisp-name :sb-posix) (declaim (inline ,lisp-name)) @@ -522,7 +533,7 @@ (declare (type (or null stat) stat)) (with-alien-stat a-stat () (let ((r (alien-funcall - (extern-alien ,(real-c-name (list name :options :largefile)) ,type) + (extern-alien ,(real-c-name (list real-name :options :largefile)) ,type) (,designator-fun ,arg) a-stat))) (when (minusp r)