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:
Heinrich Schuchardt 2021-01-30 14:12:10 +01:00
parent 0be286cd6d
commit 3ecc5277f4

View File

@ -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;
} }