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