changeset 16246:4e00938cd261

(file_name_completion): Remove code which sets and restores the `stat' control flags (they might not be restored if C-g is pressed during completion). (file_name_completion_stat): Set and restore flags that make `stat' faster here instead of in `file_name_completion'.
author Richard M. Stallman <rms@gnu.org>
date Thu, 19 Sep 1996 21:28:15 +0000
parents d960549d163c
children a0940ace16a3
files src/dired.c
diffstat 1 files changed, 21 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/dired.c	Thu Sep 19 04:25:49 1996 +0000
+++ b/src/dired.c	Thu Sep 19 21:28:15 1996 +0000
@@ -295,19 +295,6 @@
   int count = specpdl_ptr - specpdl;
   struct gcpro gcpro1, gcpro2, gcpro3;
 
-#ifdef MSDOS
-#if __DJGPP__ > 1
-  /* Some fields of struct stat are *very* expensive to compute on MS-DOS,
-     but aren't required here.  Avoid computing the following fields:
-     st_inode, st_size and st_nlink for directories, and the execute bits
-     in st_mode for non-directory files with non-standard extensions.  */
-
-  unsigned short save_djstat_flags = _djstat_flags;
-
-  _djstat_flags = _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE;
-#endif
-#endif
-
 #ifdef VMS
   extern DIRENTRY * readdirver ();
 
@@ -509,12 +496,6 @@
   UNGCPRO;
   bestmatch = unbind_to (count, bestmatch);
 
-#ifdef MSDOS
-#if __DJGPP__ > 1
-  _djstat_flags = save_djstat_flags;
-#endif
-#endif
-
   if (all_flag || NILP (bestmatch))
     return bestmatch;
   if (matchcount == 1 && bestmatchsize == XSTRING (file)->size)
@@ -536,6 +517,19 @@
   int value;
   char *fullname = (char *) alloca (len + pos + 2);
 
+#ifdef MSDOS
+#if __DJGPP__ > 1
+  /* Some fields of struct stat are *very* expensive to compute on MS-DOS,
+     but aren't required here.  Avoid computing the following fields:
+     st_inode, st_size and st_nlink for directories, and the execute bits
+     in st_mode for non-directory files with non-standard extensions.  */
+
+  unsigned short save_djstat_flags = _djstat_flags;
+
+  _djstat_flags = _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE;
+#endif /* __DJGPP__ > 1 */
+#endif /* MSDOS */
+
   bcopy (XSTRING (dirname)->data, fullname, pos);
 #ifndef VMS
   if (!IS_DIRECTORY_SEP (fullname[pos - 1]))
@@ -553,8 +547,14 @@
   stat (fullname, st_addr);
   return value;
 #else
-  return stat (fullname, st_addr);
-#endif
+  value = stat (fullname, st_addr);
+#ifdef MSDOS
+#if __DJGPP__ > 1
+  _djstat_flags = save_djstat_flags;
+#endif /* __DJGPP__ > 1 */
+#endif /* MSDOS */
+  return value;
+#endif /* S_IFLNK */
 }
 
 #ifdef VMS