From e23f810c3eae579db8b75d33dcffc75be54d1fc7 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Thu, 6 Aug 1998 05:38:11 +0000 Subject: [PATCH] (Fdirectory_files): If MATCH is non-nil, decode filenames before checking them against MATCH. --- src/dired.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/dired.c b/src/dired.c index 2e72c4706de..eb743c58a3b 100644 --- a/src/dired.c +++ b/src/dired.c @@ -187,13 +187,13 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable.\n\ report_file_error ("Opening directory", Fcons (directory, Qnil)); list = Qnil; - dirnamelen = STRING_BYTES (XSTRING (encoded_directory)); + dirnamelen = STRING_BYTES (XSTRING (directory)); re_match_object = Qt; /* Decide whether we need to add a directory separator. */ #ifndef VMS if (dirnamelen == 0 - || !IS_ANY_SEP (XSTRING (encoded_directory)->data[dirnamelen - 1])) + || !IS_ANY_SEP (XSTRING (directory)->data[dirnamelen - 1])) needsep = 1; #endif /* not VMS */ @@ -203,38 +203,41 @@ If NOSORT is non-nil, the list is not sorted--its order is unpredictable.\n\ while (1) { DIRENTRY *dp = readdir (d); - int len; if (!dp) break; - len = NAMLEN (dp); if (DIRENTRY_NONEMPTY (dp)) { + int len; + + len = NAMLEN (dp); + name = DECODE_FILE (make_string (dp->d_name, len)); + len = STRING_BYTES (XSTRING (name)); + if (NILP (match) - || (0 <= re_search (bufp, dp->d_name, len, 0, len, 0))) + || (0 <= re_search (bufp, XSTRING (name)->data, len, 0, len, 0))) { if (!NILP (full)) { int afterdirindex = dirnamelen; int total = len + dirnamelen; int nchars; + Lisp_Object fullname; - name = make_uninit_multibyte_string (total + needsep, - total + needsep); - bcopy (XSTRING (encoded_directory)->data, XSTRING (name)->data, + fullname = make_uninit_multibyte_string (total + needsep, + total + needsep); + bcopy (XSTRING (directory)->data, XSTRING (fullname)->data, dirnamelen); if (needsep) - XSTRING (name)->data[afterdirindex++] = DIRECTORY_SEP; - bcopy (dp->d_name, - XSTRING (name)->data + afterdirindex, len); - nchars = chars_in_text (XSTRING (name)->data, + XSTRING (fullname)->data[afterdirindex++] = DIRECTORY_SEP; + bcopy (XSTRING (name)->data, + XSTRING (fullname)->data + afterdirindex, len); + nchars = chars_in_text (XSTRING (fullname)->data, afterdirindex + len); - XSTRING (name)->size = nchars; - if (nchars == STRING_BYTES (XSTRING (name))) - SET_STRING_BYTES (XSTRING (name), -1); + XSTRING (fullname)->size = nchars; + if (nchars == STRING_BYTES (XSTRING (fullname))) + SET_STRING_BYTES (XSTRING (fullname), -1); + name = fullname; } - else - name = make_string (dp->d_name, len); - name = DECODE_FILE (name); list = Fcons (name, list); } } -- 2.39.2