unicode: pass a UNICODE_AGE() tripple to utf8_load
Don't bother with pointless string parsing when the caller can just pass the version in the format that the core expects. Also remove the fallback to the latest version that none of the callers actually uses. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
This commit is contained in:
committed by
Gabriel Krisman Bertazi
parent
f3a9c82396
commit
49bd03cc7e
@@ -167,59 +167,19 @@ int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(utf8_normalize);
|
||||
|
||||
static int utf8_parse_version(const char *version, unsigned int *maj,
|
||||
unsigned int *min, unsigned int *rev)
|
||||
struct unicode_map *utf8_load(unsigned int version)
|
||||
{
|
||||
substring_t args[3];
|
||||
char version_string[12];
|
||||
static const struct match_token token[] = {
|
||||
{1, "%d.%d.%d"},
|
||||
{0, NULL}
|
||||
};
|
||||
struct unicode_map *um;
|
||||
|
||||
strncpy(version_string, version, sizeof(version_string));
|
||||
|
||||
if (match_token(version_string, token, args) != 1)
|
||||
return -EINVAL;
|
||||
|
||||
if (match_int(&args[0], maj) || match_int(&args[1], min) ||
|
||||
match_int(&args[2], rev))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct unicode_map *utf8_load(const char *version)
|
||||
{
|
||||
struct unicode_map *um = NULL;
|
||||
int unicode_version;
|
||||
|
||||
if (version) {
|
||||
unsigned int maj, min, rev;
|
||||
|
||||
if (utf8_parse_version(version, &maj, &min, &rev) < 0)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
if (!utf8version_is_supported(maj, min, rev))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
unicode_version = UNICODE_AGE(maj, min, rev);
|
||||
} else {
|
||||
unicode_version = utf8version_latest();
|
||||
printk(KERN_WARNING"UTF-8 version not specified. "
|
||||
"Assuming latest supported version (%d.%d.%d).",
|
||||
(unicode_version >> 16) & 0xff,
|
||||
(unicode_version >> 8) & 0xff,
|
||||
(unicode_version & 0xff));
|
||||
}
|
||||
if (!utf8version_is_supported(version))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
um = kzalloc(sizeof(struct unicode_map), GFP_KERNEL);
|
||||
if (!um)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
um->version = unicode_version;
|
||||
um->version = version;
|
||||
return um;
|
||||
}
|
||||
EXPORT_SYMBOL(utf8_load);
|
||||
|
||||
Reference in New Issue
Block a user