From: Jan Djärv Date: Tue, 4 May 2004 13:54:50 +0000 (+0000) Subject: * fileio.c (barf_or_query_if_file_exists): Use lstat. X-Git-Tag: ttn-vms-21-2-B4~6416 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f72b5416b95d8897b009af51abf7bacede486caf;p=emacs.git * fileio.c (barf_or_query_if_file_exists): Use lstat. (Frename_file): Handle renaming of symlinks across file systems. --- diff --git a/src/ChangeLog b/src/ChangeLog index fbce94f2ecd..9ff41a4ccc0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2004-05-04 Jan Dj,Ad(Brv + + * fileio.c (barf_or_query_if_file_exists): Use lstat. + (Frename_file): Handle renaming of symlinks across file systems. + 2004-05-04 Kim F. Storm * xdisp.c (Qtotal): New var. diff --git a/src/fileio.c b/src/fileio.c index 1f7fd5753b5..04068e25f89 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -2349,7 +2349,7 @@ barf_or_query_if_file_exists (absname, querystring, interactive, statptr, quick) /* stat is a good way to tell whether the file exists, regardless of what access permissions it has. */ - if (stat (SDATA (encoded_filename), &statbuf) >= 0) + if (lstat (SDATA (encoded_filename), &statbuf) >= 0) { if (! interactive) Fsignal (Qfile_already_exists, @@ -2684,11 +2684,11 @@ This is what happens in interactive use with M-x. */) Lisp_Object args[2]; #endif Lisp_Object handler; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; - Lisp_Object encoded_file, encoded_newname; + struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; + Lisp_Object encoded_file, encoded_newname, symlink_target; - encoded_file = encoded_newname = Qnil; - GCPRO4 (file, newname, encoded_file, encoded_newname); + symlink_target = encoded_file = encoded_newname = Qnil; + GCPRO5 (file, newname, encoded_file, encoded_newname, symlink_target); CHECK_STRING (file); CHECK_STRING (newname); file = Fexpand_file_name (file, Qnil); @@ -2725,10 +2725,15 @@ This is what happens in interactive use with M-x. */) { if (errno == EXDEV) { - Fcopy_file (file, newname, - /* We have already prompted if it was an integer, - so don't have copy-file prompt again. */ - NILP (ok_if_already_exists) ? Qnil : Qt, Qt); + symlink_target = Ffile_symlink_p (file); + if (NILP (symlink_target)) + Fcopy_file (file, newname, + /* We have already prompted if it was an integer, + so don't have copy-file prompt again. */ + NILP (ok_if_already_exists) ? Qnil : Qt, Qt); + else + Fmake_symbolic_link (symlink_target, newname, + NILP (ok_if_already_exists) ? Qnil : Qt, Qt); Fdelete_file (file); } else