1.0.39.19: asdf2 merge from upstream
[sbcl.git] / contrib / sb-posix / posix-tests.lisp
index 2a97c4c..78f99ba 100644 (file)
       (sb-posix:mkdir #-win32 "/" #+win32 "C:/" 0)
     (sb-posix:syscall-error (c)
       (sb-posix:syscall-errno c)))
-  #-win32
-  #.sb-posix::eexist
+  #+darwin
+  #.sb-posix:eisdir
   #+win32
-  #.sb-posix:eacces)
+  #.sb-posix:eacces
+  #-(or darwin win32)
+  #.sb-posix::eexist)
 
 (define-eacces-test mkdir.error.3
   (let* ((dir (merge-pathnames
       (sb-posix:rmdir #-win32 "/" #+win32 "C:/")
     (sb-posix:syscall-error (c)
       (sb-posix:syscall-errno c)))
-  #-win32
-  #.sb-posix::ebusy
+  #+darwin
+  #.sb-posix:eisdir
   #+win32
-  #.sb-posix::eacces)
+  #.sb-posix::eacces
+  #-(or darwin win32)
+  #.sb-posix::ebusy)
 
 (deftest rmdir.error.4
   (let* ((dir (ensure-directories-exist
         (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)
   #+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
       (sb-posix:closedir dir)))
   t)
 
+#-darwin
 (deftest readdir/dirent-name
     (let ((dir (sb-posix:opendir *current-directory*)))
       (unwind-protect
   ;; 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)
           (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
                (values (integerp fd) (pathname-name pathname))
             (delete-file temp)))))
   t "mkstemp-1")
+
+(deftest envstuff
+    (let ((name1 "ASLIFJLSDKFJKAHGSDKLJH")
+          (name2 "KJHFKLJDSHIUYHBSDNFCBH"))
+      (values (sb-posix:getenv name1)
+              (sb-posix:getenv name1)
+              (progn
+                (sb-posix:putenv (concatenate 'string name1 "=name1,test1"))
+                (sb-ext:gc :full t)
+                (sb-posix:getenv name1))
+              (progn
+                (sb-posix:setenv name1 "name1,test2" 0)
+                (sb-ext:gc :full t)
+                (sb-posix:getenv name1))
+              (progn
+                (sb-posix:setenv name2 "name2,test1" 0)
+                (sb-ext:gc :full t)
+                (sb-posix:getenv name2))
+              (progn
+                (sb-posix:setenv name2 "name2,test2" 1)
+                (sb-ext:gc :full t)
+                (sb-posix:getenv name2))))
+  nil
+  nil
+  "name1,test1"
+  "name1,test1"
+  "name2,test1"
+  "name2,test2")