exfat: Simplify exfat_utf8_d_hash() for code points above U+FFFF
authorPali Rohár <pali@kernel.org>
Tue, 17 Mar 2020 22:25:52 +0000 (23:25 +0100)
committerNamjae Jeon <namjae.jeon@samsung.com>
Tue, 9 Jun 2020 07:48:44 +0000 (16:48 +0900)
Function partial_name_hash() takes long type value into which can be stored
one Unicode code point. Therefore conversion from UTF-32 to UTF-16 is not
needed.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
fs/exfat/namei.c

index 585b47b2db3da5d208fa1d53da9b18ae3d07c2dd..fa926b9c883adf353f3e911d96d6efcd71677dcc 100644 (file)
@@ -147,16 +147,10 @@ static int exfat_utf8_d_hash(const struct dentry *dentry, struct qstr *qstr)
                        return charlen;
 
                /*
-                * Convert to UTF-16: code points above U+FFFF are encoded as
-                * surrogate pairs.
                 * exfat_toupper() works only for code points up to the U+FFFF.
                 */
-               if (u > 0xFFFF) {
-                       hash = partial_name_hash(exfat_high_surrogate(u), hash);
-                       hash = partial_name_hash(exfat_low_surrogate(u), hash);
-               } else {
-                       hash = partial_name_hash(exfat_toupper(sb, u), hash);
-               }
+               hash = partial_name_hash(u <= 0xFFFF ? exfat_toupper(sb, u) : u,
+                                        hash);
        }
 
        qstr->hash = end_name_hash(hash);