From 525715d0161f360df5f9f7ba8d9b77f60068dec5 Mon Sep 17 00:00:00 2001 From: Russell King Date: Sun, 24 Mar 2019 12:22:04 +0000 Subject: 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 Signed-off-by: Russell King --- fs/adfs/dir.c | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/fs/adfs/dir.c b/fs/adfs/dir.c index bebe2ab86aae..be4b4f950500 100644 --- a/fs/adfs/dir.c +++ b/fs/adfs/dir.c @@ -100,6 +100,13 @@ out: 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; -- cgit