* fileio.c (barf_or_query_if_file_exists): Use lstat.

(Frename_file): Handle renaming of symlinks across file systems.
This commit is contained in:
Jan Djärv 2004-05-04 13:54:50 +00:00
parent 6ab6679999
commit f72b5416b9
2 changed files with 19 additions and 9 deletions

View file

@ -1,3 +1,8 @@
2004-05-04 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* 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 <storm@cua.dk>
* xdisp.c (Qtotal): New var.

View file

@ -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