diff options
author | Etienne Brateau <etienne.brateau@gmail.com> | 2022-01-23 05:17:06 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-01-23 12:03:36 +0100 |
commit | 2e2c237ab90ade751753944f0ed1830b24478396 (patch) | |
tree | 5017ab9a57832b979405adacde7cea3c4f36c9d2 /ext2fs/ext2fs.h | |
parent | 013bd5ad3fb25deabde0dfdddb2a4619db08dafc (diff) | |
download | hurd-2e2c237ab90ade751753944f0ed1830b24478396.tar.gz hurd-2e2c237ab90ade751753944f0ed1830b24478396.tar.bz2 hurd-2e2c237ab90ade751753944f0ed1830b24478396.zip |
ext2fs: Take cares of indiannes
In ext2 data are stored in little endian to ensure portability. So
enforce little endian when manipulating these bytes.
Message-Id: <20220123041715.19402-8-etienne.brateau@gmail.com>
Diffstat (limited to 'ext2fs/ext2fs.h')
-rw-r--r-- | ext2fs/ext2fs.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/ext2fs/ext2fs.h b/ext2fs/ext2fs.h index 003e2753..88c9fe81 100644 --- a/ext2fs/ext2fs.h +++ b/ext2fs/ext2fs.h @@ -32,6 +32,7 @@ #include <assert-backtrace.h> #include <pthread.h> #include <sys/mman.h> +#include <endian.h> /* Types used by the ext2 header files. */ typedef u_int32_t __u32; @@ -293,7 +294,7 @@ extern unsigned int block_size; extern unsigned int log2_block_size; /* The number of bits to scale min-blocks to get filesystem blocks. */ -#define BLOCKSIZE_SCALE (sblock->s_log_block_size) +#define BLOCKSIZE_SCALE (le32toh (sblock->s_log_block_size)) /* log2 of the number of device blocks in a filesystem block. */ extern unsigned log2_dev_blocks_per_fs_block; @@ -404,7 +405,7 @@ bptr_offs (void *ptr) #define group_desc(num) (&group_desc_image[num]) extern struct ext2_group_desc *group_desc_image; -#define inode_group_num(inum) (((inum) - 1) / sblock->s_inodes_per_group) +#define inode_group_num(inum) (((inum) - 1) / le32toh (sblock->s_inodes_per_group)) /* Forward declarations for the following functions that are usually inlined. In case inlining is disabled, or inlining is not @@ -418,11 +419,11 @@ extern void _dino_deref (struct ext2_inode *inode); EXT2FS_EI struct ext2_inode * dino_ref (ino_t inum) { - unsigned long inodes_per_group = sblock->s_inodes_per_group; + unsigned long inodes_per_group = le32toh (sblock->s_inodes_per_group); unsigned long bg_num = (inum - 1) / inodes_per_group; unsigned long group_inum = (inum - 1) % inodes_per_group; struct ext2_group_desc *bg = group_desc (bg_num); - block_t block = bg->bg_inode_table + (group_inum / inodes_per_block); + block_t block = le32toh (bg->bg_inode_table) + (group_inum / inodes_per_block); struct ext2_inode *inode = disk_cache_block_ref (block); inode += group_inum % inodes_per_block; ext2_debug ("(%llu) = %p", inum, inode); |