aboutsummaryrefslogtreecommitdiff
path: root/lib/ext2fs/link.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ext2fs/link.c')
-rw-r--r--lib/ext2fs/link.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/ext2fs/link.c b/lib/ext2fs/link.c
index a2c34ac5..d69b1e3d 100644
--- a/lib/ext2fs/link.c
+++ b/lib/ext2fs/link.c
@@ -35,7 +35,7 @@ struct dx_lookup_info {
int namelen;
int hash_alg;
__u32 hash;
- int levels;
+ unsigned levels;
struct dx_frame frames[EXT4_HTREE_LEVEL];
};
@@ -46,7 +46,7 @@ static errcode_t alloc_dx_frame(ext2_filsys fs, struct dx_frame *frame)
static void dx_release(struct dx_lookup_info *info)
{
- int level;
+ unsigned level;
for (level = 0; level < info->levels; level++) {
if (info->frames[level].buf == NULL)
@@ -110,7 +110,8 @@ static errcode_t dx_lookup(ext2_filsys fs, ext2_ino_t dir,
info->frames[0].buf);
if (errcode)
goto out_err;
- root = info->frames[0].buf + EXT2_DX_ROOT_OFF;
+ root = (struct ext2_dx_root_info *) ((char *)info->frames[0].buf +
+ EXT2_DX_ROOT_OFF);
hash_alg = root->hash_version;
if (hash_alg != EXT2_HASH_TEA && hash_alg != EXT2_HASH_HALF_MD4 &&
hash_alg != EXT2_HASH_LEGACY) {
@@ -329,19 +330,19 @@ static errcode_t dx_move_dirents(ext2_filsys fs, struct dx_hash_map *map,
csum_size = sizeof(struct ext2_dir_entry_tail);
for (i = 0; i < count; i++) {
- de = from + map[i].off;
+ de = (struct ext2_dir_entry *) ((char *)from + map[i].off);
rec_len = EXT2_DIR_REC_LEN(ext2fs_dirent_name_len(de));
memcpy(to, de, rec_len);
retval = ext2fs_set_rec_len(fs, rec_len, to);
if (retval)
return retval;
- to += rec_len;
+ to = (char *)to + rec_len;
}
/*
* Update rec_len of the last dir entry to stretch to the end of block
*/
- to -= rec_len;
- rec_len = fs->blocksize - (to - base) - csum_size;
+ to = (char *)to - rec_len;
+ rec_len = fs->blocksize - ((char *)to - (char *)base) - csum_size;
retval = ext2fs_set_rec_len(fs, rec_len, to);
if (retval)
return retval;
@@ -396,7 +397,7 @@ static errcode_t dx_split_leaf(ext2_filsys fs, ext2_ino_t dir,
return retval;
}
for (offset = 0; offset < fs->blocksize; offset += rec_len) {
- de = buf + offset;
+ de = (struct ext2_dir_entry *) ((char *)buf + offset);
retval = ext2fs_get_rec_len(fs, de, &rec_len);
if (retval)
goto out;
@@ -490,7 +491,7 @@ static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir,
if (retval)
return retval;
/* Only leaf addition needed? */
- if (i == info->levels - 1)
+ if (i == (int)info->levels - 1)
return dx_split_leaf(fs, dir, diri, info, buf, leaf_pblk,
lblk, pblk);
@@ -501,7 +502,7 @@ static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir,
retval = ext2fs_set_rec_len(fs, fs->blocksize, de);
if (retval)
return retval;
- head = buf + 8;
+ head = (struct ext2_dx_countlimit *) ((char *)buf + 8);
count = ext2fs_le16_to_cpu(info->frames[i+1].head->count);
/* Growing tree depth? */
if (i < 0) {
@@ -517,7 +518,8 @@ static errcode_t dx_grow_tree(ext2_filsys fs, ext2_ino_t dir,
/* Now update tree root */
info->frames[0].head->count = ext2fs_cpu_to_le16(1);
info->frames[0].entries[0].block = ext2fs_cpu_to_le32(lblk);
- root = info->frames[0].buf + EXT2_DX_ROOT_OFF;
+ root = (struct ext2_dx_root_info *)
+ ((char *)info->frames[0].buf + EXT2_DX_ROOT_OFF);
root->indirect_levels++;
} else {
/* Splitting internal node in two */
@@ -558,7 +560,7 @@ static errcode_t dx_link(ext2_filsys fs, ext2_ino_t dir,
struct dx_lookup_info dx_info;
errcode_t retval;
void *blockbuf;
- int restart = 0;
+ unsigned restart = 0;
blk64_t leaf_pblk;
retval = ext2fs_get_mem(fs->blocksize, &blockbuf);