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);
 	    }
 	}