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

Commit 5d61f892 authored by Daniel Rosenberg's avatar Daniel Rosenberg
Browse files

ANDROID: sdcardfs: Check for other cases on path lookup



This fixes a bug where the first lookup of a
file or folder created under a different view
would not be case insensitive. It will now
search through for a case insensitive match
if the initial lookup fails.

Bug:28024488
Change-Id: I4ff9ce297b9f2f9864b47540e740fd491c545229
Signed-off-by: default avatarDaniel Rosenberg <drosen@google.com>
parent e520ac67
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -240,6 +240,28 @@ static struct dentry *__sdcardfs_lookup(struct dentry *dentry,
	/* Use vfs_path_lookup to check if the dentry exists or not */
	err = vfs_path_lookup(lower_dir_dentry, lower_dir_mnt, name, 0,
				&lower_path);
	/* check for other cases */
	if (err == -ENOENT) {
		struct dentry *child;
		struct dentry *match = NULL;
		spin_lock(&lower_dir_dentry->d_lock);
		list_for_each_entry(child, &lower_dir_dentry->d_subdirs, d_child) {
			if (child && d_inode(child)) {
				if (strcasecmp(child->d_name.name, name)==0) {
					match = dget(child);
					break;
				}
			}
		}
		spin_unlock(&lower_dir_dentry->d_lock);
		if (match) {
			err = vfs_path_lookup(lower_dir_dentry,
						lower_dir_mnt,
						match->d_name.name, 0,
						&lower_path);
			dput(match);
		}
	}

	/* no error: handle positive dentries */
	if (!err) {