X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Fposix-tests.lisp;h=b3ce8a2352602108112190248bd69a914d92ed72;hb=9837343101c3da7b3a8f94609ec116ec5025436a;hp=92fef5f6ef4fd24fdf4551058aa67b4a2c4ec6a0;hpb=e4d73846ea60ae6cba79c32dde6d9f88b7540146;p=sbcl.git diff --git a/contrib/sb-posix/posix-tests.lisp b/contrib/sb-posix/posix-tests.lisp index 92fef5f..b3ce8a2 100644 --- a/contrib/sb-posix/posix-tests.lisp +++ b/contrib/sb-posix/posix-tests.lisp @@ -405,6 +405,7 @@ (ignore-errors (sb-posix:unlink name)))) nil) +#-hpux ; fix: cant handle c-vargs (deftest open.error.1 (handler-case (sb-posix:open *test-directory* sb-posix::o-wronly) (sb-posix:syscall-error (c) @@ -414,21 +415,21 @@ #+win32 #.sb-posix:eacces) -#-(or (and x86-64 linux) win32) +#-(or (and x86-64 (or linux sunos)) win32) (deftest fcntl.1 (let ((fd (sb-posix:open "/dev/null" sb-posix::o-nonblock))) (= (sb-posix:fcntl fd sb-posix::f-getfl) sb-posix::o-nonblock)) t) ;; On AMD64/Linux O_LARGEFILE is always set, even though the whole ;; flag makes no sense. -#+(and x86-64 linux) +#+(and x86-64 (or linux sunos)) (deftest fcntl.1 (let ((fd (sb-posix:open "/dev/null" sb-posix::o-nonblock))) (/= 0 (logand (sb-posix:fcntl fd sb-posix::f-getfl) sb-posix::o-nonblock))) t) -#-win32 +#-(or hpux win32) ; fix: cant handle c-vargs (deftest fcntl.flock.1 (locally (declare (sb-ext:muffle-conditions sb-ext:compiler-note)) (let ((flock (make-instance 'sb-posix:flock @@ -643,6 +644,7 @@ ;; Same thing, but with a very long link target (which doesn't have ;; to exist). This tests the array adjustment in the wrapper, ;; provided that the target's length is long enough. + #-hpux ; arg2 to readlink is 80, and arg0 is larger than that (deftest readlink.2 (let ((target-pathname (make-pathname :name (make-string 255 :initial-element #\a) @@ -765,7 +767,10 @@ (delete-file temp)))) t "mkstemp-1") -#-win32 +;#-(or win32 sunos hpux) +;;;; mkdtemp is unimplemented on at least Solaris 10 +#-(or win32 hpux) +;;; But it is implemented on OpenSolaris 2008.11 (deftest mkdtemp.1 (let ((pathname (sb-ext:parse-native-namestring @@ -792,3 +797,25 @@ (values (equal "mktemp" (pathname-name pathname)) (not (equal "XXXXXX" (pathname-type pathname))))) t t) + +#-win32 +(deftest mkstemp.null-terminate + (let* ((default (make-pathname :directory '(:absolute "tmp"))) + (filename (namestring (make-pathname :name "mkstemp-1" + :type "XXXXXX" + :defaults default))) + ;; The magic 64 is the filename length that happens to + ;; trigger the no null termination bug at least on my + ;; machine on a certain build. + (n (- 64 (length (sb-ext:string-to-octets filename))))) + (multiple-value-bind (fd temp) + (sb-posix:mkstemp (make-pathname + :name "mkstemp-1" + :type (format nil "~AXXXXXX" + (make-string n :initial-element #\x)) + :defaults default)) + (let ((pathname (sb-ext:parse-native-namestring temp))) + (unwind-protect + (values (integerp fd) (pathname-name pathname)) + (delete-file temp))))) + t "mkstemp-1")