fs: fat: do not mangle short filenames
Do not mangle lower or mixed case filenames which fit into the upper case 8.3 short filename. This ensures FAT standard compatible short filenames (SFN) to support systems without long filename (LFN) support like boot roms (ex. SFN BOOT.BIN instead of BOOT~1.BIN for LFN boot.bin). Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
This commit is contained in:
parent
447dfbc063
commit
fefd949157
1 changed files with 7 additions and 4 deletions
|
@ -141,6 +141,8 @@ static int set_name(fat_itr *itr, const char *filename, char *shortname)
|
||||||
if (!strcmp(buf, filename)) {
|
if (!strcmp(buf, filename)) {
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto out;
|
goto out;
|
||||||
|
} else if (!strcasecmp(buf, filename)) {
|
||||||
|
goto out_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Construct an indexed short name */
|
/* Construct an indexed short name */
|
||||||
|
@ -177,12 +179,13 @@ static int set_name(fat_itr *itr, const char *filename, char *shortname)
|
||||||
if (find_directory_entry(itr, buf))
|
if (find_directory_entry(itr, buf))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
debug("chosen short name: %s\n", buf);
|
goto out_ret;
|
||||||
/* Each long name directory entry takes 13 characters. */
|
|
||||||
ret = (strlen(filename) + 25) / 13;
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
out_ret:
|
||||||
|
debug("chosen short name: %s\n", buf);
|
||||||
|
/* Each long name directory entry takes 13 characters. */
|
||||||
|
ret = (strlen(filename) + 25) / 13;
|
||||||
out:
|
out:
|
||||||
memcpy(shortname, &dirent, SHORT_NAME_SIZE);
|
memcpy(shortname, &dirent, SHORT_NAME_SIZE);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in a new issue