Commit d987f62c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'udf_for_v4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs

Pull udf updates from Jan Kara:
 "UDF support for UTF-16 characters in file names"

* tag 'udf_for_v4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  udf: Add support for decoding UTF-16 characters
  udf: Add support for encoding UTF-16 characters
  udf: Push sb argument to udf_name_[to|from]_CS0()
  udf: Convert ident strings to proper charset
  udf: Use UTF-32 <-> UTF-8 conversion functions from NLS
  udf: Always require NLS support
parents 091a0f27 8a0cdef1
config UDF_FS config UDF_FS
tristate "UDF file system support" tristate "UDF file system support"
select CRC_ITU_T select CRC_ITU_T
select NLS
help help
This is a file system used on some CD-ROMs and DVDs. Since the This is a file system used on some CD-ROMs and DVDs. Since the
file system is supported by multiple operating systems and is more file system is supported by multiple operating systems and is more
...@@ -13,8 +14,3 @@ config UDF_FS ...@@ -13,8 +14,3 @@ config UDF_FS
module will be called udf. module will be called udf.
If unsure, say N. If unsure, say N.
config UDF_NLS
bool
default y
depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
...@@ -572,7 +572,6 @@ static int udf_parse_options(char *options, struct udf_options *uopt, ...@@ -572,7 +572,6 @@ static int udf_parse_options(char *options, struct udf_options *uopt,
case Opt_utf8: case Opt_utf8:
uopt->flags |= (1 << UDF_FLAG_UTF8); uopt->flags |= (1 << UDF_FLAG_UTF8);
break; break;
#ifdef CONFIG_UDF_NLS
case Opt_iocharset: case Opt_iocharset:
if (!remount) { if (!remount) {
if (uopt->nls_map) if (uopt->nls_map)
...@@ -581,7 +580,6 @@ static int udf_parse_options(char *options, struct udf_options *uopt, ...@@ -581,7 +580,6 @@ static int udf_parse_options(char *options, struct udf_options *uopt,
uopt->flags |= (1 << UDF_FLAG_NLS_MAP); uopt->flags |= (1 << UDF_FLAG_NLS_MAP);
} }
break; break;
#endif
case Opt_uforget: case Opt_uforget:
uopt->flags |= (1 << UDF_FLAG_UID_FORGET); uopt->flags |= (1 << UDF_FLAG_UID_FORGET);
break; break;
...@@ -892,14 +890,14 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) ...@@ -892,14 +890,14 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
#endif #endif
} }
ret = udf_dstrCS0toUTF8(outstr, 31, pvoldesc->volIdent, 32); ret = udf_dstrCS0toChar(sb, outstr, 31, pvoldesc->volIdent, 32);
if (ret < 0) if (ret < 0)
goto out_bh; goto out_bh;
strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret); strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident); udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
ret = udf_dstrCS0toUTF8(outstr, 127, pvoldesc->volSetIdent, 128); ret = udf_dstrCS0toChar(sb, outstr, 127, pvoldesc->volSetIdent, 128);
if (ret < 0) if (ret < 0)
goto out_bh; goto out_bh;
...@@ -2117,7 +2115,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) ...@@ -2117,7 +2115,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
udf_err(sb, "utf8 cannot be combined with iocharset\n"); udf_err(sb, "utf8 cannot be combined with iocharset\n");
goto parse_options_failure; goto parse_options_failure;
} }
#ifdef CONFIG_UDF_NLS
if ((uopt.flags & (1 << UDF_FLAG_NLS_MAP)) && !uopt.nls_map) { if ((uopt.flags & (1 << UDF_FLAG_NLS_MAP)) && !uopt.nls_map) {
uopt.nls_map = load_nls_default(); uopt.nls_map = load_nls_default();
if (!uopt.nls_map) if (!uopt.nls_map)
...@@ -2125,7 +2122,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) ...@@ -2125,7 +2122,6 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
else else
udf_debug("Using default NLS map\n"); udf_debug("Using default NLS map\n");
} }
#endif
if (!(uopt.flags & (1 << UDF_FLAG_NLS_MAP))) if (!(uopt.flags & (1 << UDF_FLAG_NLS_MAP)))
uopt.flags |= (1 << UDF_FLAG_UTF8); uopt.flags |= (1 << UDF_FLAG_UTF8);
...@@ -2279,10 +2275,8 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent) ...@@ -2279,10 +2275,8 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
error_out: error_out:
iput(sbi->s_vat_inode); iput(sbi->s_vat_inode);
parse_options_failure: parse_options_failure:
#ifdef CONFIG_UDF_NLS
if (uopt.nls_map) if (uopt.nls_map)
unload_nls(uopt.nls_map); unload_nls(uopt.nls_map);
#endif
if (lvid_open) if (lvid_open)
udf_close_lvid(sb); udf_close_lvid(sb);
brelse(sbi->s_lvid_bh); brelse(sbi->s_lvid_bh);
...@@ -2332,10 +2326,8 @@ static void udf_put_super(struct super_block *sb) ...@@ -2332,10 +2326,8 @@ static void udf_put_super(struct super_block *sb)
sbi = UDF_SB(sb); sbi = UDF_SB(sb);
iput(sbi->s_vat_inode); iput(sbi->s_vat_inode);
#ifdef CONFIG_UDF_NLS
if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
unload_nls(sbi->s_nls_map); unload_nls(sbi->s_nls_map);
#endif
if (!sb_rdonly(sb)) if (!sb_rdonly(sb))
udf_close_lvid(sb); udf_close_lvid(sb);
brelse(sbi->s_lvid_bh); brelse(sbi->s_lvid_bh);
......
...@@ -220,7 +220,8 @@ extern int udf_get_filename(struct super_block *, const uint8_t *, int, ...@@ -220,7 +220,8 @@ extern int udf_get_filename(struct super_block *, const uint8_t *, int,
uint8_t *, int); uint8_t *, int);
extern int udf_put_filename(struct super_block *, const uint8_t *, int, extern int udf_put_filename(struct super_block *, const uint8_t *, int,
uint8_t *, int); uint8_t *, int);
extern int udf_dstrCS0toUTF8(uint8_t *, int, const uint8_t *, int); extern int udf_dstrCS0toChar(struct super_block *, uint8_t *, int,
const uint8_t *, int);
/* ialloc.c */ /* ialloc.c */
extern void udf_free_inode(struct inode *); extern void udf_free_inode(struct inode *);
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment