mirror of
https://github.com/torvalds/linux.git
synced 2024-12-24 11:51:27 +00:00
udf: Convert ident strings to proper charset
iocharset= mount option specifies the character set used on *console* (not on disk). So even dstrings from VRS need to be converted from CS0 to the specified charset and not always UTF-8. This is barely user visible as those strings are shown only in UDF debug messages. CC: Andrew Gabbasov <andrew_gabbasov@mentor.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
b8a41c44a4
commit
e966fc8d99
@ -890,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;
|
||||||
|
|
||||||
|
@ -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 *);
|
||||||
|
@ -295,9 +295,10 @@ try_again:
|
|||||||
return u_len;
|
return u_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int udf_dstrCS0toUTF8(uint8_t *utf_o, int o_len,
|
int udf_dstrCS0toChar(struct super_block *sb, uint8_t *utf_o, int o_len,
|
||||||
const uint8_t *ocu_i, int i_len)
|
const uint8_t *ocu_i, int i_len)
|
||||||
{
|
{
|
||||||
|
int (*conv_f)(wchar_t, unsigned char *, int);
|
||||||
int s_len = 0;
|
int s_len = 0;
|
||||||
|
|
||||||
if (i_len > 0) {
|
if (i_len > 0) {
|
||||||
@ -309,8 +310,14 @@ int udf_dstrCS0toUTF8(uint8_t *utf_o, int o_len,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return udf_name_from_CS0(utf_o, o_len, ocu_i, s_len,
|
if (UDF_QUERY_FLAG(sb, UDF_FLAG_UTF8)) {
|
||||||
udf_uni2char_utf8, 0);
|
conv_f = udf_uni2char_utf8;
|
||||||
|
} else if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP)) {
|
||||||
|
conv_f = UDF_SB(sb)->s_nls_map->uni2char;
|
||||||
|
} else
|
||||||
|
BUG();
|
||||||
|
|
||||||
|
return udf_name_from_CS0(utf_o, o_len, ocu_i, s_len, conv_f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int udf_get_filename(struct super_block *sb, const uint8_t *sname, int slen,
|
int udf_get_filename(struct super_block *sb, const uint8_t *sname, int slen,
|
||||||
|
Loading…
Reference in New Issue
Block a user