summaryrefslogtreecommitdiffstats
path: root/lib/report/report.c
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2010-01-07 14:37:11 +0000
committerZdenek Kabelac <zkabelac@redhat.com>2010-01-07 14:37:11 +0000
commitc75550f5ba70939f57b4661ab91e28f575208ef0 (patch)
tree8fd8e89c0a19d129d17ca14e8f3425a4eb26783d /lib/report/report.c
parent876835f2f19739c4998b91f35b0d8cd4d5640342 (diff)
downloadlvm2-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.c25
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},
};