X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Finterface.lisp;h=802593030993f55b07abe3bcf91d5df329b5924e;hb=8aaa977f8614614517e62e212914fdbd19c1b7e9;hp=4669aaffbd4b2176e2e48f0982e59e834ac14c50;hpb=4d0b87793a047baecf2403455ddca1a82f44a41b;p=sbcl.git diff --git a/contrib/sb-posix/interface.lisp b/contrib/sb-posix/interface.lisp index 4669aaf..8025930 100644 --- a/contrib/sb-posix/interface.lisp +++ b/contrib/sb-posix/interface.lisp @@ -281,26 +281,35 @@ ;; uid, gid (define-call "geteuid" uid-t never-fails) ; "always successful", it says -#-sunos (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)) -#-sunos (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)) -#-sunos (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) -#-sunos (define-call "getresgid" gid-t never-fails) + #-sunos + (define-call "getresgid" gid-t never-fails) (define-call "setegid" int minusp (gid gid-t)) -#-sunos (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)) -#-sunos (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)) - + ;; exit and abort, not much point inlining these + (define-simple-call abort void) + (define-simple-call exit void (status int)) + (define-simple-call _exit void (status int)) ;; FIXME this is a lie, of course this can fail, but there's no ;; error handling here yet! @@ -442,8 +451,29 @@ not supported." (define-call "munmap" int minusp (start sb-sys:system-area-pointer) (length unsigned)) +#-win32 (define-call "msync" int minusp (addr sb-sys:system-area-pointer) (length unsigned) (flags int))) +#+win32 +(progn + ;; No attempt is made to offer a full mmap-like interface on Windows. + ;; It would be possible to do so (and has been done by AK on his + ;; branch), but the use case is unclear to me. However, the following + ;; definitions are needed to keep existing code in sb-simple-streams + ;; running. --DFL + (defconstant PROT-READ #x02) + (defconstant PROT-WRITE #x04) + (defconstant PROT-EXEC #x10) + (defconstant PROT-NONE 0) + (defconstant MAP-SHARED 0) + (defconstant MAP-PRIVATE 1) + (defconstant MS-ASYNC nil) + (defconstant MS-SYNC nil) + (export ;export on the fly like define-call + (defun msync (address length flags) + (declare (ignore flags)) + (when (zerop (sb-win32:flush-view-of-file address length)) + (sb-win32::win32-error "FlushViewOfFile"))))) ;;; mlockall, munlockall (define-call "mlockall" int minusp (flags int)) @@ -722,8 +752,9 @@ not supported." result))) (export 'utime :sb-posix) (defun utime (filename &optional access-time modification-time) - (let ((fun (extern-alien "utime" (function int (c-string :not-null t) - (* alien-utimbuf)))) + (let ((fun (extern-alien #-netbsd "utime" #+netbsd "_utime" + (function int (c-string :not-null t) + (* alien-utimbuf)))) (name (filename filename))) (if (not (and access-time modification-time)) (alien-funcall fun name nil)