summaryrefslogtreecommitdiff
path: root/lib/ext2fs/badblocks.c
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2002-07-20 00:28:07 -0400
committerTheodore Ts'o <tytso@mit.edu>2002-07-20 00:28:07 -0400
commitb7a00563b22b0ea47ddc7117508c0b8e0d65df43 (patch)
tree47abfe8f090b00cc4facfc946ef7e19bec2f9f9d /lib/ext2fs/badblocks.c
parent3ea1f0fb45d5d3ec81370efc3c1c0759a4d88675 (diff)
downloade2fsprogs-b7a00563b22b0ea47ddc7117508c0b8e0d65df43.tar.gz
Add support to e2fsck to reindex directories to use hash trees.
Diffstat (limited to 'lib/ext2fs/badblocks.c')
-rw-r--r--lib/ext2fs/badblocks.c99
1 files changed, 76 insertions, 23 deletions
diff --git a/lib/ext2fs/badblocks.c b/lib/ext2fs/badblocks.c
index 4e94e8c8..6f9ef95b 100644
--- a/lib/ext2fs/badblocks.c
+++ b/lib/ext2fs/badblocks.c
@@ -29,17 +29,17 @@
/*
* Helper function for making a badblocks list
*/
-static errcode_t make_badblocks_list(int size, int num, blk_t *list,
- ext2_badblocks_list *ret)
+static errcode_t make_u32_list(int size, int num, __u32 *list,
+ ext2_u32_list *ret)
{
- ext2_badblocks_list bb;
- errcode_t retval;
+ ext2_u32_list bb;
+ errcode_t retval;
- retval = ext2fs_get_mem(sizeof(struct ext2_struct_badblocks_list),
+ retval = ext2fs_get_mem(sizeof(struct ext2_struct_u32_list),
(void **) &bb);
if (retval)
return retval;
- memset(bb, 0, sizeof(struct ext2_struct_badblocks_list));
+ memset(bb, 0, sizeof(struct ext2_struct_u32_list));
bb->magic = EXT2_ET_MAGIC_BADBLOCKS_LIST;
bb->size = size ? size : 10;
bb->num = num;
@@ -58,29 +58,42 @@ static errcode_t make_badblocks_list(int size, int num, blk_t *list,
/*
+ * This procedure creates an empty u32 list.
+ */
+errcode_t ext2fs_u32_list_create(ext2_u32_list *ret, int size)
+{
+ return make_u32_list(size, 0, 0, ret);
+}
+
+/*
* This procedure creates an empty badblocks list.
*/
errcode_t ext2fs_badblocks_list_create(ext2_badblocks_list *ret, int size)
{
- return make_badblocks_list(size, 0, 0, ret);
+ return make_u32_list(size, 0, 0, (ext2_badblocks_list *) ret);
}
+
/*
* This procedure copies a badblocks list
*/
-errcode_t ext2fs_badblocks_copy(ext2_badblocks_list src,
- ext2_badblocks_list *dest)
+errcode_t ext2fs_u32_copy(ext2_u32_list src, ext2_u32_list *dest)
{
errcode_t retval;
- retval = make_badblocks_list(src->size, src->num, src->list,
- dest);
+ retval = make_u32_list(src->size, src->num, src->list, dest);
if (retval)
return retval;
(*dest)->badblocks_flags = src->badblocks_flags;
return 0;
}
+errcode_t ext2fs_badblocks_copy(ext2_badblocks_list src,
+ ext2_badblocks_list *dest)
+{
+ return ext2fs_u32_copy((ext2_u32_list) src,
+ (ext2_u32_list *) dest);
+}
/*
* This procedure frees a badblocks list.
@@ -92,7 +105,7 @@ errcode_t ext2fs_badblocks_copy(ext2_badblocks_list src,
/*
* This procedure adds a block to a badblocks list.
*/
-errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, blk_t blk)
+errcode_t ext2fs_u32_list_add(ext2_u32_list bb, __u32 blk)
{
errcode_t retval;
int i, j;
@@ -101,9 +114,9 @@ errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, blk_t blk)
EXT2_CHECK_MAGIC(bb, EXT2_ET_MAGIC_BADBLOCKS_LIST);
if (bb->num >= bb->size) {
- old_size = bb->size * sizeof(blk_t);
+ old_size = bb->size * sizeof(__u32);
bb->size += 100;
- retval = ext2fs_resize_mem(old_size, bb->size * sizeof(blk_t),
+ retval = ext2fs_resize_mem(old_size, bb->size * sizeof(__u32),
(void **) &bb->list);
if (retval) {
bb->size -= 100;
@@ -138,11 +151,18 @@ errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, blk_t blk)
return 0;
}
+errcode_t ext2fs_badblocks_list_add(ext2_badblocks_list bb, blk_t blk)
+{
+ return ext2fs_u32_list_add((ext2_u32_list) bb, (__u32) blk);
+}
+
+
+
/*
* This procedure tests to see if a particular block is on a badblocks
* list.
*/
-int ext2fs_badblocks_list_test(ext2_badblocks_list bb, blk_t blk)
+int ext2fs_u32_list_test(ext2_u32_list bb, __u32 blk)
{
int low, high, mid;
@@ -173,15 +193,21 @@ int ext2fs_badblocks_list_test(ext2_badblocks_list bb, blk_t blk)
return 0;
}
-errcode_t ext2fs_badblocks_list_iterate_begin(ext2_badblocks_list bb,
- ext2_badblocks_iterate *ret)
+int ext2fs_badblocks_list_test(ext2_badblocks_list bb, blk_t blk)
+{
+ return ext2fs_u32_list_test((ext2_u32_list) bb, (__u32) blk);
+}
+
+
+errcode_t ext2fs_u32_list_iterate_begin(ext2_u32_list bb,
+ ext2_u32_iterate *ret)
{
- ext2_badblocks_iterate iter;
+ ext2_u32_iterate iter;
errcode_t retval;
EXT2_CHECK_MAGIC(bb, EXT2_ET_MAGIC_BADBLOCKS_LIST);
- retval = ext2fs_get_mem(sizeof(struct ext2_struct_badblocks_iterate),
+ retval = ext2fs_get_mem(sizeof(struct ext2_struct_u32_iterate),
(void **) &iter);
if (retval)
return retval;
@@ -193,9 +219,17 @@ errcode_t ext2fs_badblocks_list_iterate_begin(ext2_badblocks_list bb,
return 0;
}
-int ext2fs_badblocks_list_iterate(ext2_badblocks_iterate iter, blk_t *blk)
+errcode_t ext2fs_badblocks_list_iterate_begin(ext2_badblocks_list bb,
+ ext2_badblocks_iterate *ret)
{
- ext2_badblocks_list bb;
+ return ext2fs_u32_list_iterate_begin((ext2_u32_list) bb,
+ (ext2_u32_iterate *) ret);
+}
+
+
+int ext2fs_u32_list_iterate(ext2_u32_iterate iter, __u32 *blk)
+{
+ ext2_u32_list bb;
if (iter->magic != EXT2_ET_MAGIC_BADBLOCKS_ITERATE)
return 0;
@@ -213,7 +247,14 @@ int ext2fs_badblocks_list_iterate(ext2_badblocks_iterate iter, blk_t *blk)
return 0;
}
-void ext2fs_badblocks_list_iterate_end(ext2_badblocks_iterate iter)
+int ext2fs_badblocks_list_iterate(ext2_badblocks_iterate iter, blk_t *blk)
+{
+ return ext2fs_u32_list_iterate((ext2_u32_iterate) iter,
+ (__u32 *) blk);
+}
+
+
+void ext2fs_u32_list_iterate_end(ext2_u32_iterate iter)
{
if (!iter || (iter->magic != EXT2_ET_MAGIC_BADBLOCKS_ITERATE))
return;
@@ -222,7 +263,13 @@ void ext2fs_badblocks_list_iterate_end(ext2_badblocks_iterate iter)
ext2fs_free_mem((void **) &iter);
}
-int ext2fs_badblocks_equal(ext2_badblocks_list bb1, ext2_badblocks_list bb2)
+void ext2fs_badblocks_list_iterate_end(ext2_badblocks_iterate iter)
+{
+ ext2fs_u32_list_iterate_end((ext2_u32_iterate) iter);
+}
+
+
+int ext2fs_u32_list_equal(ext2_u32_list bb1, ext2_u32_list bb2)
{
EXT2_CHECK_MAGIC(bb1, EXT2_ET_MAGIC_BADBLOCKS_LIST);
EXT2_CHECK_MAGIC(bb2, EXT2_ET_MAGIC_BADBLOCKS_LIST);
@@ -234,3 +281,9 @@ int ext2fs_badblocks_equal(ext2_badblocks_list bb1, ext2_badblocks_list bb2)
return 0;
return 1;
}
+
+int ext2fs_badblocks_equal(ext2_badblocks_list bb1, ext2_badblocks_list bb2)
+{
+ return ext2fs_u32_list_equal((ext2_u32_list) bb1,
+ (ext2_u32_list) bb2);
+}