summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dired.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dired.c b/src/dired.c
index 8ff38647946..2b2b5dcdf61 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -286,6 +286,8 @@ file_name_completion (file, dirname, all_flag, ver_flag)
int directoryp;
int passcount;
int count = specpdl_ptr - specpdl;
+ struct gcpro gcpro1, gcpro2, gcpro3;
+
#ifdef VMS
extern DIRENTRY * readdirver ();
@@ -305,8 +307,10 @@ file_name_completion (file, dirname, all_flag, ver_flag)
#ifdef FILE_SYSTEM_CASE
file = FILE_SYSTEM_CASE (file);
#endif
- dirname = Fexpand_file_name (dirname, Qnil);
bestmatch = Qnil;
+ dirname = Qnil;
+ GCPRO3 (file, dirname, bestmatch);
+ dirname = Fexpand_file_name (dirname, Qnil);
/* With passcount = 0, ignore files that end in an ignored extension.
If nothing found then try again with passcount = 1, don't ignore them.
@@ -451,7 +455,8 @@ file_name_completion (file, dirname, all_flag, ver_flag)
closedir (d);
}
- unbind_to (count, Qnil);
+ UNGCPRO;
+ bestmatch = unbind_to (count, bestmatch);
if (all_flag || NILP (bestmatch))
return bestmatch;