diff options
Diffstat (limited to 'lib/ext2fs/bitmaps.c')
-rw-r--r-- | lib/ext2fs/bitmaps.c | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/lib/ext2fs/bitmaps.c b/lib/ext2fs/bitmaps.c index 3ef5666c..c3a778d5 100644 --- a/lib/ext2fs/bitmaps.c +++ b/lib/ext2fs/bitmaps.c @@ -26,11 +26,9 @@ #include "ext2fs.h" -errcode_t ext2fs_allocate_generic_bitmap(__u32 start, - __u32 end, - __u32 real_end, - const char *descr, - ext2fs_generic_bitmap *ret) +static errcode_t make_bitmap(__u32 start, __u32 end, __u32 real_end, + const char *descr, char *init_map, + ext2fs_generic_bitmap *ret) { ext2fs_generic_bitmap bitmap; int size; @@ -63,11 +61,40 @@ errcode_t ext2fs_allocate_generic_bitmap(__u32 start, return ENOMEM; } - memset(bitmap->bitmap, 0, size); + if (init_map) + memcpy(bitmap->bitmap, init_map, size); + else + memset(bitmap->bitmap, 0, size); *ret = bitmap; return 0; } +errcode_t ext2fs_allocate_generic_bitmap(__u32 start, + __u32 end, + __u32 real_end, + const char *descr, + ext2fs_generic_bitmap *ret) +{ + return make_bitmap(start, end, real_end, descr, 0, ret); +} + +errcode_t ext2fs_copy_bitmap(ext2fs_generic_bitmap src, + ext2fs_generic_bitmap *dest) +{ + errcode_t retval; + ext2fs_generic_bitmap new; + + retval = make_bitmap(src->start, src->end, src->real_end, + src->description, src->bitmap, &new); + if (retval) + return retval; + new->magic = src->magic; + new->fs = src->fs; + new->base_error_code = src->base_error_code; + return 0; +} + + errcode_t ext2fs_allocate_inode_bitmap(ext2_filsys fs, const char *descr, ext2fs_inode_bitmap *ret) |