- (delete-original (eq if-exists :rename-and-delete))
- (mode #o666))
- (when original
- ;; We are doing a :rename or :rename-and-delete.
- ;; Determine if the file already exists, make sure the original
- ;; file is not a directory and keep the mode
- (let ((exists
- (and name
- (multiple-value-bind
- (okay err/dev inode orig-mode)
- (sb-unix:unix-stat name)
- (declare (ignore inode)
- (type (or sb-int:index null) orig-mode))
- (cond
- (okay
- (when (and output (= (logand orig-mode #o170000)
- #o40000))
- (error 'sb-int:simple-file-error
- :pathname pathname
- :format-control
- "Cannot open ~S for output: Is a directory."
- :format-arguments (list name)))
- (setf mode (logand orig-mode #o777))
- t)
- ((eql err/dev sb-unix:enoent)
- nil)
- (t
- (error 'sb-int:simple-file-error
- :pathname pathname
- :format-control "Cannot find ~S: ~A"
- :format-arguments
- (list name
- (sb-int:strerror err/dev)))))))))
- (unless (and exists
- (rename-file name original))
- (setf original nil)
- (setf delete-original nil)
- ;; In order to use SUPERSEDE instead, we have
- ;; to make sure unix:o_creat corresponds to
- ;; if-does-not-exist. unix:o_creat was set
- ;; before because of if-exists being :rename.
- (unless (eq if-does-not-exist :create)
- (setf mask (logior (logandc2 mask sb-unix:o_creat)
- sb-unix:o_trunc)))
- (setf if-exists :supersede))))
-
- ;; Okay, now we can try the actual open.
- (loop
- (multiple-value-bind (fd errno)
- (if name
- (sb-unix:unix-open name mask mode)
- (values nil sb-unix:enoent))
- (cond ((sb-int:fixnump fd)
+ (delete-original (eq if-exists :rename-and-delete))
+ (mode #o666))
+ (when original
+ ;; We are doing a :rename or :rename-and-delete.
+ ;; Determine if the file already exists, make sure the original
+ ;; file is not a directory and keep the mode
+ (let ((exists
+ (and name
+ (multiple-value-bind
+ (okay err/dev inode orig-mode)
+ (sb-unix:unix-stat name)
+ (declare (ignore inode)
+ (type (or sb-int:index null) orig-mode))
+ (cond
+ (okay
+ (when (and output (= (logand orig-mode #o170000)
+ #o40000))
+ (error 'sb-int:simple-file-error
+ :pathname pathname
+ :format-control
+ "Cannot open ~S for output: Is a directory."
+ :format-arguments (list name)))
+ (setf mode (logand orig-mode #o777))
+ t)
+ ((eql err/dev sb-unix:enoent)
+ nil)
+ (t
+ (error 'sb-int:simple-file-error
+ :pathname pathname
+ :format-control "Cannot find ~S: ~A"
+ :format-arguments
+ (list name
+ (sb-int:strerror err/dev)))))))))
+ (unless (and exists
+ (rename-file name original))
+ (setf original nil)
+ (setf delete-original nil)
+ ;; In order to use SUPERSEDE instead, we have
+ ;; to make sure unix:o_creat corresponds to
+ ;; if-does-not-exist. unix:o_creat was set
+ ;; before because of if-exists being :rename.
+ (unless (eq if-does-not-exist :create)
+ (setf mask (logior (logandc2 mask sb-unix:o_creat)
+ sb-unix:o_trunc)))
+ (setf if-exists :supersede))))
+
+ ;; Okay, now we can try the actual open.
+ (loop
+ (multiple-value-bind (fd errno)
+ (if name
+ #+win32
+ (sb-win32:unixlike-open name mask mode)
+ #-win32
+ (sb-unix:unix-open name mask mode)
+ (values nil sb-unix:enoent))
+ (cond ((integerp fd)