[lvm-devel] [PATCH 1/3] Refactor _format_pvsegs to allow for re-use in lvm2app.
Dave Wysochanski
wysochanski at pobox.com
Tue Nov 23 03:07:44 UTC 2010
Refactor _format_pvsegs to allow for re-use in lvm2app for 'devices'
and 'seg_pe_ranges' fields of lv_segments.
Should be no functional change.
Signed-off-by: Dave Wysochanski <wysochanski at pobox.com>
---
lib/report/report.c | 41 +++++++++++++++++++++++++----------------
1 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/lib/report/report.c b/lib/report/report.c
index 837ef0b..83550fe 100644
--- a/lib/report/report.c
+++ b/lib/report/report.c
@@ -56,10 +56,9 @@ static int _dev_name_disp(struct dm_report *rh, struct dm_pool *mem __attribute_
return dm_report_field_string(rh, field, &name);
}
-static int _format_pvsegs(struct dm_pool *mem, struct dm_report_field *field,
- const void *data, int range_format)
+static char *_format_pvsegs(struct dm_pool *mem, const struct lv_segment *seg,
+ int range_format)
{
- const struct lv_segment *seg = (const struct lv_segment *) data;
unsigned int s;
const char *name = NULL;
uint32_t extent = 0;
@@ -67,7 +66,7 @@ static int _format_pvsegs(struct dm_pool *mem, struct dm_report_field *field,
if (!dm_pool_begin_object(mem, 256)) {
log_error("dm_pool_begin_object failed");
- return 0;
+ return NULL;
}
for (s = 0; s < seg->area_count; s++) {
@@ -87,7 +86,7 @@ static int _format_pvsegs(struct dm_pool *mem, struct dm_report_field *field,
if (!dm_pool_grow_object(mem, name, strlen(name))) {
log_error("dm_pool_grow_object failed");
- return 0;
+ return NULL;
}
if (dm_snprintf(extent_str, sizeof(extent_str),
@@ -95,54 +94,64 @@ static int _format_pvsegs(struct dm_pool *mem, struct dm_report_field *field,
range_format ? ":" : "(", extent,
range_format ? "-" : ")") < 0) {
log_error("Extent number dm_snprintf failed");
- return 0;
+ return NULL;
}
if (!dm_pool_grow_object(mem, extent_str, strlen(extent_str))) {
log_error("dm_pool_grow_object failed");
- return 0;
+ return NULL;
}
if (range_format) {
if (dm_snprintf(extent_str, sizeof(extent_str),
"%" PRIu32, extent + seg->area_len - 1) < 0) {
log_error("Extent number dm_snprintf failed");
- return 0;
+ return NULL;
}
if (!dm_pool_grow_object(mem, extent_str, strlen(extent_str))) {
log_error("dm_pool_grow_object failed");
- return 0;
+ return NULL;
}
}
if ((s != seg->area_count - 1) &&
!dm_pool_grow_object(mem, range_format ? " " : ",", 1)) {
log_error("dm_pool_grow_object failed");
- return 0;
+ return NULL;
}
}
if (!dm_pool_grow_object(mem, "\0", 1)) {
log_error("dm_pool_grow_object failed");
- return 0;
+ return NULL;
}
- dm_report_field_set_value(field, dm_pool_end_object(mem), NULL);
-
- return 1;
+ return dm_pool_end_object(mem);
}
static int _devices_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
{
- return _format_pvsegs(mem, field, data, 0);
+ char *str;
+ if (!(str = _format_pvsegs(mem, (const struct lv_segment *) data, 0)))
+ return 0;
+
+ dm_report_field_set_value(field, str, NULL);
+
+ return 1;
}
static int _peranges_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
struct dm_report_field *field,
const void *data, void *private __attribute__((unused)))
{
- return _format_pvsegs(mem, field, data, 1);
+ char *str;
+ if (!(str = _format_pvsegs(mem, (const struct lv_segment *) data, 1)))
+ return 0;
+
+ dm_report_field_set_value(field, str, NULL);
+
+ return 1;
}
static int _tags_disp(struct dm_report *rh __attribute__((unused)), struct dm_pool *mem,
--
1.7.2.2
More information about the lvm-devel
mailing list