[lvm-devel] [PATCH 1/4] Add dm_report_get_field_value() function and supporting structure.

Dave Wysochanski dwysocha at redhat.com
Wed Jul 21 13:56:12 UTC 2010


We need to extend the existing reporting infrastructure so that individual
field values may be queried.  This function will be used by lvm2app generic
attribute functions.

Signed-off-by: Dave Wysochanski <dwysocha at redhat.com>
---
 libdm/libdevmapper.h |   12 ++++++++++++
 libdm/libdm-report.c |   30 ++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index bfd9850..6960c57 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -1055,6 +1055,18 @@ struct dm_report_field_type {
 	const char *desc;	/* description of the field */
 };
 
+struct dm_report_field_value_type {
+	unsigned is_string;
+	union {
+		const char *s_val;
+		uint64_t n_val;
+	} u;
+};
+
+int dm_report_get_field_value(struct dm_report *rh,
+			      const char *field_id,
+			      struct dm_report_field_value_type *value);
+
 /*
  * dm_report_init output_flags
  */
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index 2b044b5..4dddcec 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -1092,3 +1092,33 @@ int dm_report_output(struct dm_report *rh)
 	else
 		return _output_as_columns(rh);
 }
+
+int dm_report_get_field_value(struct dm_report *rh,
+			      const char *field_id,
+			      struct dm_report_field_value_type *value)
+{
+	struct dm_report_field *field;
+	struct row *row;
+	unsigned found=0;
+
+	dm_list_iterate_items(row, &rh->rows) {
+		if ((field = dm_list_item(dm_list_first(&row->fields),
+					  struct dm_report_field))) {
+			if (!_field_match(rh, field_id, strlen(field_id), 0))
+				continue;
+			found = 1;
+			if ((field->props->flags & DM_REPORT_FIELD_TYPE_MASK) ==
+			    DM_REPORT_FIELD_TYPE_STRING) {
+				value->is_string = 1;
+				value->u.s_val = field->sort_value;
+			} else {
+				value->is_string = 0;
+				value->u.n_val = *(const uint64_t *)field->sort_value;
+			}
+			dm_list_del(&field->list);
+		}
+	}
+
+	return found;
+
+}
-- 
1.6.0.6




More information about the lvm-devel mailing list