+
+#-win32
+(deftest mkstemp.1
+ (multiple-value-bind (fd temp)
+ (sb-posix:mkstemp (make-pathname
+ :name "mkstemp-1"
+ :type "XXXXXX"
+ :defaults *test-directory*))
+ (let ((pathname (sb-ext:parse-native-namestring temp)))
+ (unwind-protect
+ (values (integerp fd) (pathname-name pathname))
+ (delete-file temp))))
+ t "mkstemp-1")
+
+;#-(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
+ (sb-posix:mkdtemp (make-pathname
+ :name "mkdtemp-1"
+ :type "XXXXXX"
+ :defaults *test-directory*))
+ nil
+ *default-pathname-defaults*
+ :as-directory t)))
+ (unwind-protect
+ (values (let* ((xxx (car (last (pathname-directory pathname))))
+ (p (position #\. xxx)))
+ (and p (subseq xxx 0 p)))
+ (pathname-name pathname)
+ (pathname-type pathname))
+ (sb-posix:rmdir pathname)))
+ "mkdtemp-1" nil nil)
+
+#-win32
+(deftest mktemp.1
+ (let ((pathname (sb-ext:parse-native-namestring
+ (sb-posix:mktemp #p"mktemp.XXXXXX"))))
+ (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")
+
+(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")