[PATCH] dosfs: Allow creating a file with similar name.

Joel Sherrill joel at rtems.org
Wed Dec 6 15:00:59 UTC 2017


Should the test .doc file be updated to include this test case?

Is this a test case.worth running against other filesystems?

--joel

On Dec 6, 2017 9:57 AM, "Christian Mauderer" <
christian.mauderer at embedded-brains.de> wrote:

From: Christian Mauderer <Christian.Mauderer at embedded-brains.de>

If there is already a file with a long file name it isn't possible to
create a second file which has a name that ends on the first files name
(for example ets.beam and sets.beam). This patch fixes that.
---
 cpukit/libfs/src/dosfs/msdos_misc.c     | 10 +++++++---
 testsuites/fstests/fsdosfsname01/init.c | 25 +++++++++++++++++++++++++
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/cpukit/libfs/src/dosfs/msdos_misc.c b/cpukit/libfs/src/dosfs/
msdos_misc.c
index 79aaa36520..24eb2d11e0 100644
--- a/cpukit/libfs/src/dosfs/msdos_misc.c
+++ b/cpukit/libfs/src/dosfs/msdos_misc.c
@@ -1564,9 +1564,13 @@ msdos_find_file_in_directory (
                     if (entry_matched)
                     {
                         if (lfn_entry ||
-                            lfn_checksum != msdos_lfn_checksum(entry))
-                            entry_matched = false;
-                        else if (name_len_remaining == 0) {
+                            name_len_remaining > 0 ||
+                            lfn_checksum != msdos_lfn_checksum(entry)) {
+                            msdos_prepare_for_next_entry(&lfn_start,
+                                                         &entry_matched,
+
 &name_len_remaining,
+
 name_len_for_compare);
+                        } else if (name_len_remaining == 0) {
                             filename_matched = true;
                             rc = msdos_on_entry_found (
                                 fs_info,
diff --git a/testsuites/fstests/fsdosfsname01/init.c b/testsuites/fstests/
fsdosfsname01/init.c
index d0c909877c..846faf28a3 100644
--- a/testsuites/fstests/fsdosfsname01/init.c
+++ b/testsuites/fstests/fsdosfsname01/init.c
@@ -1097,6 +1097,30 @@ static void test_end_of_string_matches( void )
   rtems_test_assert( rc == 0 );
 }

+static void test_end_of_string_matches_2( void )
+{
+  int rc;
+  int fd;
+
+  fd = open( MOUNT_DIR "/ets.beam", O_RDWR | O_CREAT,
+             S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH );
+  rtems_test_assert( fd >= 0 );
+  rc = close( fd );
+  rtems_test_assert( rc == 0 );
+
+  fd = open( MOUNT_DIR "/sets.beam", O_RDWR | O_CREAT,
+             S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH );
+  rtems_test_assert( fd >= 0 );
+  rc = close( fd );
+  rtems_test_assert( rc == 0 );
+
+  rc = unlink( MOUNT_DIR "/sets.beam" );
+  rtems_test_assert( rc == 0 );
+
+  rc = unlink( MOUNT_DIR "/ets.beam" );
+  rtems_test_assert( rc == 0 );
+}
+
 static void test_full_8_3_name( void )
 {
   int rc;
@@ -1151,6 +1175,7 @@ static void test_file_with_same_name_as_volume_label(
void )
 static void test_special_cases( void )
 {
   test_end_of_string_matches();
+  test_end_of_string_matches_2();
   test_full_8_3_name();
   test_file_with_same_name_as_volume_label();
   test_dir_with_same_name_as_volume_label();
--
2.12.3

_______________________________________________
devel mailing list
devel at rtems.org
http://lists.rtems.org/mailman/listinfo/devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20171206/190d0985/attachment-0002.html>


More information about the devel mailing list