Changeset d51538bd in rtems


Ignore:
Timestamp:
Mar 16, 2017, 2:12:20 PM (2 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11
Children:
d2e31f7
Parents:
89164c67
git-author:
Sebastian Huber <sebastian.huber@…> (03/16/17 14:12:20)
git-committer:
Sebastian Huber <sebastian.huber@…> (03/21/17 15:15:25)
Message:

dosfs: Fix file name search

Do not use our long file name entry count to optimize the file name
search. The Unicode comparison must be taken into account.

Close #2939.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libfs/src/dosfs/msdos_misc.c

    r89164c67 rd51538bd  
    14421442                    MSDOS_ATTR_LFN)
    14431443                {
     1444                    bool is_first_lfn_entry =
     1445                        (lfn_start.cln == FAT_FILE_SHORT_NAME);
     1446
    14441447/*                    int   o;*/
    14451448#if MSDOS_FIND_PRINT
     
    14531456                     * the first entry of a LFN ?
    14541457                     */
    1455                     if (lfn_start.cln == FAT_FILE_SHORT_NAME)
     1458                    if (is_first_lfn_entry)
    14561459                    {
    14571460                        entry_matched = false;
     
    14651468                            continue;
    14661469
    1467                         /*
    1468                          * Does the number of entries in the LFN directory
    1469                          * entry match the number we expect for this
    1470                          * file name. Note we do not know the number of
    1471                          * characters in the entry so this is check further
    1472                          * on when the characters are checked.
    1473                          */
    1474                         if (lfn_entries != (*MSDOS_DIR_ENTRY_TYPE(entry) &
    1475                                             MSDOS_LAST_LONG_ENTRY_MASK))
    1476                             continue;
    1477 
    1478                         /*
    1479                          * Get the checksum of the short entry.
    1480                          */
    14811470                        lfn_start.cln = dir_offset;
    14821471                        lfn_start.ofs = dir_entry;
    1483                         lfn_entry = lfn_entries;
     1472                        lfn_entry = (*MSDOS_DIR_ENTRY_TYPE(entry)
     1473                            & MSDOS_LAST_LONG_ENTRY_MASK);
    14841474                        lfn_checksum = *MSDOS_DIR_LFN_CHECKSUM(entry);
    14851475
     
    15141504                        converter,
    15151505                        entry,
    1516                         (lfn_entry + 1) == lfn_entries,
     1506                        is_first_lfn_entry,
    15171507                        &entry_utf8_normalized[0],
    15181508                        sizeof (entry_utf8_normalized));
  • testsuites/fstests/fsdosfsname01/init.c

    r89164c67 rd51538bd  
    5151#define NUMBER_OF_FILES 13
    5252#define NUMBER_OF_DIRECTORIES_INVALID 25
    53 #define NUMBER_OF_DIRECTORIES_DUPLICATED 2
     53#define NUMBER_OF_DIRECTORIES_DUPLICATED 3
    5454#define NUMBER_OF_MULTIBYTE_NAMES_DUPLICATED 2
    5555#define NUMBER_OF_FILES_DUPLICATED 2
     
    198198  },
    199199  {
     200    "Kurzdir",
     201    3,
     202    {
     203      "kurzdir",
     204      "KURZDIR",
     205      "Kurzdir"
     206    }
     207  },
     208  {
    200209    "long_conventional_dir",
    201210    3,
Note: See TracChangeset for help on using the changeset viewer.