mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
libdm: report: add dm_report_group_output_and_pop_all
The dm_report_group_output_and_pop_all calls dm_report_output and dm_report_group_pop for all the items that are currently in report group. This is just a shortcut that makes it easier to output and pop group's content so the group handle can be reused again without a need to initialize and configure it again. The functionality of dm_report_group_output_and_pop_all is the same as dm_report_destroy but without destroying the report group handle.
This commit is contained in:
parent
d86caf952e
commit
7d1125e5b7
@ -1 +1,2 @@
|
||||
dm_report_destroy_rows
|
||||
dm_report_group_output_and_pop_all
|
||||
|
@ -2974,6 +2974,7 @@ typedef enum {
|
||||
struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void *data);
|
||||
int dm_report_group_push(struct dm_report_group *group, struct dm_report *report, void *data);
|
||||
int dm_report_group_pop(struct dm_report_group *group);
|
||||
int dm_report_group_output_and_pop_all(struct dm_report_group *group);
|
||||
int dm_report_group_destroy(struct dm_report_group *group);
|
||||
|
||||
/*
|
||||
|
@ -5028,57 +5028,40 @@ int dm_report_group_pop(struct dm_report_group *group)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int _report_group_destroy_single(void)
|
||||
int dm_report_group_output_and_pop_all(struct dm_report_group *group)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
struct report_group_item *item, *tmp_item;
|
||||
|
||||
static int _report_group_destroy_basic(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
dm_list_iterate_items_safe(item, tmp_item, &group->items) {
|
||||
if (!item->parent) {
|
||||
item->store.finished_count = 0;
|
||||
continue;
|
||||
}
|
||||
if (item->report && !dm_report_output(item->report))
|
||||
return_0;
|
||||
if (!dm_report_group_pop(group))
|
||||
return_0;
|
||||
}
|
||||
|
||||
if (group->type == DM_REPORT_GROUP_JSON) {
|
||||
_json_output_start(group);
|
||||
log_print(JSON_OBJECT_END);
|
||||
group->indent -= JSON_INDENT_UNIT;
|
||||
}
|
||||
|
||||
static int _report_group_destroy_json(struct dm_report_group *group)
|
||||
{
|
||||
_json_output_start(group);
|
||||
log_print(JSON_OBJECT_END);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dm_report_group_destroy(struct dm_report_group *group)
|
||||
{
|
||||
struct report_group_item *item, *tmp_item;
|
||||
int r = 0;
|
||||
int r = 1;
|
||||
|
||||
if (!group)
|
||||
return 1;
|
||||
|
||||
dm_list_iterate_items_safe(item, tmp_item, &group->items) {
|
||||
if (item->report && !dm_report_output(item->report))
|
||||
goto_out;
|
||||
if (!dm_report_group_pop(group))
|
||||
goto_out;
|
||||
}
|
||||
if (!dm_report_group_output_and_pop_all(group))
|
||||
r = 0;
|
||||
|
||||
switch (group->type) {
|
||||
case DM_REPORT_GROUP_SINGLE:
|
||||
if (!_report_group_destroy_single())
|
||||
goto_out;
|
||||
break;
|
||||
case DM_REPORT_GROUP_BASIC:
|
||||
if (!_report_group_destroy_basic())
|
||||
goto_out;
|
||||
break;
|
||||
case DM_REPORT_GROUP_JSON:
|
||||
if (!_report_group_destroy_json(group))
|
||||
goto_out;
|
||||
break;
|
||||
default:
|
||||
goto_out;
|
||||
}
|
||||
|
||||
r = 1;
|
||||
out:
|
||||
dm_pool_destroy(group->mem);
|
||||
return r;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user