Ignore:
Timestamp:
2011-11-20T12:07:50Z (14 years ago)
Author:
Frantisek Princ <frantisek.princ@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
343ccfd
Parents:
ae3d4f8
Message:

added many getters and setters

File:
1 edited

Legend:

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

    rae3d4f8 rfe27eb4  
    3939#include "libext4.h"
    4040
    41 uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg)
    42 {
    43         return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) |
    44                 uint32_t_le2host(bg->block_bitmap_lo);
    45 }
    46 
    47 uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg)
    48 {
    49         return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) |
    50                 uint32_t_le2host(bg->inode_bitmap_lo);
    51 }
    52 
    53 uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg)
    54 {
    55         return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) |
    56                 uint32_t_le2host(bg->inode_table_first_block_lo);
    57 }
    58 
    59 uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg)
    60 {
    61         return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) |
    62                 uint16_t_le2host(bg->free_blocks_count_lo);
    63 }
    64 
    65 void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg, uint32_t value) {
     41uint64_t ext4_block_group_get_block_bitmap(ext4_block_group_t *bg,
     42                ext4_superblock_t *sb)
     43{
     44        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     45                return ((uint64_t)uint32_t_le2host(bg->block_bitmap_hi) << 32) |
     46                        uint32_t_le2host(bg->block_bitmap_lo);
     47        } else {
     48                return uint32_t_le2host(bg->block_bitmap_lo);
     49        }
     50}
     51
     52void ext4_block_group_set_block_bitmap(ext4_block_group_t *bg,
     53                ext4_superblock_t *sb, uint64_t block_bitmap)
     54{
     55        bg->block_bitmap_lo = host2uint32_t_le((block_bitmap << 32) >> 32);
     56
     57        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     58                bg->block_bitmap_hi = host2uint32_t_le(block_bitmap >> 32);
     59        }
     60}
     61
     62uint64_t ext4_block_group_get_inode_bitmap(ext4_block_group_t *bg,
     63                ext4_superblock_t *sb)
     64{
     65        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     66                return ((uint64_t)uint32_t_le2host(bg->inode_bitmap_hi) << 32) |
     67                        uint32_t_le2host(bg->inode_bitmap_lo);
     68        } else {
     69                return uint32_t_le2host(bg->inode_bitmap_lo);
     70        }
     71
     72}
     73
     74void ext4_block_group_set_inode_bitmap(ext4_block_group_t *bg,
     75                ext4_superblock_t *sb, uint64_t inode_bitmap)
     76{
     77        bg->inode_bitmap_lo = host2uint32_t_le((inode_bitmap << 32) >> 32);
     78
     79        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     80                bg->inode_bitmap_hi = host2uint32_t_le(inode_bitmap >> 32);
     81        }
     82}
     83
     84uint64_t ext4_block_group_get_inode_table_first_block(ext4_block_group_t *bg,
     85                ext4_superblock_t *sb)
     86{
     87        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     88                return ((uint64_t)uint32_t_le2host(bg->inode_table_first_block_hi) << 32) |
     89                        uint32_t_le2host(bg->inode_table_first_block_lo);
     90        } else {
     91                return uint32_t_le2host(bg->inode_table_first_block_lo);
     92        }
     93}
     94
     95void ext4_block_group_set_inode_table_first_block(ext4_block_group_t *bg,
     96                ext4_superblock_t *sb, uint64_t ino_tbl_first)
     97{
     98        bg->inode_table_first_block_lo = host2uint32_t_le((ino_tbl_first << 32) >> 32);
     99
     100        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     101                bg->inode_table_first_block_hi = host2uint32_t_le(ino_tbl_first >> 32);
     102        }
     103}
     104
     105uint32_t ext4_block_group_get_free_blocks_count(ext4_block_group_t *bg,
     106                ext4_superblock_t *sb)
     107{
     108        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     109                return ((uint32_t)uint16_t_le2host(bg->free_blocks_count_hi) << 16) |
     110                        uint16_t_le2host(bg->free_blocks_count_lo);
     111        } else {
     112                return uint16_t_le2host(bg->free_blocks_count_lo);
     113        }
     114}
     115
     116void ext4_block_group_set_free_blocks_count(ext4_block_group_t *bg,
     117                ext4_superblock_t *sb, uint32_t value)
     118{
    66119        bg->free_blocks_count_lo = host2uint16_t_le((value << 16) >> 16);
    67         bg->free_blocks_count_hi = host2uint16_t_le(value >> 16);
    68 }
    69 
    70 uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg)
    71 {
    72         return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) |
    73                 uint16_t_le2host(bg->free_inodes_count_lo);
    74 }
    75 
    76 uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg)
    77 {
    78         return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) |
    79                 uint16_t_le2host(bg->used_dirs_count_lo);
     120        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     121                bg->free_blocks_count_hi = host2uint16_t_le(value >> 16);
     122        }
     123}
     124
     125uint32_t ext4_block_group_get_free_inodes_count(ext4_block_group_t *bg,
     126                ext4_superblock_t *sb)
     127{
     128        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     129                return ((uint32_t)uint16_t_le2host(bg->free_inodes_count_hi) << 16) |
     130                        uint16_t_le2host(bg->free_inodes_count_lo);
     131        } else {
     132                return uint16_t_le2host(bg->free_inodes_count_lo);
     133        }
     134}
     135
     136void ext4_block_group_set_free_inodes_count(ext4_block_group_t *bg,
     137                ext4_superblock_t *sb, uint32_t value)
     138{
     139        bg->free_inodes_count_lo = host2uint16_t_le((value << 16) >> 16);
     140        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     141                bg->free_inodes_count_hi = host2uint16_t_le(value >> 16);
     142        }
     143}
     144
     145
     146uint32_t ext4_block_group_get_used_dirs_count(ext4_block_group_t *bg,
     147                ext4_superblock_t *sb)
     148{
     149        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     150                return ((uint32_t)uint16_t_le2host(bg->used_dirs_count_hi) << 16) |
     151                        uint16_t_le2host(bg->used_dirs_count_lo);
     152        } else {
     153                return uint16_t_le2host(bg->used_dirs_count_lo);
     154        }
     155}
     156
     157void ext4_block_group_set_used_dirs_count(ext4_block_group_t *bg,
     158                ext4_superblock_t *sb, uint32_t count)
     159{
     160        bg->used_dirs_count_lo = host2uint16_t_le((count << 16) >> 16);
     161        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     162                bg->used_dirs_count_hi = host2uint16_t_le(count >> 16);
     163        }
    80164}
    81165
     
    85169}
    86170
    87 uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg)
    88 {
    89         return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) |
    90                 uint16_t_le2host(bg->itable_unused_lo);
     171uint32_t ext4_block_group_get_itable_unused(ext4_block_group_t *bg,
     172                ext4_superblock_t *sb)
     173{
     174        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     175                return ((uint32_t)uint16_t_le2host(bg->itable_unused_hi) << 16) |
     176                        uint16_t_le2host(bg->itable_unused_lo);
     177        } else {
     178                return uint16_t_le2host(bg->itable_unused_lo);
     179        }
     180}
     181
     182void ext4_block_group_set_itable_unused(ext4_block_group_t *bg,
     183                ext4_superblock_t *sb, uint32_t value)
     184{
     185        bg->itable_unused_lo = host2uint16_t_le((value << 16) >> 16);
     186        if (ext4_superblock_get_desc_size(sb) > EXT4_BLOCK_MIN_GROUP_DESCRIPTOR_SIZE) {
     187                bg->itable_unused_hi = host2uint16_t_le(value >> 16);
     188        }
     189
    91190}
    92191
     
    94193{
    95194        return uint16_t_le2host(bg->checksum);
     195}
     196
     197void ext4_block_group_set_checksum(ext4_block_group_t *bg, uint16_t checksum)
     198{
     199        bg->checksum = host2uint16_t_le(checksum);
    96200}
    97201
Note: See TracChangeset for help on using the changeset viewer.