fs/adfs: factor out filename case lowering

Factor out the filename case lowering of directory names when comparing
or hashing filenames.

Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
Russell King 2019-03-24 12:22:04 +00:00
parent 1e504cf85d
commit 525715d016
1 changed files with 12 additions and 22 deletions

View File

@ -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;