]> git.eshelyaron.com Git - emacs.git/commitdiff
(file_name_completion): Set `stat' flags to avoid
authorKarl Heuer <kwzh@gnu.org>
Sun, 7 Jul 1996 22:37:17 +0000 (22:37 +0000)
committerKarl Heuer <kwzh@gnu.org>
Sun, 7 Jul 1996 22:37:17 +0000 (22:37 +0000)
computing expensive fields in struct stat (makes filename
completion much faster).

src/dired.c

index 29027718da48bf5b7887eb7961d3eeb2b5396b75..9767f6289c19cb06c573d48c3b73b1dd3f33bd3e 100644 (file)
@@ -295,6 +295,19 @@ file_name_completion (file, dirname, all_flag, ver_flag)
   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 ();
 
@@ -496,6 +509,12 @@ file_name_completion (file, dirname, all_flag, ver_flag)
   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)