summaryrefslogtreecommitdiffstats
path: root/lib/commands/toolcontext.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/commands/toolcontext.c')
-rw-r--r--lib/commands/toolcontext.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index d7e3e440..b3d368ad 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -988,32 +988,40 @@ static int _init_single_segtype(struct cmd_context *cmd,
static int _init_segtypes(struct cmd_context *cmd)
{
+ int i;
struct segment_type *segtype;
struct segtype_library seglib = { .cmd = cmd };
+ struct segment_type *(*init_segtype_array[])(struct cmd_context *cmd) = {
+ init_striped_segtype,
+ init_zero_segtype,
+ init_error_segtype,
+ init_free_segtype,
+#ifdef RAID_INTERNAL
+ init_raid1_segtype,
+ init_raid4_segtype,
+ init_raid5_segtype,
+ init_raid5_la_segtype,
+ init_raid5_ra_segtype,
+ init_raid5_ls_segtype,
+ init_raid5_rs_segtype,
+ init_raid6_segtype,
+ init_raid6_zr_segtype,
+ init_raid6_nr_segtype,
+ init_raid6_nc_segtype,
+#endif
+ NULL
+ };
#ifdef HAVE_LIBDL
const struct config_node *cn;
#endif
- if (!(segtype = init_striped_segtype(cmd)))
- return 0;
- segtype->library = NULL;
- dm_list_add(&cmd->segtypes, &segtype->list);
-
- if (!(segtype = init_zero_segtype(cmd)))
- return 0;
- segtype->library = NULL;
- dm_list_add(&cmd->segtypes, &segtype->list);
-
- if (!(segtype = init_error_segtype(cmd)))
- return 0;
- segtype->library = NULL;
- dm_list_add(&cmd->segtypes, &segtype->list);
-
- if (!(segtype = init_free_segtype(cmd)))
- return 0;
- segtype->library = NULL;
- dm_list_add(&cmd->segtypes, &segtype->list);
+ for (i = 0; init_segtype_array[i]; i++) {
+ if (!(segtype = init_segtype_array[i](cmd)))
+ return 0;
+ segtype->library = NULL;
+ dm_list_add(&cmd->segtypes, &segtype->list);
+ }
#ifdef SNAPSHOT_INTERNAL
if (!(segtype = init_snapshot_segtype(cmd)))