changeset 13541:2178c4d6a427

(check_executable) [DOS_NT]: Treat all dirs as executable. (Fcopy_file): Don't chmod output file on MSDOS unless we have DJGPP version 2.
author Richard M. Stallman <rms@gnu.org>
date Tue, 14 Nov 1995 17:38:19 +0000
parents 8909cd9fc951
children e0d71654a95f
files src/fileio.c
diffstat 1 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c	Tue Nov 14 03:48:33 1995 +0000
+++ b/src/fileio.c	Tue Nov 14 17:38:19 1995 +0000
@@ -1949,7 +1949,18 @@
 	  if (set_file_times (XSTRING (newname)->data, atime, mtime))
 	    report_file_error ("I/O error", Fcons (newname, Qnil));
 	}
+#ifndef MSDOS
+      chmod (XSTRING (newname)->data, 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 (XSTRING (newname)->data, st.st_mode & 07777);
+#endif /* DJGPP version 2 or newer */
+#endif /* MSDOS */
     }
 
   close (ifd);
@@ -2347,7 +2358,8 @@
 	  && len >= 5
 	  && (stricmp ((suffix = filename + len-4), ".com") == 0
 	      || stricmp (suffix, ".exe") == 0
-	      || stricmp (suffix, ".bat") == 0));
+	      || stricmp (suffix, ".bat") == 0)
+	  || (st.st_mode & S_IFMT) == S_IFDIR);
 #else /* not DOS_NT */
 #ifdef HAVE_EACCESS
   return (eaccess (filename, 1) >= 0);