Changeset a76c31e1 in rtems


Ignore:
Timestamp:
Sep 6, 2017, 11:58:28 AM (23 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11
Children:
a3199d91
Parents:
e1c3dc09
git-author:
Sebastian Huber <sebastian.huber@…> (09/06/17 11:58:28)
git-committer:
Sebastian Huber <sebastian.huber@…> (09/06/17 12:09:11)
Message:

dosfs: Fix find name next entry preparation

Close #2964.

File:
1 edited

Legend:

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

    re1c3dc09 ra76c31e1  
    12421242    const size_t                 entry_size,
    12431243    const uint8_t               *filename,
    1244     const size_t                 filename_size_remaining,
     1244    const size_t                 name_len_remaining,
    12451245    bool                        *is_matching)
    12461246{
    1247   ssize_t      size_remaining = filename_size_remaining;
     1247  ssize_t      size_remaining = name_len_remaining;
    12481248  int          eno            = 0;
    12491249  uint8_t      entry_normalized[MSDOS_LFN_ENTRY_SIZE_UTF8];
     
    12711271            } else {
    12721272                *is_matching   = false;
    1273                 size_remaining = filename_size_remaining;
     1273                size_remaining = name_len_remaining;
    12741274            }
    12751275
     
    12861286
    12871287    return size_remaining;
     1288}
     1289
     1290static void
     1291msdos_prepare_for_next_entry(
     1292    fat_pos_t *lfn_start,
     1293    bool      *entry_matched,
     1294    ssize_t   *name_len_remaining,
     1295    size_t     name_len_for_compare)
     1296{
     1297    lfn_start->cln = FAT_FILE_SHORT_NAME;
     1298    *entry_matched = false;
     1299    *name_len_remaining = name_len_for_compare;
    12881300}
    12891301
     
    13091321    fat_pos_t         lfn_start;
    13101322    uint8_t           lfn_checksum      = 0;
    1311     bool              entry_matched       = false;
     1323    bool              entry_matched;
    13121324    bool              empty_space_found = false;
    13131325    uint32_t          entries_per_block = bts2rd / MSDOS_DIRECTORY_ENTRY_STRUCT_SIZE;
     
    13161328    size_t            bytes_in_entry;
    13171329    bool              filename_matched  = false;
    1318     ssize_t           filename_size_remaining = name_len_for_compare;
     1330    ssize_t           name_len_remaining;
    13191331    rtems_dosfs_convert_control *converter = fs_info->converter;
    13201332    uint32_t          dir_offset = 0;
     
    13261338     */
    13271339
    1328     lfn_start.cln = lfn_start.ofs = FAT_FILE_SHORT_NAME;
     1340    msdos_prepare_for_next_entry(&lfn_start, &entry_matched,
     1341                                 &name_len_remaining,
     1342                                 name_len_for_compare);
    13291343
    13301344    while (   (bytes_read = fat_file_read (&fs_info->fat, fat_fd, (dir_offset * bts2rd),
     
    14201434                        *empty_entry_count, empty_space_found);
    14211435#endif
     1436                msdos_prepare_for_next_entry(&lfn_start, &entry_matched,
     1437                                             &name_len_remaining,
     1438                                             name_len_for_compare);
    14221439            }
    14231440            else
     
    14931510                        printf ("MSFS:[4.4] no match\n");
    14941511#endif
    1495                         lfn_start.cln = FAT_FILE_SHORT_NAME;
     1512                        msdos_prepare_for_next_entry(&lfn_start,
     1513                                                     &entry_matched,
     1514                                                     &name_len_remaining,
     1515                                                     name_len_for_compare);
    14961516                        continue;
    14971517                    }
     
    15081528                        sizeof (entry_utf8_normalized));
    15091529                    if (bytes_in_entry > 0) {
    1510                         filename_size_remaining = msdos_compare_entry_against_filename (
     1530                        name_len_remaining = msdos_compare_entry_against_filename (
    15111531                            converter,
    15121532                            &entry_utf8_normalized[0],
    15131533                            bytes_in_entry,
    15141534                            &filename_converted[0],
    1515                             filename_size_remaining,
     1535                            name_len_remaining,
    15161536                            &entry_matched);
    15171537
    1518                         if (filename_size_remaining < 0
    1519                             || (! entry_matched)) {
    1520                             filename_size_remaining = name_len_for_compare;
    1521                             lfn_start.cln = FAT_FILE_SHORT_NAME;
     1538                        if (name_len_remaining < 0 || !entry_matched) {
     1539                            msdos_prepare_for_next_entry(&lfn_start,
     1540                                                         &entry_matched,
     1541                                                         &name_len_remaining,
     1542                                                         name_len_for_compare);
    15221543                        }
    15231544                    } else {
    1524                       lfn_start.cln = FAT_FILE_SHORT_NAME;
    1525                       entry_matched   = false;
     1545                        msdos_prepare_for_next_entry(&lfn_start,
     1546                                                     &entry_matched,
     1547                                                     &name_len_remaining,
     1548                                                     name_len_for_compare);
    15261549                    }
    15271550                }
     
    15441567                            lfn_checksum != msdos_lfn_checksum(entry))
    15451568                            entry_matched = false;
    1546                         else if (filename_size_remaining == 0) {
     1569                        else if (name_len_remaining == 0) {
    15471570                            filename_matched = true;
    15481571                            rc = msdos_on_entry_found (
     
    15711594                            bytes_in_entry);
    15721595                        if (bytes_in_entry > 0) {
    1573                             filename_size_remaining = msdos_compare_entry_against_filename (
     1596                            name_len_remaining = msdos_compare_entry_against_filename (
    15741597                                converter,
    15751598                                &entry_utf8_normalized[0],
     
    15781601                                name_len_for_compare,
    15791602                                &entry_matched);
    1580                             if (entry_matched && filename_size_remaining == 0) {
     1603                            if (entry_matched && name_len_remaining == 0) {
    15811604                                filename_matched = true;
    15821605                                rc = msdos_on_entry_found (
     
    15921615                                );
    15931616                            }
    1594                             if (rc == RC_OK && (! filename_matched)) {
    1595                                 lfn_start.cln           = FAT_FILE_SHORT_NAME;
    1596                                 entry_matched           = false;
    1597                                 filename_size_remaining = name_len_for_compare;
     1617                            if (rc == RC_OK && !filename_matched) {
     1618                                msdos_prepare_for_next_entry(&lfn_start,
     1619                                                             &entry_matched,
     1620                                                             &name_len_remaining,
     1621                                                             name_len_for_compare);
    15981622                            }
    15991623                        } else {
    1600                           lfn_start.cln           = FAT_FILE_SHORT_NAME;
    1601                           entry_matched           = false;
    1602                           filename_size_remaining = name_len_for_compare;
     1624                          msdos_prepare_for_next_entry(&lfn_start,
     1625                                                       &entry_matched,
     1626                                                       &name_len_remaining,
     1627                                                       name_len_for_compare);
    16031628                        }
    16041629                    }
Note: See TracChangeset for help on using the changeset viewer.