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.maude...@embedded-brains.de> wrote: From: Christian Mauderer <christian.maude...@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@rtems.org http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel