+2010-03-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * net/tramp.el (tramp-do-copy-or-rename-file-out-of-band): Fix an
+ error when FILENAME and NEWNAME are existing remote directories.
+
+ * net/tramp-compat.el (tramp-compat-make-temp-file): Add optional
+ parameter DIR-FLAG.
+
2010-03-02 Glenn Morris <rgm@gnu.org>
* calendar/cal-hebrew.el (holiday-hebrew-passover): Fix date
;; has been introduced with Emacs 22. We try it, if it fails, we fall
;; back to `make-temp-name', creating the temporary file immediately
;; in order to avoid a security hole.
-(defsubst tramp-compat-make-temp-file (filename)
+(defsubst tramp-compat-make-temp-file (filename &optional dir-flag)
"Create a temporary file (compat function).
Add the extension of FILENAME, if existing."
(let* (file-name-handler-alist
result)
(condition-case nil
(setq result
- (funcall (symbol-function 'make-temp-file) prefix nil extension))
+ (funcall
+ (symbol-function 'make-temp-file) prefix dir-flag extension))
(error
;; We use our own implementation, taken from files.el.
(while
(condition-case ()
(progn
(setq result (concat (make-temp-name prefix) extension))
- (write-region
- "" nil result nil 'silent nil
- ;; 7th parameter is MUSTBENEW in Emacs, and
- ;; CODING-SYSTEM in XEmacs. It is not a security
- ;; hole in XEmacs if we cannot use this parameter,
- ;; because XEmacs uses a user-specific subdirectory
- ;; with 0700 permissions.
- (when (not (featurep 'xemacs)) 'excl))
+ (if dir-flag
+ (make-directory result)
+ (write-region
+ "" nil result nil 'silent nil
+ ;; 7th parameter is MUSTBENEW in Emacs, and
+ ;; CODING-SYSTEM in XEmacs. It is not a security
+ ;; hole in XEmacs if we cannot use this parameter,
+ ;; because XEmacs uses a user-specific
+ ;; subdirectory with 0700 permissions.
+ (when (not (featurep 'xemacs)) 'excl)))
nil)
(file-already-exists t))
;; The file was somehow created by someone else between
;; Both are Tramp files. We shall optimize it, when the
;; methods for filename and newname are the same.
- (let ((tmpfile
- (if (file-regular-p filename)
- (tramp-compat-make-temp-file localname)
- (make-temp-name
- (expand-file-name
- tramp-temp-name-prefix
- (tramp-compat-temporary-file-directory))))))
+ (let* ((dir-flag (file-directory-p filename))
+ (tmpfile (tramp-compat-make-temp-file localname dir-flag)))
+ (if dir-flag
+ (setq tmpfile
+ (expand-file-name
+ (file-name-nondirectory newname) tmpfile)))
(unwind-protect
(progn
(tramp-do-copy-or-rename-file-out-of-band
'rename tmpfile newname keep-date))
;; Save exit.
(condition-case nil
- (if (file-regular-p tmpfile)
- (delete-file tmpfile)
- (delete-directory tmpfile 'recursive))
+ (if dir-flag
+ (delete-directory
+ (expand-file-name ".." tmpfile) 'recursive)
+ (delete-file tmpfile))
(error))))
;; Expand hops. Might be necessary for gateway methods.