mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-27 16:51:06 -07:00
(file_name_completion): Set `stat' flags to avoid
computing expensive fields in struct stat (makes filename completion much faster).
This commit is contained in:
parent
34ead71a13
commit
33d5e9cc8f
1 changed files with 19 additions and 0 deletions
19
src/dired.c
19
src/dired.c
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue