fs: fat: remove trailing periods from long name
The FAT32 File System Specification [1] requires leading and trailing spaces as well as trailing periods of long names to be ignored. [1] Microsoft Extensible Firmware Initiative FAT32 File System Specification Version 1.03, December 6, 2000 Microsoft Corporation https://www.win.tue.nl/~aeb/linux/fs/fat/fatgen103.pdf Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
0be286cd6d
commit
3ecc5277f4
@ -1237,12 +1237,38 @@ again:
|
|||||||
}
|
}
|
||||||
|
|
||||||
*last_slash_cont = '\0';
|
*last_slash_cont = '\0';
|
||||||
*basename = last_slash_cont + 1;
|
filename = last_slash_cont + 1;
|
||||||
} else {
|
} else {
|
||||||
*dirname = "/"; /* root by default */
|
*dirname = "/"; /* root by default */
|
||||||
*basename = filename;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The FAT32 File System Specification v1.03 requires leading and
|
||||||
|
* trailing spaces as well as trailing periods to be ignored.
|
||||||
|
*/
|
||||||
|
for (; *filename == ' '; ++filename)
|
||||||
|
;
|
||||||
|
|
||||||
|
/* Keep special entries '.' and '..' */
|
||||||
|
if (filename[0] == '.' &&
|
||||||
|
(!filename[1] || (filename[1] == '.' && !filename[2])))
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
/* Remove trailing periods and spaces */
|
||||||
|
for (p = filename + strlen(filename) - 1; p >= filename; --p) {
|
||||||
|
switch (*p) {
|
||||||
|
case ' ':
|
||||||
|
case '.':
|
||||||
|
*p = 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
*basename = filename;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user