Mercurial > emacs
changeset 22916:596fa4fbae13
(Fdirectory_files): If MATCH is non-nil, decode filenames
before checking them against MATCH.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 06 Aug 1998 05:38:11 +0000 |
parents | ef9dd93e3077 |
children | 00f3497854c4 |
files | src/dired.c |
diffstat | 1 files changed, 21 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dired.c Thu Aug 06 05:36:45 1998 +0000 +++ b/src/dired.c Thu Aug 06 05:38:11 1998 +0000 @@ -187,13 +187,13 @@ 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 @@ 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); } }