Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 147677c5 authored by Daniel Rosenberg's avatar Daniel Rosenberg
Browse files

ANDROID: sdcardfs: Use case insensitive hash function



Case insensitive comparisons don't help us much if
we hash to different buckets...

Signed-off-by: default avatarDaniel Rosenberg <drosen@google.com>
bug: 36004503
Change-Id: I91e00dbcd860a709cbd4f7fd7fc6d855779f3285
parent e28f7275
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include "sdcardfs.h"
#include <linux/hashtable.h>
#include <linux/ctype.h>
#include <linux/delay.h>
#include <linux/radix-tree.h>
#include <linux/dcache.h>
@@ -44,11 +45,19 @@ static DEFINE_HASHTABLE(ext_to_groupid, 8);

static struct kmem_cache *hashtable_entry_cachep;

static unsigned int full_name_case_hash(const void *salt, const unsigned char *name, unsigned int len)
{
	unsigned long hash = init_name_hash(salt);
	while (len--)
		hash = partial_name_hash(tolower(*name++), hash);
	return end_name_hash(hash);
}

static inline void qstr_init(struct qstr *q, const char *name)
{
	q->name = name;
	q->len = strlen(q->name);
	q->hash = full_name_hash(0, q->name, q->len);
	q->hash = full_name_case_hash(0, q->name, q->len);
}

static inline int qstr_copy(const struct qstr *src, struct qstr *dest)