forked from Imagelibrary/rtems
dosfs: Allow creating a file with similar name.
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. Close #3258.
This commit is contained in:
committed by
Sebastian Huber
parent
004a63efef
commit
d438427cbe
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user