]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
fat: correct sign for deletion mark
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Wed, 26 Jul 2023 08:33:13 +0000 (10:33 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 3 Aug 2023 19:30:53 +0000 (15:30 -0400)
The FAT file systems uses character '\xe5' to mark a deleted directory
entry. If a file name starts with this character, it is substituted by
'\x05' in the directory entry.

While (signed char)'\xe5' is a negative number 0xe5 is a positive integer
number. We therefore have define a constant DELETED_MARK which matches the
signedness of the characters in the directory entry.

Correct a comparison where we used the constant 0xe5 with the wrong sign.
Use the constant aRING instead of 0x05 like in the rest of the code.

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Fixes: 57b745e2387a ("fs: fat: call set_name() only once")
Fixes: 28cef9ca2e86 ("fs: fat: create correct short names")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
fs/fat/fat_write.c

index e2a9913f807a8f6645ccdf06efd06925b8b438f2..a6294419b8d66ad914668da57a39b353c85fde9f 100644 (file)
@@ -132,9 +132,9 @@ static int set_name(fat_itr *itr, const char *filename, char *shortname)
                return period_location;
        if (*dirent.name == ' ')
                *dirent.name = '_';
-       /* 0xe5 signals a deleted directory entry. Replace it by 0x05. */
-       if (*dirent.name == 0xe5)
-               *dirent.name = 0x05;
+       /* Substitute character 0xe5 signaling deletetion by character 0x05 */
+       if (*dirent.name == DELETED_FLAG)
+               *dirent.name = aRING;
 
        /* If filename and short name are the same, quit. */
        sprintf(buf, "%.*s.%.3s", period_location, dirent.name, dirent.ext);