summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-02-13 15:13:02 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-02-14 08:09:57 +0100
commit04684cbc436f79339854c4bca22f65bb947f6949 (patch)
treea4f92987df25bf8fecb44b9d0429008dde0e6302
parentChange version to 4.11.1.99 (diff)
downloadrtems-04684cbc436f79339854c4bca22f65bb947f6949.tar.bz2
dosfs: Fix msdos_find_file_in_directory()
For a filename match the entry must match without anything remaining. Update #2908.
-rw-r--r--cpukit/libfs/src/dosfs/msdos_misc.c2
-rw-r--r--testsuites/fstests/fsdosfsname01/init.c22
2 files changed, 23 insertions, 1 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_misc.c b/cpukit/libfs/src/dosfs/msdos_misc.c
index 76dff439a9..39f6ca28a4 100644
--- a/cpukit/libfs/src/dosfs/msdos_misc.c
+++ b/cpukit/libfs/src/dosfs/msdos_misc.c
@@ -1539,7 +1539,7 @@ msdos_find_file_in_directory (
if (lfn_entry || (lfn_checksum != cs))
entry_matched = false;
- else {
+ else if (filename_size_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 c5af7fc351..4d0695872a 100644
--- a/testsuites/fstests/fsdosfsname01/init.c
+++ b/testsuites/fstests/fsdosfsname01/init.c
@@ -1071,6 +1071,22 @@ static void test_compatibility( void )
rtems_test_assert( rc == 0 );
}
+static void test_end_of_string_matches( void )
+{
+ int rc;
+
+ rc = mkdir( MOUNT_DIR "/lib.beam", S_IRWXU | S_IRWXG | S_IRWXO );
+ rtems_test_assert( rc == 0 );
+
+ errno = 0;
+ rc = unlink( MOUNT_DIR "/proc_lib.beam" );
+ rtems_test_assert( rc == -1 );
+ rtems_test_assert( errno == ENOENT );
+
+ rc = unlink( MOUNT_DIR "/lib.beam" );
+ rtems_test_assert( rc == 0 );
+}
+
/*
* Main test method
*/
@@ -1129,6 +1145,8 @@ static void test( void )
"/dev/rdb",
NULL);
+ test_end_of_string_matches();
+
rc = unmount( MOUNT_DIR );
rtems_test_assert( rc == 0 );
@@ -1197,6 +1215,8 @@ static void test( void )
"/dev/rdb",
&mount_opts[1]);
+ test_end_of_string_matches();
+
rc = unmount( MOUNT_DIR );
rtems_test_assert( rc == 0 );
@@ -1260,6 +1280,8 @@ static void test( void )
"/dev/rdc",
&mount_opts[1]);
+ test_end_of_string_matches();
+
rc = unmount( MOUNT_DIR );
rtems_test_assert( rc == 0 );