From c75550f5ba70939f57b4661ab91e28f575208ef0 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Thu, 7 Jan 2010 14:37:11 +0000 Subject: Use offsetof() macro and avoid defining dummy static union for FIELD() macro. Makes it compilable by clang compiler. --- lib/report/report.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'lib/report/report.c') diff --git a/lib/report/report.c b/lib/report/report.c index 54192d56..31e31745 100644 --- a/lib/report/report.c +++ b/lib/report/report.c @@ -24,6 +24,8 @@ #include "str_list.h" #include "lvmcache.h" +#include /* offsetof() */ + struct lvm_report_object { struct volume_group *vg; struct logical_volume *lv; @@ -32,17 +34,6 @@ struct lvm_report_object { struct pv_segment *pvseg; }; -/* - * For macro use - */ -static union { - struct physical_volume _pv; - struct logical_volume _lv; - struct volume_group _vg; - struct lv_segment _seg; - struct pv_segment _pvseg; -} _dummy; - static char _alloc_policy_char(alloc_policy_t alloc) { switch (alloc) { @@ -1156,9 +1147,17 @@ static const struct dm_report_object_type _report_types[] = { #define STR DM_REPORT_FIELD_TYPE_STRING #define NUM DM_REPORT_FIELD_TYPE_NUMBER -#define FIELD(type, strct, sorttype, head, field, width, func, id, desc) {type, sorttype, (off_t)((uintptr_t)&_dummy._ ## strct.field - (uintptr_t)&_dummy._ ## strct), width, id, head, &_ ## func ## _disp, desc}, +#define FIELD(type, strct, sorttype, head, field, width, func, id, desc) \ + {type, sorttype, offsetof(type_ ## strct, field), width, \ + id, head, &_ ## func ## _disp, desc}, + +typedef struct physical_volume type_pv; +typedef struct logical_volume type_lv; +typedef struct volume_group type_vg; +typedef struct lv_segment type_seg; +typedef struct pv_segment type_pvseg; -static struct dm_report_field_type _fields[] = { +static const struct dm_report_field_type _fields[] = { #include "columns.h" {0, 0, 0, 0, "", "", NULL, NULL}, }; -- cgit