diff mbox series

fs: fat: do not mangle short filenames

Message ID 20230317120413.11066-1-stefan.herbrechtsmeier-oss@weidmueller.com
State Accepted
Commit fefd949157430e1dc8569fa39729c63c5eccb454
Delegated to: Tom Rini
Headers show
Series fs: fat: do not mangle short filenames | expand

Commit Message

Stefan Herbrechtsmeier March 17, 2023, 12:04 p.m. UTC
From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>

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>

---

 fs/fat/fat_write.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

Comments

Tom Rini March 20, 2023, 5:01 p.m. UTC | #1
On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:

> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> 
> 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>
> 
> ---
> 
>  fs/fat/fat_write.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)

Can we update test/py/tests/test_fs/ somewhere to have a test for this
case? Thanks.
Stefan Herbrechtsmeier March 21, 2023, 7:43 a.m. UTC | #2
Am 20.03.2023 um 18:01 schrieb Tom Rini:
> On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
>
>> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
>>
>> 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>
>>
>> ---
>>
>>   fs/fat/fat_write.c | 11 +++++++----
>>   1 file changed, 7 insertions(+), 4 deletions(-)
> Can we update test/py/tests/test_fs/ somewhere to have a test for this
> case? Thanks.

What is the recommended approach to test internal behavior? The short 
name isn't avialable at the terminal because u-boot support VFAT.
Tom Rini March 21, 2023, 3:35 p.m. UTC | #3
On Tue, Mar 21, 2023 at 08:43:07AM +0100, Stefan Herbrechtsmeier wrote:
> Am 20.03.2023 um 18:01 schrieb Tom Rini:
> > On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
> > 
> > > From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> > > 
> > > 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>
> > > 
> > > ---
> > > 
> > >   fs/fat/fat_write.c | 11 +++++++----
> > >   1 file changed, 7 insertions(+), 4 deletions(-)
> > Can we update test/py/tests/test_fs/ somewhere to have a test for this
> > case? Thanks.
> 
> What is the recommended approach to test internal behavior? The short name
> isn't avialable at the terminal because u-boot support VFAT.

Well, you triggered this problem with a filesystem that had contents
that were "just so" and then didn't work as expected, yes?
Stefan Herbrechtsmeier March 21, 2023, 3:53 p.m. UTC | #4
Am 21.03.2023 um 16:35 schrieb Tom Rini:
> On Tue, Mar 21, 2023 at 08:43:07AM +0100, Stefan Herbrechtsmeier wrote:
>> Am 20.03.2023 um 18:01 schrieb Tom Rini:
>>> On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
>>>
>>>> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
>>>>
>>>> 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>
>>>>
>>>> ---
>>>>
>>>>    fs/fat/fat_write.c | 11 +++++++----
>>>>    1 file changed, 7 insertions(+), 4 deletions(-)
>>> Can we update test/py/tests/test_fs/ somewhere to have a test for this
>>> case? Thanks.
>> What is the recommended approach to test internal behavior? The short name
>> isn't avialable at the terminal because u-boot support VFAT.
> Well, you triggered this problem with a filesystem that had contents
> that were "just so" and then didn't work as expected, yes?


No, I write a file to a file system and the boot rom do not find the 
file because the name was wrong (BOOT~1.BIN instead of BOOT.BIN).

The mdir command shows the short and long file name. I will add a 
test_fat.py with a test.

Regards
   Stefan
Tom Rini March 21, 2023, 3:54 p.m. UTC | #5
On Tue, Mar 21, 2023 at 04:53:22PM +0100, Stefan Herbrechtsmeier wrote:
> 
> Am 21.03.2023 um 16:35 schrieb Tom Rini:
> > On Tue, Mar 21, 2023 at 08:43:07AM +0100, Stefan Herbrechtsmeier wrote:
> > > Am 20.03.2023 um 18:01 schrieb Tom Rini:
> > > > On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
> > > > 
> > > > > From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> > > > > 
> > > > > 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>
> > > > > 
> > > > > ---
> > > > > 
> > > > >    fs/fat/fat_write.c | 11 +++++++----
> > > > >    1 file changed, 7 insertions(+), 4 deletions(-)
> > > > Can we update test/py/tests/test_fs/ somewhere to have a test for this
> > > > case? Thanks.
> > > What is the recommended approach to test internal behavior? The short name
> > > isn't avialable at the terminal because u-boot support VFAT.
> > Well, you triggered this problem with a filesystem that had contents
> > that were "just so" and then didn't work as expected, yes?
> 
> 
> No, I write a file to a file system and the boot rom do not find the file
> because the name was wrong (BOOT~1.BIN instead of BOOT.BIN).
> 
> The mdir command shows the short and long file name. I will add a
> test_fat.py with a test.

Ah, ok, and great, thanks!
Stefan Herbrechtsmeier March 22, 2023, 8:51 a.m. UTC | #6
Am 21.03.2023 um 16:54 schrieb Tom Rini:
> On Tue, Mar 21, 2023 at 04:53:22PM +0100, Stefan Herbrechtsmeier wrote:
>> Am 21.03.2023 um 16:35 schrieb Tom Rini:
>>> On Tue, Mar 21, 2023 at 08:43:07AM +0100, Stefan Herbrechtsmeier wrote:
>>>> Am 20.03.2023 um 18:01 schrieb Tom Rini:
>>>>> On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
>>>>>
>>>>>> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
>>>>>>
>>>>>> 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>
>>>>>>
>>>>>> ---
>>>>>>
>>>>>>     fs/fat/fat_write.c | 11 +++++++----
>>>>>>     1 file changed, 7 insertions(+), 4 deletions(-)
>>>>> Can we update test/py/tests/test_fs/ somewhere to have a test for this
>>>>> case? Thanks.
>>>> What is the recommended approach to test internal behavior? The short name
>>>> isn't avialable at the terminal because u-boot support VFAT.
>>> Well, you triggered this problem with a filesystem that had contents
>>> that were "just so" and then didn't work as expected, yes?
>>
>> No, I write a file to a file system and the boot rom do not find the file
>> because the name was wrong (BOOT~1.BIN instead of BOOT.BIN).
>>
>> The mdir command shows the short and long file name. I will add a
>> test_fat.py with a test.
> Ah, ok, and great, thanks!


I have send a separate patch `test: fs: Check fat short file name` or 
should I send a new series with both patches?

Regards
   Stefan
Tom Rini March 22, 2023, 1:20 p.m. UTC | #7
On Wed, Mar 22, 2023 at 09:51:32AM +0100, Stefan Herbrechtsmeier wrote:
> Am 21.03.2023 um 16:54 schrieb Tom Rini:
> > On Tue, Mar 21, 2023 at 04:53:22PM +0100, Stefan Herbrechtsmeier wrote:
> > > Am 21.03.2023 um 16:35 schrieb Tom Rini:
> > > > On Tue, Mar 21, 2023 at 08:43:07AM +0100, Stefan Herbrechtsmeier wrote:
> > > > > Am 20.03.2023 um 18:01 schrieb Tom Rini:
> > > > > > On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:
> > > > > > 
> > > > > > > From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> > > > > > > 
> > > > > > > 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>
> > > > > > > 
> > > > > > > ---
> > > > > > > 
> > > > > > >     fs/fat/fat_write.c | 11 +++++++----
> > > > > > >     1 file changed, 7 insertions(+), 4 deletions(-)
> > > > > > Can we update test/py/tests/test_fs/ somewhere to have a test for this
> > > > > > case? Thanks.
> > > > > What is the recommended approach to test internal behavior? The short name
> > > > > isn't avialable at the terminal because u-boot support VFAT.
> > > > Well, you triggered this problem with a filesystem that had contents
> > > > that were "just so" and then didn't work as expected, yes?
> > > 
> > > No, I write a file to a file system and the boot rom do not find the file
> > > because the name was wrong (BOOT~1.BIN instead of BOOT.BIN).
> > > 
> > > The mdir command shows the short and long file name. I will add a
> > > test_fat.py with a test.
> > Ah, ok, and great, thanks!
> 
> 
> I have send a separate patch `test: fs: Check fat short file name` or should
> I send a new series with both patches?

A follow-up is fine.
Tom Rini March 31, 2023, 2:15 p.m. UTC | #8
On Fri, Mar 17, 2023 at 01:04:13PM +0100, Stefan Herbrechtsmeier wrote:

> From: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
> 
> 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>

Applied to u-boot/next, thanks!
diff mbox series

Patch

diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index 00541ebc3a..413fc432eb 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -141,6 +141,8 @@  static int set_name(fat_itr *itr, const char *filename, char *shortname)
 	if (!strcmp(buf, filename)) {
 		ret = 1;
 		goto out;
+	} else if (!strcasecmp(buf, filename)) {
+		goto out_ret;
 	}
 
 	/* 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))
 			continue;
 
-		debug("chosen short name: %s\n", buf);
-		/* Each long name directory entry takes 13 characters. */
-		ret = (strlen(filename) + 25) / 13;
-		goto out;
+		goto out_ret;
 	}
 	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:
 	memcpy(shortname, &dirent, SHORT_NAME_SIZE);
 	return ret;