# HG changeset patch # User Andreas Schwab # Date 1209319611 0 # Node ID 9d03d6298e0f2f18a09d189822594ca840e3a1f4 # Parent f2c9fb488f9747980a8ef1b07aa7ea17af3de4bf (file_name_completion): Fix inappropriate mixing of encoded and decoded names. diff -r f2c9fb488f97 -r 9d03d6298e0f src/ChangeLog --- a/src/ChangeLog Sun Apr 27 16:39:03 2008 +0000 +++ b/src/ChangeLog Sun Apr 27 18:06:51 2008 +0000 @@ -1,5 +1,8 @@ 2008-04-27 Andreas Schwab + * 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. diff -r f2c9fb488f97 -r 9d03d6298e0f src/dired.c --- a/src/dired.c Sun Apr 27 16:39:03 2008 +0000 +++ b/src/dired.c Sun Apr 27 18:06:51 2008 +0000 @@ -539,6 +539,7 @@ { DIRENTRY *dp; int len; + Lisp_Object decoded_name; #ifdef VMS dp = (*readfunc) (d); @@ -640,6 +641,9 @@ 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 @@ 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 @@ 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 @@ { 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 @@ 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 @@ 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;