[ovs-dev] [PATCH] tun-metadata: Avoid MSVC compile error on 64-bit builds for 0-length array.
Ben Pfaff
blp at nicira.com
Tue Sep 29 04:30:05 UTC 2015
MSVC does not support zero-size array unless it is the last member of
a defined structure.
The error is hit only on MSVC 64 bit because the size of
uint64_t is equal with sizeof(struct tun_table *).
Reported-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp at nicira.com>
---
lib/tun-metadata.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/lib/tun-metadata.h b/lib/tun-metadata.h
index 624c881..71842b7 100644
--- a/lib/tun-metadata.h
+++ b/lib/tun-metadata.h
@@ -63,12 +63,17 @@ struct tun_metadata {
uint8_t len; /* Length of data in 'opts'. */
} present;
struct tun_table *tab; /* Types & lengths for 'opts' and 'opt_map'. */
- uint8_t pad[sizeof(uint64_t) - sizeof(struct tun_table *)]; /* Make 8 bytes */
+
+#if UINTPTR_MAX == UINT32_MAX
+ uint8_t pad[4]; /* Pad to 64-bit boundary. */
+#endif
+
union {
uint8_t u8[TUN_METADATA_TOT_OPT_SIZE]; /* Values from tunnel TLVs. */
struct geneve_opt gnv[GENEVE_TOT_OPT_SIZE / sizeof(struct geneve_opt)];
} opts;
};
+BUILD_ASSERT_DECL(offsetof(struct tun_metadata, opts) % 8 == 0);
BUILD_ASSERT_DECL(sizeof(((struct tun_metadata *)0)->present.map) * 8 >=
TUN_METADATA_NUM_OPTS);
--
2.1.3
More information about the dev
mailing list