diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2010-01-07 14:37:11 +0000 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2010-01-07 14:37:11 +0000 |
commit | c75550f5ba70939f57b4661ab91e28f575208ef0 (patch) | |
tree | 8fd8e89c0a19d129d17ca14e8f3425a4eb26783d /lib/report/report.c | |
parent | 876835f2f19739c4998b91f35b0d8cd4d5640342 (diff) | |
download | lvm2-c75550f5ba70939f57b4661ab91e28f575208ef0.tar.gz lvm2-c75550f5ba70939f57b4661ab91e28f575208ef0.tar.xz lvm2-c75550f5ba70939f57b4661ab91e28f575208ef0.zip |
Use offsetof() macro and avoid defining dummy static union for FIELD() macro.
Makes it compilable by clang compiler.
Diffstat (limited to 'lib/report/report.c')
-rw-r--r-- | lib/report/report.c | 25 |
1 files changed, 12 insertions, 13 deletions
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 <stddef.h> /* 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}, }; |