diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-02-13 15:13:02 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-02-14 08:09:57 +0100 |
commit | 04684cbc436f79339854c4bca22f65bb947f6949 (patch) | |
tree | a4f92987df25bf8fecb44b9d0429008dde0e6302 | |
parent | 69ae534cbb97e0961532cdc7fc5233098d62d886 (diff) |
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.c | 2 | ||||
-rw-r--r-- | testsuites/fstests/fsdosfsname01/init.c | 22 |
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 ); |