Changeset 9b9d37bb in mainline for uspace/lib/ext4/libext4_inode.c


Ignore:
Timestamp:
2011-10-06T09:48:53Z (13 years ago)
Author:
Frantisek Princ <frantisek.princ@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1114173
Parents:
3712434
Message:

mounting + list of mounted directory (ported from ext2) - many TODO remaining

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/ext4/libext4_inode.c

    r3712434 r9b9d37bb  
    3939#include "libext4.h"
    4040
     41uint32_t ext4_inode_get_mode(ext4_superblock_t *sb, ext4_inode_t *inode)
     42{
     43        if (ext4_superblock_get_creator_os(sb) == EXT4_SUPERBLOCK_OS_HURD) {
     44                return ((uint32_t)uint16_t_le2host(inode->osd2.hurd2.mode_high)) << 16 |
     45                    ((uint32_t)uint16_t_le2host(inode->mode));
     46        }
     47        return uint16_t_le2host(inode->mode);
     48}
     49
     50bool ext4_inode_is_type(ext4_superblock_t *sb, ext4_inode_t *inode, uint32_t type)
     51{
     52        uint32_t mode = ext4_inode_get_mode(sb, inode);
     53        return (mode & EXT4_INODE_MODE_TYPE_MASK) == type;
     54}
     55
    4156/*
    42 uint32_t ext4_inode_get_mode(ext4_inode_t *inode)
    4357uint32_t ext4_inode_get_uid(ext4_inode_t *inode)
    4458*/
    4559
    46 uint64_t ext4_inode_get_size(ext4_inode_t *inode)
     60uint64_t ext4_inode_get_size(ext4_superblock_t *sb, ext4_inode_t *inode)
    4761{
    48         return ((uint64_t)uint32_t_le2host(inode->size_hi)) << 32 |
    49                         ((uint64_t)uint32_t_le2host(inode->size_lo));
     62        uint32_t major_rev = ext4_superblock_get_rev_level(sb);
     63
     64        if (major_rev > 0 && ext4_inode_is_type(sb, inode, EXT4_INODE_MODE_FILE)) {
     65                return ((uint64_t)uint32_t_le2host(inode->size_hi)) << 32 |
     66                            ((uint64_t)uint32_t_le2host(inode->size_lo));
     67                }
     68        return uint32_t_le2host(inode->size_lo);
    5069}
    5170
     
    6887*/
    6988
     89uint32_t ext4_inode_get_direct_block(ext4_inode_t *inode, uint8_t idx)
     90{
     91        assert(idx < EXT4_INODE_DIRECT_BLOCK_COUNT);
     92        return uint32_t_le2host(inode->blocks[idx]);
     93}
     94
     95uint32_t ext4_inode_get_indirect_block(ext4_inode_t *inode, uint8_t idx)
     96{
     97        assert(idx < EXT4_INODE_INDIRECT_BLOCK_COUNT);
     98        return uint32_t_le2host(inode->blocks[idx + EXT4_INODE_INDIRECT_BLOCK]);
     99}
     100
    70101/**
    71102 * @}
Note: See TracChangeset for help on using the changeset viewer.