X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Fposix-tests.lisp;h=2a97c4c44341821bf27b17000814b3a3ca469a39;hb=f86c1ec4e8782fd24c758c9775c8592a16768215;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..2a97c4c 100644 --- a/contrib/sb-posix/posix-tests.lisp +++ b/contrib/sb-posix/posix-tests.lisp @@ -792,3 +792,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")