X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Finterface.lisp;h=9d248ddf01e503a1956b2f1abb4716120eccee39;hb=93dd7df18bb1774e6620df84598122d8650127e5;hp=c01f0310709655f0009717267202835dd41b1c39;hpb=1448e312cf2de1103b8f771b0ad3408efe43bbdb;p=sbcl.git diff --git a/contrib/sb-posix/interface.lisp b/contrib/sb-posix/interface.lisp index c01f031..9d248dd 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 @@ -253,21 +262,21 @@ ;; uid, gid (define-call "geteuid" uid-t never-fails) ; "always successful", it says - (define-call "getresuid" uid-t never-fails) +#-sunos (define-call "getresuid" uid-t never-fails) (define-call "getuid" uid-t never-fails) (define-call "seteuid" int minusp (uid uid-t)) - (define-call "setfsuid" int minusp (uid uid-t)) +#-sunos (define-call "setfsuid" int minusp (uid uid-t)) (define-call "setreuid" int minusp (ruid uid-t) (euid uid-t)) - (define-call "setresuid" int minusp (ruid uid-t) (euid uid-t) (suid uid-t)) +#-sunos (define-call "setresuid" int minusp (ruid uid-t) (euid uid-t) (suid uid-t)) (define-call "setuid" int minusp (uid uid-t)) (define-call "getegid" gid-t never-fails) (define-call "getgid" gid-t never-fails) - (define-call "getresgid" gid-t never-fails) +#-sunos (define-call "getresgid" gid-t never-fails) (define-call "setegid" int minusp (gid gid-t)) - (define-call "setfsgid" int minusp (gid gid-t)) +#-sunos (define-call "setfsgid" int minusp (gid gid-t)) (define-call "setgid" int minusp (gid gid-t)) (define-call "setregid" int minusp (rgid gid-t) (egid gid-t)) - (define-call "setresgid" int minusp (rgid gid-t) (egid gid-t) (sgid gid-t)) +#-sunos (define-call "setresgid" int minusp (rgid gid-t) (egid gid-t) (sgid gid-t)) ;; processes, signals (define-call "alarm" int never-fails (seconds unsigned)) @@ -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)