- d = open_directory (SSDATA (encoded_dir), &fd);
- if (!d)
- report_file_error ("Opening directory", dirname);
-
+ Lisp_Object file_encoding = Vfile_name_coding_system;
+ if (NILP (Vfile_name_coding_system))
+ file_encoding = Vdefault_file_name_coding_system;
+ /* If the file-name encoding decomposes characters, as we do for
+ HFS+ filesystems, we need to make an additional comparison of
+ decoded names in order to filter false positives, such as "a"
+ falsely matching "a-ring". */
+ if (!NILP (file_encoding)
+ && !NILP (Fplist_get (Fcoding_system_plist (file_encoding),
+ Qdecomposed_characters)))
+ {
+ check_decoded = true;
+ if (STRING_MULTIBYTE (file))
+ {
+ /* Recompute FILE to make sure any decomposed characters in
+ it are re-composed by the post-read-conversion.
+ Otherwise, any decomposed characters will be rejected by
+ the additional check below. */
+ file = DECODE_FILE (encoded_file);
+ }
+ }
+ int fd;
+ DIR *d = open_directory (encoded_dir, &fd);