From: Stefan Monnier Date: Sun, 10 Jul 2022 15:15:27 +0000 (-0400) Subject: * src/dired.c (directory_files_internal): Update comment X-Git-Tag: emacs-29.0.90~1447^2~1041 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=d51d72b4a62384f33a593f5a2c0922c1aaecf106;p=emacs.git * src/dired.c (directory_files_internal): Update comment --- diff --git a/src/dired.c b/src/dired.c index 9aeff516369..c2c099f0a5f 100644 --- a/src/dired.c +++ b/src/dired.c @@ -270,7 +270,17 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, ptrdiff_t name_nbytes = SBYTES (name); ptrdiff_t nbytes = directory_nbytes + needsep + name_nbytes; ptrdiff_t nchars = SCHARS (directory) + needsep + SCHARS (name); - /* FIXME: Why not make them all multibyte? */ + /* DECODE_FILE may return non-ASCII unibyte strings (e.g. when + file-name-coding-system is 'binary'), so we don't know for sure + that the bytes we have follow our internal utf-8 representation + for multibyte strings. If nchars == nbytes we don't need to + care and just return a unibyte string; and if not, that means + one of 'name' or 'directory' is multibyte, in which case we + presume that the other one would also be multibyte if it + contained non-ASCII. + FIXME: This last presumption is broken when 'directory' is + multibyte (with non-ASCII), and 'name' is unibyte with non-ASCII + (because file-name-coding-system is 'binary'). */ finalname = (nchars == nbytes) ? make_uninit_string (nbytes) : make_uninit_multibyte_string (nchars, nbytes);