[lvm-devel] master - libdm: report: add dm_report_group_output_and_pop_all

Peter Rajnoha prajnoha at fedoraproject.org
Tue Aug 9 17:39:45 UTC 2016


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=7d1125e5b785014d3bae34acd158c528a4222871
Commit:        7d1125e5b785014d3bae34acd158c528a4222871
Parent:        d86caf952ee208ef2b3b56937af670c76db75ba0
Author:        Peter Rajnoha <prajnoha at redhat.com>
AuthorDate:    Thu Aug 4 13:50:45 2016 +0200
Committer:     Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Tue Aug 9 18:24:45 2016 +0200

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.
---
 libdm/.exported_symbols.DM_1_02_133 |    1 +
 libdm/libdevmapper.h                |    1 +
 libdm/libdm-report.c                |   59 ++++++++++++----------------------
 3 files changed, 23 insertions(+), 38 deletions(-)

diff --git a/libdm/.exported_symbols.DM_1_02_133 b/libdm/.exported_symbols.DM_1_02_133
index 4318f80..f104808 100644
--- a/libdm/.exported_symbols.DM_1_02_133
+++ b/libdm/.exported_symbols.DM_1_02_133
@@ -1 +1,2 @@
 dm_report_destroy_rows
+dm_report_group_output_and_pop_all
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 844a455..5246b15 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -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);
 
 /*
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index d1f2dd8..fed79d4 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -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;
-	}
-
-	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;
-        }
+	if (!dm_report_group_output_and_pop_all(group))
+		r = 0;
 
-	r = 1;
-out:
 	dm_pool_destroy(group->mem);
 	return r;
 }




More information about the lvm-devel mailing list