Commit b016179b authored by Eli Zaretskii's avatar Eli Zaretskii
Browse files

(Fcopy_file): Rearrange the code that calls fchown and

fchmod so that chmod doesn't get called on MSDOS before the file
is closed.
parent 7d0c69be
2005-07-02 Eli Zaretskii <eliz@gnu.org>
* fileio.c (Fcopy_file): Rearrange the code that calls fchown and
fchmod so that chmod doesn't get called on MSDOS before the file
is closed.
2005-07-01 Jason Rumney <jasonr@gnu.org>
 
* w32term.c (cleartype_active): New flag for enabling sub-pixel
......
......@@ -2521,7 +2521,7 @@ uid and gid of FILE to NEWNAME. */)
copyable by us. */
input_file_statable_p = (fstat (ifd, &st) >= 0);
#if !defined (DOS_NT) || __DJGPP__ > 1
#if !defined (MSDOS) || __DJGPP__ > 1
if (out_st.st_mode != 0
&& st.st_dev == out_st.st_dev && st.st_ino == out_st.st_ino)
{
......@@ -2574,25 +2574,16 @@ uid and gid of FILE to NEWNAME. */)
report_file_error ("I/O error", Fcons (newname, Qnil));
immediate_quit = 0;
/* Preserve the owner and group, if requested. */
if (input_file_statable_p && ! NILP (preserve_uid_gid))
fchown (ofd, st.st_uid, st.st_gid);
#ifndef MSDOS
/* Preserve the original file modes, and if requested, also its
owner and group. */
if (input_file_statable_p)
{
#ifndef MSDOS
if (! NILP (preserve_uid_gid))
fchown (ofd, st.st_uid, st.st_gid);
fchmod (ofd, st.st_mode & 07777);
#else /* MSDOS */
#if defined (__DJGPP__) && __DJGPP__ > 1
/* In DJGPP v2.0 and later, fstat usually returns true file mode bits,
and if it can't, it tells so. Otherwise, under MSDOS we usually
get only the READ bit, which will make the copied file read-only,
so it's better not to chmod at all. */
if ((_djstat_flags & _STFAIL_WRITEBIT) == 0)
chmod (SDATA (encoded_newname), st.st_mode & 07777);
#endif /* DJGPP version 2 or newer */
#endif /* MSDOS */
}
#endif /* not MSDOS */
/* Closing the output clobbers the file times on some systems. */
if (emacs_close (ofd) < 0)
......@@ -2614,7 +2605,19 @@ uid and gid of FILE to NEWNAME. */)
}
emacs_close (ifd);
#endif /* WINDOWSNT */
#if defined (__DJGPP__) && __DJGPP__ > 1
if (input_file_statable_p)
{
/* In DJGPP v2.0 and later, fstat usually returns true file mode bits,
and if it can't, it tells so. Otherwise, under MSDOS we usually
get only the READ bit, which will make the copied file read-only,
so it's better not to chmod at all. */
if ((_djstat_flags & _STFAIL_WRITEBIT) == 0)
chmod (SDATA (encoded_newname), st.st_mode & 07777);
}
#endif /* DJGPP version 2 or newer */
#endif /* not WINDOWSNT */
/* Discard the unwind protects. */
specpdl_ptr = specpdl + count;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment