mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
fs/adfs: fix filename fixup handling for "/" and "//" names
Avoid translating "/" and "//" directory entry names to the special "." and ".." names by instead converting the first character to "^". Acked-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
5f8de4875c
commit
fc722a0429
@ -18,18 +18,25 @@ static DEFINE_RWLOCK(adfs_dir_lock);
|
|||||||
|
|
||||||
void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj)
|
void adfs_object_fixup(struct adfs_dir *dir, struct object_info *obj)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int dots, i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RISC OS allows the use of '/' in directory entry names, so we need
|
* RISC OS allows the use of '/' in directory entry names, so we need
|
||||||
* to fix these up. '/' is typically used for FAT compatibility to
|
* to fix these up. '/' is typically used for FAT compatibility to
|
||||||
* represent '.', so do the same conversion here. In any case, '.'
|
* represent '.', so do the same conversion here. In any case, '.'
|
||||||
* will never be in a RISC OS name since it is used as the pathname
|
* will never be in a RISC OS name since it is used as the pathname
|
||||||
* separator.
|
* separator. Handle the case where we may generate a '.' or '..'
|
||||||
|
* name, replacing the first character with '^' (the RISC OS "parent
|
||||||
|
* directory" character.)
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < obj->name_len; i++)
|
for (i = dots = 0; i < obj->name_len; i++)
|
||||||
if (obj->name[i] == '/')
|
if (obj->name[i] == '/') {
|
||||||
obj->name[i] = '.';
|
obj->name[i] = '.';
|
||||||
|
dots++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj->name_len <= 2 && dots == obj->name_len)
|
||||||
|
obj->name[0] = '^';
|
||||||
|
|
||||||
obj->filetype = -1;
|
obj->filetype = -1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user