X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-posix%2Fposix-tests.lisp;h=4761a221662452a67bfcc8484b5625d6add366aa;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=c95359ef3d64463aba17b5faeb4c39fe2be3967a;hpb=126e0a851c7e170b13c206c530083fc48572ea60;p=sbcl.git diff --git a/contrib/sb-posix/posix-tests.lisp b/contrib/sb-posix/posix-tests.lisp index c95359e..4761a22 100644 --- a/contrib/sb-posix/posix-tests.lisp +++ b/contrib/sb-posix/posix-tests.lisp @@ -12,6 +12,11 @@ (defvar *current-directory* *default-pathname-defaults*) (defvar *this-file* *load-truename*) + +(eval-when (:compile-toplevel :load-toplevel) + (defconstant +mode-rwx-all+ (logior sb-posix::s-irusr sb-posix::s-iwusr sb-posix::s-ixusr + sb-posix::s-irgrp sb-posix::s-iwgrp sb-posix::s-ixgrp + sb-posix::s-iroth sb-posix::s-iwoth sb-posix::s-ixoth))) (deftest chdir.1 (sb-posix:chdir *test-directory*) @@ -112,6 +117,7 @@ (sb-posix:syscall-errno c))) #.sb-posix::enotdir) +#-sunos ; Apparently gives EINVAL on SunOS 8, which doesn't make sense (deftest rmdir.error.3 (handler-case (sb-posix:rmdir "/") @@ -132,8 +138,10 @@ (sb-posix:syscall-error (c) (delete-file file) (sb-posix:rmdir dir) - (sb-posix:syscall-errno c)))) - #.sb-posix::enotempty) + (let ((errno (sb-posix:syscall-errno c))) + ;; documented by POSIX + (or (= errno sb-posix::eexist) (= errno sb-posix::enotempty)))))) + t) (deftest rmdir.error.5 (let* ((dir (merge-pathnames @@ -142,8 +150,8 @@ (dir2 (merge-pathnames (make-pathname :directory '(:relative "unremovable")) dir))) - (sb-posix:mkdir dir #xffffffff) - (sb-posix:mkdir dir2 #xffffffff) + (sb-posix:mkdir dir +mode-rwx-all+) + (sb-posix:mkdir dir2 +mode-rwx-all+) (sb-posix:chmod dir 0) (handler-case (sb-posix:rmdir dir2) @@ -162,8 +170,11 @@ #.(logior sb-posix::s-iread sb-posix::s-iwrite sb-posix::s-iexec)) (deftest stat.2 - (let* ((stat (sb-posix:stat "/root")) + (let* ((stat (sb-posix:stat "/")) (mode (sb-posix::stat-mode stat))) + ;; it's logically possible for / to be writeable by others... but + ;; if it is, either someone is playing with strange security + ;; modules or they want to know about it anyway. (logand mode sb-posix::s-iwoth)) 0) @@ -193,7 +204,7 @@ (file (merge-pathnames (make-pathname :name "unstatable") dir))) - (sb-posix:mkdir dir #xffffffff) + (sb-posix:mkdir dir +mode-rwx-all+) (with-open-file (s file :direction :output) (write "" :stream s)) (sb-posix:chmod dir 0) @@ -222,32 +233,32 @@ (deftest stat-mode.1 (with-stat-mode (mode *test-directory*) (sb-posix:s-isreg mode)) - 0) + nil) (deftest stat-mode.2 (with-stat-mode (mode *test-directory*) - (zerop (sb-posix:s-isdir mode))) - nil) + (sb-posix:s-isdir mode)) + t) (deftest stat-mode.3 (with-stat-mode (mode *test-directory*) (sb-posix:s-ischr mode)) - 0) + nil) (deftest stat-mode.4 (with-stat-mode (mode *test-directory*) (sb-posix:s-isblk mode)) - 0) + nil) (deftest stat-mode.5 (with-stat-mode (mode *test-directory*) (sb-posix:s-isfifo mode)) - 0) + nil) (deftest stat-mode.6 (with-stat-mode (mode *test-directory*) (sb-posix:s-issock mode)) - 0) + nil) (deftest stat-mode.7 (let ((link-pathname (make-pathname :name "stat-mode.7" @@ -256,9 +267,9 @@ (progn (sb-posix:symlink *test-directory* link-pathname) (with-lstat-mode (mode link-pathname) - (zerop (sb-posix:s-islnk mode)))) + (sb-posix:s-islnk mode))) (ignore-errors (sb-posix:unlink link-pathname)))) - nil) + t) (deftest stat-mode.8 (let ((pathname (make-pathname :name "stat-mode.8" @@ -268,9 +279,9 @@ (with-open-file (out pathname :direction :output) (write-line "test" out)) (with-stat-mode (mode pathname) - (zerop (sb-posix:s-isreg mode)))) + (sb-posix:s-isreg mode))) (ignore-errors (delete-file pathname)))) - nil) + t) ;;; see comment in filename's designator definition, in macros.lisp (deftest filename-designator.1