All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Clark <robdclark@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 8/8] fs/fat: fix case for FAT shortnames
Date: Sun, 13 Aug 2017 06:45:28 -0400	[thread overview]
Message-ID: <20170813104531.16407-9-robdclark@gmail.com> (raw)
In-Reply-To: <20170813104531.16407-1-robdclark@gmail.com>

Noticed when comparing our output to linux.  There are some lcase bits
which control whether filename and/or extension should be downcase'd.

Signed-off-by: Rob Clark <robdclark@gmail.com>
---
 fs/fat/fat.c       | 11 ++++++++---
 fs/fat/fat_write.c |  4 ++--
 include/fat.h      |  3 +++
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 08a066d80d..8e1790a590 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -31,7 +31,7 @@ static const int vfat_enabled = 0;
 /*
  * Convert a string to lowercase.
  */
-static void downcase(char *str)
+static void downcase(char *str, unsigned num)
 {
 	while (*str != '\0') {
 		*str = tolower(*str);
@@ -131,10 +131,16 @@ static void get_name(dir_entry *dirent, char *s_name)
 	ptr = s_name;
 	while (*ptr && *ptr != ' ')
 		ptr++;
+	if (dirent->lcase & CASE_LOWER_BASE)
+		downcase(s_name, (unsigned)(ptr - s_name));
 	if (dirent->ext[0] && dirent->ext[0] != ' ') {
+		char *ext;
+
 		*ptr = '.';
-		ptr++;
+		ext = ++ptr;
 		memcpy(ptr, dirent->ext, 3);
+		if (dirent->lcase & CASE_LOWER_EXT)
+			downcase(ext, 3);
 		ptr[3] = '\0';
 		while (*ptr && *ptr != ' ')
 			ptr++;
@@ -144,7 +150,6 @@ static void get_name(dir_entry *dirent, char *s_name)
 		*s_name = '\0';
 	else if (*s_name == aRING)
 		*s_name = DELETED_FLAG;
-	downcase(s_name);
 }
 
 static int flush_dirty_fat_buffer(fsdata *mydata);
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index f6f06289f4..3c8cc36b8a 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -345,7 +345,7 @@ get_long_file_name(fsdata *mydata, int curclust, __u8 *cluster,
 		*l_name = '\0';
 	else if (*l_name == aRING)
 		*l_name = DELETED_FLAG;
-	downcase(l_name);
+	downcase(l_name, ~0);
 
 	/* Return the real directory entry */
 	*retdent = realdent;
@@ -981,7 +981,7 @@ static int do_fat_write(const char *filename, void *buffer, loff_t size,
 
 	memcpy(l_filename, filename, name_len);
 	l_filename[name_len] = 0; /* terminate the string */
-	downcase(l_filename);
+	downcase(l_filename, ~0);
 
 	startsect = mydata->rootdir_sect;
 	retdent = find_directory_entry(mydata, startsect,
diff --git a/include/fat.h b/include/fat.h
index b2d4b952fd..5e4924316a 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -128,6 +128,9 @@ typedef struct volume_info
 	/* Boot sign comes last, 2 bytes */
 } volume_info;
 
+#define CASE_LOWER_BASE	8	/* base is lower case */
+#define CASE_LOWER_EXT	16	/* extension is lower case */
+
 typedef struct dir_entry {
 	char	name[8],ext[3];	/* Name and extension */
 	__u8	attr;		/* Attribute bits */
-- 
2.13.0

  parent reply	other threads:[~2017-08-13 10:45 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-13 10:45 [U-Boot] [PATCH 0/8] fs/fat: cleanups + readdir implementation Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 1/8] fs/fat: split out helper to init fsdata Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 2/8] fs/fat: introduce new director iterators Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 3/8] fat/fs: convert to directory iterators Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 4/8] fs: add fs_readdir() Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 5/8] fs/fat: implement opendir/readdir/closedir Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 6/8] fat/fs: remove a bunch of dead code Rob Clark
2017-08-13 11:11   ` Stefan Bruens
2017-08-13 10:45 ` [U-Boot] [PATCH 7/8] fat/fs: move ls to generic implementation Rob Clark
2017-08-13 10:45 ` Rob Clark [this message]
2017-08-13 11:25   ` [U-Boot] [PATCH 8/8] fs/fat: fix case for FAT shortnames Stefan Bruens
2017-08-13 12:14     ` Rob Clark
2017-08-13 18:09   ` [U-Boot] [PATCH v2 " Rob Clark
2017-08-13 11:28 ` [U-Boot] [PATCH 0/8] fs/fat: cleanups + readdir implementation Heinrich Schuchardt
2017-08-13 12:13   ` Rob Clark
2017-08-13 21:13 ` Tom Rini
2017-08-13 21:50   ` Rob Clark
2017-08-13 21:59     ` Tom Rini
2017-08-14 12:48       ` Rob Clark
2017-08-14 13:05         ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170813104531.16407-9-robdclark@gmail.com \
    --to=robdclark@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.