提交 525715d0 编写于 作者: R Russell King

fs/adfs: factor out filename case lowering

Factor out the filename case lowering of directory names when comparing
or hashing filenames.
Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
上级 1e504cf8
......@@ -100,6 +100,13 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj, int wait)
return ret;
}
static unsigned char adfs_tolower(unsigned char c)
{
if (c >= 'A' && c <= 'Z')
c += 'a' - 'A';
return c;
}
static int __adfs_compare(const unsigned char *qstr, u32 qlen,
const char *str, u32 len)
{
......@@ -108,20 +115,10 @@ static int __adfs_compare(const unsigned char *qstr, u32 qlen,
if (qlen != len)
return 1;
for (i = 0; i < qlen; i++) {
unsigned char qc, c;
qc = qstr[i];
c = str[i];
if (qc >= 'A' && qc <= 'Z')
qc += 'a' - 'A';
if (c >= 'A' && c <= 'Z')
c += 'a' - 'A';
if (qc != c)
for (i = 0; i < qlen; i++)
if (adfs_tolower(qstr[i]) != adfs_tolower(str[i]))
return 1;
}
return 0;
}
......@@ -198,15 +195,8 @@ adfs_hash(const struct dentry *parent, struct qstr *qstr)
qstr->len = i = name_len;
name = qstr->name;
hash = init_name_hash(parent);
while (i--) {
char c;
c = *name++;
if (c >= 'A' && c <= 'Z')
c += 'a' - 'A';
hash = partial_name_hash(c, hash);
}
while (i--)
hash = partial_name_hash(adfs_tolower(*name++), hash);
qstr->hash = end_name_hash(hash);
return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册