X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Funix.lisp;h=248f72e1c77cfa96b319266f07017bdfe60fe9df;hb=0dda5090b6c16a641000b4eb2dcd479f39b784ca;hp=115277ad50e7a0c8d7cf072b18c57fea000d4e4a;hpb=b67c2d7522c0b73a18e316faa2b81d7c8b187706;p=sbcl.git diff --git a/src/code/unix.lisp b/src/code/unix.lisp index 115277a..248f72e 100644 --- a/src/code/unix.lisp +++ b/src/code/unix.lisp @@ -276,6 +276,7 @@ corresponds to NAME, or NIL if there is none." (void-syscall ("access" c-string int) path mode)) ;;; values for the second argument to UNIX-LSEEK +;;; Note that nowadays these are called SEEK_SET, SEEK_CUR, and SEEK_END (defconstant l_set 0) ; to set the file pointer (defconstant l_incr 1) ; to increment the file pointer (defconstant l_xtnd 2) ; to extend the file size @@ -881,6 +882,7 @@ corresponds to NAME, or NIL if there is none." (%extract-stat-results (addr buf)) fd (addr buf)))) +#!-win32 (defun fd-type (fd) (declare (type unix-fd fd)) (let ((fmt (logand @@ -948,8 +950,8 @@ corresponds to NAME, or NIL if there is none." (defun nanosleep (secs nsecs) (with-alien ((req (struct timespec)) (rem (struct timespec))) - (setf (slot req 'tv-sec) secs) - (setf (slot req 'tv-nsec) nsecs) + (setf (slot req 'tv-sec) secs + (slot req 'tv-nsec) nsecs) (loop while (and (eql sb!unix:eintr (nth-value 1 (int-syscall ("nanosleep" (* (struct timespec)) @@ -974,10 +976,12 @@ corresponds to NAME, or NIL if there is none." (rem-nsec (slot rem 'tv-nsec))) (when (or (> secs rem-sec) (and (= secs rem-sec) (>= nsecs rem-nsec))) - (setf secs rem-sec + ;; Update for next round. + (setf secs rem-sec nsecs rem-nsec) t))) - do (rotatef req rem)))) + do (setf (slot req 'tv-sec) (slot rem 'tv-sec) + (slot req 'tv-nsec) (slot rem 'tv-nsec))))) (defun unix-get-seconds-west (secs) (multiple-value-bind (ignore seconds dst) (get-timezone secs)