From: Dave Wysochanski <dwysocha@redhat.com>
To: lvm-devel@redhat.com
Subject: [PATCH 08/13] Add lvm_vg_get_attr_value() libLVM API to query to value of a VG attribute.
Date: Mon, 2 Feb 2009 15:50:04 -0500 [thread overview]
Message-ID: <1233607809-1087-9-git-send-email-dwysocha@redhat.com> (raw)
In-Reply-To: <1233607809-1087-8-git-send-email-dwysocha@redhat.com>
This API may be used independently to query the value of a VG attribute,
provided the name of the attribute is known. If the name of the attribute(s)
are unknown, the previous API, vg_get_attr_list(), may be used.
Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
---
lib/lvm2.h | 2 ++
lib/report/report.c | 28 ++++++++++++++++++++++++++++
libdm/.exported_symbols | 1 +
libdm/libdevmapper.h | 12 ++++++++++++
libdm/libdm-report.c | 29 +++++++++++++++++++++++++++++
5 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/lib/lvm2.h b/lib/lvm2.h
index 57e8b6c..b274762 100644
--- a/lib/lvm2.h
+++ b/lib/lvm2.h
@@ -79,6 +79,8 @@ const char *lvm_vg_name(const vg_t *vg);
const char *lvm_lv_name(const lv_t *lv);
int lvm_vg_get_attr_list(vg_t *vg, struct dm_list *list);
+int lvm_vg_get_attr_value(vg_t *vg, const char *attr_name,
+ struct dm_report_field_value_type *value);
vg_t *lvm_vg_open(lvm_handle_t libh, const char *vg_name, mode_t mode);
void lvm_vg_close(vg_t *vg);
diff --git a/lib/report/report.c b/lib/report/report.c
index 8e733d8..1216fff 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -1219,3 +1219,31 @@ int lvm_vg_get_attr_list(vg_t *vg, struct dm_list *list)
dm_report_free(rh);
return 1;
}
+
+/*
+ * Get the value of the VG attribute 'attr_name'.
+ */
+int lvm_vg_get_attr_value(vg_t *vg, const char *attr_name,
+ struct dm_report_field_value_type *value)
+{
+ void *rh;
+ report_type_t report_type = VGS;
+
+ if (!(rh = report_init(vg->cmd, attr_name, "", &report_type,
+ " ", 1, 1, 1, 0, 0, 0))) {
+ stack;
+ return 0;
+ }
+
+ if (!report_object(rh, vg, NULL, NULL, NULL, NULL)) {
+ stack;
+ return 0;
+ }
+
+ if (!dm_report_get_field_value(rh, value)) {
+ stack;
+ return 0;
+ }
+ dm_report_free(rh);
+ return 1;
+}
diff --git a/libdm/.exported_symbols b/libdm/.exported_symbols
index aa70f29..e7a4906 100644
--- a/libdm/.exported_symbols
+++ b/libdm/.exported_symbols
@@ -133,6 +133,7 @@ dm_report_field_uint32
dm_report_field_uint64
dm_report_field_set_value
dm_report_get_field_ids
+dm_report_get_field_value
dm_report_set_output_field_name_prefix
dm_regex_create
dm_regex_match
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index cc8302a..d6cb7cf 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -927,6 +927,15 @@ struct dm_report_field_type {
struct dm_report_field_ids_type {
struct dm_list list;
const char *id;
+ uint32_t type; /* FIXME: unnecessary ?*/
+};
+
+struct dm_report_field_value_type {
+ unsigned is_string;
+ union {
+ char *s_val;
+ uint64_t n_val;
+ } u;
};
/*
@@ -935,6 +944,9 @@ struct dm_report_field_ids_type {
int dm_report_get_field_ids(struct dm_report *rh, uint32_t type,
struct dm_list *list);
+int dm_report_get_field_value(struct dm_report *rh,
+ 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 a9db211..625e212 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -1099,7 +1099,36 @@ int dm_report_get_field_ids(struct dm_report *rh, uint32_t type,
log_error("dm_report_get_field_ids: dm_pool_strdup failed");
return 0;
}
+ field_id->type = type;
dm_list_add(list, &field_id->list);
}
return 1;
}
+
+
+int dm_report_get_field_value(struct dm_report *rh,
+ struct dm_report_field_value_type *value)
+{
+ struct dm_report_field *field;
+ struct row *row;
+
+ dm_list_iterate_items(row, &rh->rows) {
+ if ((field = dm_list_item(dm_list_first(&row->fields),
+ struct dm_report_field))) {
+ if ((field->props->flags & DM_REPORT_FIELD_TYPE_MASK) ==
+ DM_REPORT_FIELD_TYPE_STRING) {
+ value->is_string = 1;
+ value->u.s_val = dm_pool_strdup(rh->mem,
+ field->sort_value);
+ } else {
+ value->is_string = 0;
+ value->u.n_val = *(const uint64_t *)field->sort_value;
+ }
+ dm_list_del(&field->list);
+ }
+
+ }
+
+ return 1;
+
+}
--
1.5.5.1
next prev parent reply other threads:[~2009-02-02 20:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-02 20:49 [PATCH 0/13] liblvm initialization, attribute, and object handling Dave Wysochanski
2009-02-02 20:49 ` [PATCH 01/13] Add system_dir to create_toolcontext() Dave Wysochanski
2009-02-02 20:49 ` [PATCH 02/13] Add lvm_create, lvm_destroy, lvm_reload_config() APIs Dave Wysochanski
2009-02-02 20:49 ` [PATCH 03/13] Move vg_t, lv_t, and pv_t from metadata-exported.h into lvm2.h Dave Wysochanski
2009-02-02 20:50 ` [PATCH 04/13] Add lvm_pv_name, lvm_vg_name, and lvm_lv_name accessors Dave Wysochanski
2009-02-02 20:50 ` [PATCH 05/13] Add lvm_vg_open() Dave Wysochanski
2009-02-02 20:50 ` [PATCH 06/13] Add lvm_vg_close() Dave Wysochanski
2009-02-02 20:50 ` [PATCH 07/13] Add lvm_vg_get_attr_list() libLVM API to return a list of VG attribute names Dave Wysochanski
2009-02-02 20:50 ` Dave Wysochanski [this message]
2009-02-02 20:50 ` [PATCH 09/13] Add lvm_lvs_in_vg() API Dave Wysochanski
2009-02-02 20:50 ` [PATCH 10/13] Add lvm_pvs_in_vg() Dave Wysochanski
2009-02-02 20:50 ` [PATCH 11/13] Add lvm_lv_get_attr_list() and lvm_lv_get_attr_value() Dave Wysochanski
2009-02-02 20:50 ` [PATCH 12/13] First cut at adding pv_obj_* APIs Dave Wysochanski
2009-02-02 20:50 ` [PATCH 13/13] Add test code Dave Wysochanski
2009-02-02 23:58 ` [PATCH 12/13] First cut at adding pv_obj_* APIs Petr Rockai
2009-02-13 11:23 ` Dave Wysochanski
2009-02-02 23:47 ` [PATCH 08/13] Add lvm_vg_get_attr_value() libLVM API to query to value of a VG attribute Petr Rockai
2009-02-13 11:30 ` Dave Wysochanski
2009-02-02 23:45 ` [PATCH 06/13] Add lvm_vg_close() Petr Rockai
2009-02-04 17:11 ` Dave Wysochanski
2009-02-04 20:27 ` Dave Wysochanski
2009-02-02 23:28 ` [PATCH 05/13] Add lvm_vg_open() Petr Rockai
2009-02-04 15:01 ` Dave Wysochanski
2009-02-02 23:25 ` [PATCH 03/13] Move vg_t, lv_t, and pv_t from metadata-exported.h into lvm2.h Petr Rockai
2009-02-04 14:57 ` Dave Wysochanski
2009-02-02 23:22 ` [PATCH 02/13] Add lvm_create, lvm_destroy, lvm_reload_config() APIs Petr Rockai
2009-02-03 0:44 ` [PATCH] Move locking_type reading inside init_locking() Dave Wysochanski
2009-02-03 1:12 ` [PATCH take2] Add lvm_create, lvm_destroy, lvm_reload_config() APIs Dave Wysochanski
2009-02-13 11:42 ` [PATCH 02/13] " Dave Wysochanski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1233607809-1087-9-git-send-email-dwysocha@redhat.com \
--to=dwysocha@redhat.com \
--cc=lvm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.