1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-29 11:02:01 +00:00

(file_name_completion): Fix inappropriate mixing of

encoded and decoded names.
This commit is contained in:
Andreas Schwab 2008-04-27 18:06:51 +00:00
parent 87bdd2c7a5
commit 9c691c002b
2 changed files with 14 additions and 14 deletions

View File

@ -1,5 +1,8 @@
2008-04-27 Andreas Schwab <schwab@suse.de>
* dired.c (file_name_completion): Fix inappropriate mixing of
encoded and decoded names.
* xterm.c (XTread_socket): Fix use of uninitialized variable.
* puresize.h (BASE_PURESIZE): Increase to 1200000.

View File

@ -539,6 +539,7 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
{
DIRENTRY *dp;
int len;
Lisp_Object decoded_name;
#ifdef VMS
dp = (*readfunc) (d);
@ -640,6 +641,9 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
if (!passcount && CONSP (tem))
continue;
name = make_unibyte_string (dp->d_name, len);
decoded_name = DECODE_FILE (name);
if (!passcount)
{
Lisp_Object regexps;
@ -650,8 +654,7 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
for (regexps = Vcompletion_regexp_list; CONSP (regexps);
regexps = XCDR (regexps))
{
tem = Fstring_match (XCAR (regexps),
make_string (dp->d_name, len), zero);
tem = Fstring_match (XCAR (regexps), decoded_name, zero);
if (NILP (tem))
break;
}
@ -663,10 +666,8 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
if (directoryp)
{
/* This completion is a directory; make it end with '/' */
name = Ffile_name_as_directory (make_string (dp->d_name, len));
name = ENCODE_FILE (Ffile_name_as_directory (decoded_name));
}
else
name = make_string (dp->d_name, len);
/* Test the predicate, if any. */
@ -674,10 +675,10 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
{
Lisp_Object decoded;
Lisp_Object val;
struct gcpro gcpro1;
struct gcpro gcpro1, gcpro2;
GCPRO1 (name);
decoded = Fexpand_file_name (DECODE_FILE (name), dirname);
GCPRO2 (name, decoded_name);
decoded = Fexpand_file_name (decoded_name, dirname);
val = call1 (predicate, decoded);
UNGCPRO;
@ -690,10 +691,7 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
matchcount++;
if (all_flag)
{
name = DECODE_FILE (name);
bestmatch = Fcons (name, bestmatch);
}
bestmatch = Fcons (decoded_name, bestmatch);
else if (NILP (bestmatch))
{
bestmatch = name;
@ -729,8 +727,7 @@ file_name_completion (file, dirname, all_flag, ver_flag, predicate)
either both or neither are exact. */
(((matchsize == len)
==
(matchsize + !!directoryp
== SCHARS (bestmatch)))
(matchsize + !!directoryp == SCHARS (bestmatch)))
&& !bcmp (p2, SDATA (encoded_file), SCHARS (encoded_file))
&& bcmp (p1, SDATA (encoded_file), SCHARS (encoded_file))))
bestmatch = name;