Many files:
Added definition of ext2fs_get_mem, ext2fs_free_mem, and
ext2fs_resize_mem in ext2fs.h, and changed all library routines to use
these wrapper functions.
diff --git a/lib/ext2fs/inode.c b/lib/ext2fs/inode.c
index fe26b3f..cec4341 100644
--- a/lib/ext2fs/inode.c
+++ b/lib/ext2fs/inode.c
@@ -53,27 +53,33 @@
static errcode_t create_icache(ext2_filsys fs)
{
- int i;
+ errcode_t retval;
+ int i;
if (fs->icache)
return 0;
- fs->icache = malloc(sizeof(struct ext2_inode_cache));
+ retval = ext2fs_get_mem(sizeof(struct ext2_inode_cache),
+ (void **) &fs->icache);
+ if (retval)
+ return retval;
+
memset(fs->icache, 0, sizeof(struct ext2_inode_cache));
- fs->icache->buffer = malloc(fs->blocksize);
- if (!fs->icache->buffer) {
- free(fs->icache);
- return EXT2_NO_MEMORY;
+ retval = ext2fs_get_mem(fs->blocksize, (void **) &fs->icache->buffer);
+ if (retval) {
+ ext2fs_free_mem((void **) &fs->icache);
+ return retval;
}
fs->icache->buffer_blk = 0;
fs->icache->cache_last = -1;
fs->icache->cache_size = 4;
fs->icache->refcount = 1;
- fs->icache->cache = malloc(sizeof(struct ext2_inode_cache_ent)
- * fs->icache->cache_size);
- if (!fs->icache->cache) {
- free(fs->icache->buffer);
- free(fs->icache);
- return EXT2_NO_MEMORY;
+ retval = ext2fs_get_mem(sizeof(struct ext2_inode_cache_ent)
+ * fs->icache->cache_size,
+ (void **) &fs->icache->cache);
+ if (retval) {
+ ext2fs_free_mem((void **) &fs->icache->buffer);
+ ext2fs_free_mem((void **) &fs->icache);
+ return retval;
}
for (i=0; i < fs->icache->cache_size; i++)
fs->icache->cache[i].ino = 0;
@@ -108,9 +114,10 @@
fs->get_blocks = save_get_blocks;
}
- scan = (ext2_inode_scan) malloc(sizeof(struct ext2_struct_inode_scan));
- if (!scan)
- return EXT2_NO_MEMORY;
+ retval = ext2fs_get_mem(sizeof(struct ext2_struct_inode_scan),
+ (void **) &scan);
+ if (retval)
+ return retval;
memset(scan, 0, sizeof(struct ext2_struct_inode_scan));
scan->magic = EXT2_ET_MAGIC_INODE_SCAN;
@@ -120,20 +127,22 @@
scan->current_group = -1;
scan->inode_buffer_blocks = buffer_blocks ? buffer_blocks : 8;
scan->groups_left = fs->group_desc_count;
- scan->inode_buffer = malloc((size_t) (scan->inode_buffer_blocks *
- fs->blocksize));
+ retval = ext2fs_get_mem((size_t) (scan->inode_buffer_blocks *
+ fs->blocksize),
+ (void **) &scan->inode_buffer);
scan->done_group = 0;
scan->done_group_data = 0;
scan->bad_block_ptr = 0;
- if (!scan->inode_buffer) {
- free(scan);
- return EXT2_NO_MEMORY;
+ if (retval) {
+ ext2fs_free_mem((void **) &scan);
+ return retval;
}
- scan->temp_buffer = malloc(scan->inode_size);
- if (!scan->temp_buffer) {
- free(scan->inode_buffer);
- free(scan);
- return EXT2_NO_MEMORY;
+ retval = ext2fs_get_mem(scan->inode_size,
+ (void **) &scan->temp_buffer);
+ if (retval) {
+ ext2fs_free_mem((void **) &scan->inode_buffer);
+ ext2fs_free_mem((void **) &scan);
+ return retval;
}
if (scan->fs->badblocks && scan->fs->badblocks->num)
scan->scan_flags |= EXT2_SF_CHK_BADBLOCKS;
@@ -146,11 +155,11 @@
if (!scan || (scan->magic != EXT2_ET_MAGIC_INODE_SCAN))
return;
- free(scan->inode_buffer);
+ ext2fs_free_mem((void **) &scan->inode_buffer);
scan->inode_buffer = NULL;
- free(scan->temp_buffer);
+ ext2fs_free_mem((void **) &scan->temp_buffer);
scan->temp_buffer = NULL;
- free(scan);
+ ext2fs_free_mem((void **) &scan);
return;
}