Commit 696e38f7 authored by Christophe Rhodes's avatar Christophe Rhodes
Browse files

0.8.7.22:

	RIP (physical) PATHNAME-VERSION significance
	... remove all internal discrimination based on the version
		field if the pathname involved has the Unix host.
	... parsing of a physical pathname namestring (i.e. again either
		explicitly or implicitly on the Unix host) never produces
		a version from the namestring.
	... make :if-exists :new-version behave like :if-exists :error,
		because despite weasel-words in CLHS someone might
		legitimately expect :if-exists :new-version not to
		clobber the old version.
	... (this latter needs to be revisited, when OPEN is made aware
		of logical pathnames and the wacky logic they impose; we
		can support :new-version with LPNs, but only if OPEN is
		clever).
	... make pathnames more likely to be read/print consistent, by
		throwing errors in more cases (we now pass PFD's test for
		that, not that it's that stringent).
	... throw errors on use of (:absolute :up) and friends in CL
		operators, but...
	... don't throw error on creation, and in fact test in sb-posix
		that we can use #p"/../" for what it means.
parent 60e88923
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -2234,6 +2234,18 @@ changes in sbcl-0.8.7 relative to sbcl-0.8.6:
    ** VALUES tranformer lost derived type.

changes in sbcl-0.8.8 relative to sbcl-0.8.7:
  * minor incompatible change: parsing of namestrings on a physical
    (Unix) host has changed; numbers after the final #\. in a
    namestring are no longer interpreted as a version field.  This is
    intented to be largely invisible to the user, except that the
    meaning of the namestring "*.*.*" has changed: it now refers to a
    pathname with :TYPE :WILD :NAME #<pattern "*.*">.  This namestring
    should usually be replaced by 
      (make-pathname :name :wild :type :wild :version :wild)
    with the added benefit that this is more likely to be portable.
    As a consequence of this change, the :IF-EXISTS :NEW-VERSION
    option to OPEN now signals an error if the file being opened
    exists; this may have an impact on existing code.
  * bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with
    second-resolution: integer multiples of 1/3600 between -24 and 24.
    (thanks to Vincent Arkesteijn)
@@ -2266,6 +2278,11 @@ changes in sbcl-0.8.8 relative to sbcl-0.8.7:
       or not a character is whitespace.
    ** MERGE-PATHNAMES handles the case when the pathname does not
       specify a name while the default-pathname specifies a version.
    ** Pathnames now stand a better chance of respecting print/read
       consistency.
    ** Attempting to use standardized file system operators with a
       pathname with invalid :DIRECTORY components signals a
       FILE-ERROR.

planned incompatible changes in 0.8.x:
  * (not done yet, but planned:) When the profiling interface settles
+3 −1
Original line number Diff line number Diff line
@@ -30,7 +30,9 @@ exec sbcl --noinform ~{~A ~}--eval \"(with-open-file (i \\\"$0\\\" :element-type
					      "--sysinit /dev/null"))
			initial-function)
  "Write an executable called OUTPUT-FILE which can be run from the shell, by 'linking' together code from FASLS.  Actually works by concatenating them and prepending a #! header"
  (with-open-file (out output-file :direction :output
  (with-open-file (out output-file
		       :direction :output
		       :if-exists :supersede
		       :element-type '(unsigned-byte 8))
    (write-sequence (map 'vector #'char-code
			 (format nil *exec-header* runtime-flags
+2 −1
Original line number Diff line number Diff line
@@ -17,7 +17,8 @@
	   (write-char #\/ s))
	 (dolist (piece (cdr directory))
	   (etypecase piece
	     (string (write-string piece s) (write-char #\/ s))))))
	     (string (write-string piece s) (write-char #\/ s))
	     ((member :up) (write-string "../" s))))))
      (etypecase name
	(null)
        (string (write-string name s)))
+21 −0
Original line number Diff line number Diff line
@@ -38,6 +38,18 @@
  (sb-posix:chdir *current-directory*)
  0)

(deftest chdir.6
  (sb-posix:chdir "/../")
  0)

(deftest chdir.7
  (sb-posix:chdir #p"/../")
  0)

(deftest chdir.8
  (sb-posix:chdir (make-pathname :directory '(:absolute :up)))
  0)

(deftest chdir.error.1
  (let ((dne (make-pathname :directory '(:relative "chdir.does-not-exist"))))
    (handler-case
@@ -188,6 +200,15 @@
    (< (- atime unix-now) 10))
  t)

(deftest stat.2
  (let* ((stat (sb-posix:stat (make-pathname :directory '(:absolute :up))))
	 (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)

;;; FIXME: add tests for carrying a stat structure around in the
;;; optional argument to SB-POSIX:STAT

+2 −2
Original line number Diff line number Diff line
@@ -482,11 +482,11 @@
			 :new-version
			 :error)))
	     (case if-exists
	       ((:error nil)
	       ((:error nil :new-version)
		(setf mask (logior mask sb-unix:o_excl)))
	       ((:rename :rename-and-delete)
		(setf mask (logior mask sb-unix:o_creat)))
	       ((:new-version :supersede)
	       ((:supersede)
		(setf mask (logior mask sb-unix:o_trunc)))))
	    (t
	     (setf if-exists nil)))	; :ignore-this-arg
Loading