Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset c56c4576 in mainline


Ignore:
Timestamp:
2011-08-18T18:09:11Z (10 years ago)
Author:
Oleg Romanenko <romanenko.oleg@…>
Branches:
lfn, master
Children:
7234617
Parents:
602c3d8c
Message:

exFAT: fixes to support big endian. Tested on mips32 EB

Location:
uspace/srv/fs/exfat
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/exfat/exfat_directory.c

    r602c3d8c rc56c4576  
    283283                if (rc != EOK)
    284284                        return rc;
    285                 memcpy((uint8_t *)&array[i], (uint8_t *)de, sizeof(exfat_dentry_t));
     285                array[i] = *de;
    286286                rc = exfat_directory_next(di);
    287287                if (rc!=EOK) {
     
    297297
    298298        /* Sync */
    299         array[0].file.attr = df->attr;
    300         array[1].stream.firstc = ds->firstc;
     299        array[0].file.attr = host2uint16_t_le(df->attr);
     300        array[1].stream.firstc = host2uint32_t_le(ds->firstc);
    301301        array[1].stream.flags = ds->flags;
    302         array[1].stream.valid_data_size = ds->valid_data_size;
    303         array[1].stream.data_size = ds->data_size;
     302        array[1].stream.valid_data_size = host2uint64_t_le(ds->valid_data_size);
     303        array[1].stream.data_size = host2uint64_t_le(ds->data_size);
    304304        array[0].file.checksum = host2uint16_t_le(exfat_directory_set_checksum((uint8_t *)array,
    305305            count*sizeof(exfat_dentry_t)));
     
    310310                if (rc != EOK)
    311311                        return rc;
    312                 memcpy((uint8_t *)de, (uint8_t *)&array[i], sizeof(exfat_dentry_t));
     312                *de = array[i];
    313313                di->b->dirty = true;
    314314                rc = exfat_directory_next(di);
     
    318318                }
    319319        }
     320        free(array);
    320321
    321322        return EOK;
     
    369370        uint16_t wname[EXFAT_FILENAME_LEN+1];
    370371        int rc, i;
    371         size_t uctable_chars;
     372        size_t uctable_chars, j;
    372373        aoff64_t pos;
    373374
     
    420421        if (rc != EOK)
    421422                return rc;
    422         memcpy(de, &df, sizeof(exfat_dentry_t));
     423        *de = df;
    423424        di->b->dirty = true;
    424425        rc = exfat_directory_next(di);
     
    430431        if (rc != EOK)
    431432                return rc;
    432         memcpy(de, &ds, sizeof(exfat_dentry_t));
     433        *de = ds;
    433434        di->b->dirty = true;
    434435
     
    451452                        return rc;
    452453                de->type = EXFAT_TYPE_NAME;
    453                 memcpy((uint8_t*)de->name.name, (uint8_t*)sname, sizeof(uint16_t)*chars);
     454                /* test */
     455                for (j=0; j<chars; j++){
     456                        de->name.name[j] = *sname;
     457                        sname++;
     458                }
     459
    454460                di->b->dirty = true;
    455461                sname += chars;
  • uspace/srv/fs/exfat/exfat_ops.c

    r602c3d8c rc56c4576  
    125125                df.attr = 0;
    126126
    127         ds.firstc = host2uint32_t_le(node->firstc);
     127        ds.firstc = node->firstc;
    128128        if (node->size == 0 && node->firstc == 0) {
    129129                ds.flags = 0;
     
    132132                ds.flags |= (!node->fragmented << 1);
    133133        }
    134         ds.valid_data_size = host2uint64_t_le(node->size);
    135         ds.data_size = host2uint64_t_le(node->size);
     134        ds.valid_data_size = node->size;
     135        ds.data_size = node->size;
    136136
    137137        exfat_directory_open_parent(&di, node->idx->devmap_handle, node->idx->pfc,
     
    335335        switch (exfat_classify_dentry(d)) {
    336336        case EXFAT_DENTRY_FILE:
    337                 nodep->type = (d->file.attr & EXFAT_ATTR_SUBDIR)?
     337                nodep->type = (uint16_t_le2host(d->file.attr) & EXFAT_ATTR_SUBDIR)?
    338338                    EXFAT_DIRECTORY : EXFAT_FILE;
    339339                rc = exfat_directory_next(&di);
     
    349349                        return rc;
    350350                }
    351                 nodep->firstc = d->stream.firstc;
    352                 nodep->size = d->stream.data_size;
     351                nodep->firstc = uint32_t_le2host(d->stream.firstc);
     352                nodep->size = uint64_t_le2host(d->stream.data_size);
    353353                nodep->fragmented = (d->stream.flags & 0x02) == 0;
    354354                break;
    355355        case EXFAT_DENTRY_BITMAP:
    356356                nodep->type = EXFAT_BITMAP;
    357                 nodep->firstc = d->bitmap.firstc;
    358                 nodep->size = d->bitmap.size;
     357                nodep->firstc = uint32_t_le2host(d->bitmap.firstc);
     358                nodep->size = uint64_t_le2host(d->bitmap.size);
    359359                nodep->fragmented = true;
    360360                break;
    361361        case EXFAT_DENTRY_UCTABLE:
    362362                nodep->type = EXFAT_UCTABLE;
    363                 nodep->firstc = d->uctable.firstc;
    364                 nodep->size = d->uctable.size;
     363                nodep->firstc = uint32_t_le2host(d->uctable.firstc);
     364                nodep->size = uint64_t_le2host(d->uctable.size);
    365365                nodep->fragmented = true;
    366366                break;
     
    10741074
    10751075        bitmapp->type = EXFAT_BITMAP;
    1076         bitmapp->firstc = de->bitmap.firstc;
     1076        bitmapp->firstc = uint32_t_le2host(de->bitmap.firstc);
    10771077        bitmapp->fragmented = true;
    10781078        bitmapp->idx->parent_fragmented = true;
    10791079        bitmapp->refcnt = 1;
    10801080        bitmapp->lnkcnt = 0;
    1081         bitmapp->size = de->bitmap.size;
     1081        bitmapp->size = uint64_t_le2host(de->bitmap.size);
    10821082
    10831083        /* Initialize the uctable node. */
     
    11161116
    11171117        uctablep->type = EXFAT_UCTABLE;
    1118         uctablep->firstc = de->uctable.firstc;
     1118        uctablep->firstc = uint32_t_le2host(de->uctable.firstc);
    11191119        uctablep->fragmented = true;
    11201120        uctablep->idx->parent_fragmented = true;
    11211121        uctablep->refcnt = 1;
    11221122        uctablep->lnkcnt = 0;
    1123         uctablep->size = de->uctable.size;
     1123        uctablep->size = uint64_t_le2host(de->uctable.size);
    11241124
    11251125        rc = exfat_directory_close(&di);
Note: See TracChangeset for help on using the changeset viewer.