Changeset fde8a27 in mainline for uspace/srv/fs/minixfs/mfs_utils.c


Ignore:
Timestamp:
2011-03-28T19:17:31Z (14 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1f1cc9d
Parents:
ef76d72
Message:

Fix bug when reading inodes that causes on-disk structures corruption if the
endianness is not native.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs_utils.c

    ref76d72 rfde8a27  
    6565 *content to the native endian format.
    6666 */
    67 int read_ind_block(block_t *b, struct mfs_instance *inst, uint32_t block)
     67int
     68read_ind_block(void *data, struct mfs_instance *inst,
     69                        uint32_t block, mfs_version_t version)
    6870{
    6971        int rc;
    7072        unsigned i;
     73        block_t *b;
     74        uint32_t *ptr32;
     75        uint16_t *ptr16;
    7176
    7277        assert(inst);
     
    7984
    8085        if (rc != EOK)
    81                 return rc;
     86                goto out;
    8287
    83         if (sbi->fs_version == MFS_VERSION_V1) {
    84                 uint16_t *pt16 = b->data;
     88        if (version == MFS_VERSION_V1) {
     89                uint16_t *p = b->data;
     90                ptr16 = data;
     91                for (i = 0; i < sbi->block_size / sizeof(uint16_t); ++i)
     92                        ptr16[i] = conv16(sbi->native, p[i]);
     93        } else {
     94                uint32_t *p = b->data;
     95                ptr32 = data;
     96                for (i = 0; i < sbi->block_size / sizeof(uint32_t); ++i)
     97                        ptr32[i] = conv32(sbi->native, p[i]);
    8598
    86                 for (i = 0; i < MFS_BLOCKSIZE / sizeof(uint16_t); ++i)
    87                         pt16[i] = conv16(sbi->native, pt16[i]);
    88         } else {
    89                 uint32_t *pt32 = b->data;
    90 
    91                 for (i = 0; i < sbi->block_size / sizeof(uint32_t); ++i)
    92                         pt32[i] = conv32(sbi->native, pt32[i]);
    9399        }
    94100
    95         return EOK;
     101        rc = EOK;
     102
     103out:
     104        block_put(b);
     105        return rc;
    96106}
    97107
Note: See TracChangeset for help on using the changeset viewer.