Commit 04924ee3 authored by Richard M. Stallman's avatar Richard M. Stallman
Browse files

(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'.
parent b4222ffa
......@@ -295,19 +295,6 @@ 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 ();
......@@ -509,12 +496,6 @@ 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)
......@@ -536,6 +517,19 @@ file_name_completion_stat (dirname, dp, st_addr)
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 @@ file_name_completion_stat (dirname, dp, st_addr)
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
......
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