2 * linux/fs/isofs/joliet.c
4 * (C) 1996 Gordon Chaffee
6 * Joliet: Microsoft's Unicode extensions to iso9660
9 #include <linux/types.h>
10 #include <linux/nls.h>
14 * Convert Unicode 16 to UTF-8 or ASCII.
17 uni16_to_x8(unsigned char *ascii
, __be16
*uni
, int len
, struct nls_table
*nls
)
25 while ((ch
= get_unaligned(ip
)) && len
) {
27 llen
= nls
->uni2char(be16_to_cpu(ch
), op
, NLS_MAX_CHARSET_SIZE
);
41 get_joliet_filename(struct iso_directory_record
* de
, unsigned char *outname
, struct inode
* inode
)
44 struct nls_table
*nls
;
45 unsigned char len
= 0;
47 utf8
= ISOFS_SB(inode
->i_sb
)->s_utf8
;
48 nls
= ISOFS_SB(inode
->i_sb
)->s_nls_iocharset
;
51 len
= utf16s_to_utf8s((const wchar_t *) de
->name
,
52 de
->name_len
[0] >> 1, UTF16_BIG_ENDIAN
,
55 len
= uni16_to_x8(outname
, (__be16
*) de
->name
,
56 de
->name_len
[0] >> 1, nls
);
58 if ((len
> 2) && (outname
[len
-2] == ';') && (outname
[len
-1] == '1'))
62 * Windows doesn't like periods at the end of a name,
65 while (len
>= 2 && (outname
[len
-1] == '.'))