aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2018-06-14 17:44:31 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2018-06-27 13:01:40 +0100
commitf18793b096e69c7acfce66cded483ba9fc01762a (patch)
treee7cd11a399bfd2f38f81d3c60a010b6a060927d4 /include
parent00928a421d47f49691cace1207481b7aad31b1f1 (diff)
compiler: add a sizeof_field() macro
Determining the size of a field is useful when you don't have a struct variable handy. Open-coding this is ugly. This patch adds the sizeof_field() macro, which is similar to typeof_field(). Existing instances are updated to use the macro. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Message-id: 20180614164431.29305-1-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include')
-rw-r--r--include/hw/xen/io/ring.h2
-rw-r--r--include/qemu/compiler.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/include/hw/xen/io/ring.h b/include/hw/xen/io/ring.h
index abbca47687..ffa3ebadc8 100644
--- a/include/hw/xen/io/ring.h
+++ b/include/hw/xen/io/ring.h
@@ -65,7 +65,7 @@ typedef unsigned int RING_IDX;
*/
#define __CONST_RING_SIZE(_s, _sz) \
(__RD32(((_sz) - offsetof(struct _s##_sring, ring)) / \
- sizeof(((struct _s##_sring *)0)->ring[0])))
+ sizeof_field(struct _s##_sring, ring[0])))
/*
* The same for passing in an actual pointer instead of a name tag.
*/
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index 9f762695d1..5843812710 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -64,6 +64,8 @@
(type *) ((char *) __mptr - offsetof(type, member));})
#endif
+#define sizeof_field(type, field) sizeof(((type *)0)->field)
+
/* Convert from a base type to a parent type, with compile time checking. */
#ifdef __GNUC__
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \