From: Ben Pfaff Date: Fri, 2 Aug 2013 19:19:49 +0000 (-0700) Subject: netdev-bsd: Don't assume 'struct netdev' has offset 0. X-Git-Tag: sliver-openvswitch-2.0.90-1~33^2~10 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=9da7ae1298d570a5170515cfcf3356270541d8ad;p=sliver-openvswitch.git netdev-bsd: Don't assume 'struct netdev' has offset 0. The data items returned by netdev_get_devices() are "struct netdev *"s. The code fixed up by this commit used them as "struct netdev_bsd *", which happens to work because struct netdev happens to be at offset 0 in each struct but it's better to do a proper cast in case someday struct netdev gets moved to a nonzero offset. Signed-off-by: Ben Pfaff --- diff --git a/lib/netdev-bsd.c b/lib/netdev-bsd.c index 79643e117..2e49c9447 100644 --- a/lib/netdev-bsd.c +++ b/lib/netdev-bsd.c @@ -267,7 +267,8 @@ netdev_bsd_cache_cb(const struct rtbsd_change *change, shash_init(&device_shash); netdev_get_devices(&netdev_bsd_class, &device_shash); SHASH_FOR_EACH (node, &device_shash) { - dev = node->data; + struct netdev *netdev = node->data; + dev = netdev_bsd_cast(netdev); dev->cache_valid = 0; netdev_bsd_changed(dev); } @@ -1208,7 +1209,8 @@ find_netdev_by_kernel_name(const char *kernel_name) shash_init(&device_shash); netdev_get_devices(&netdev_tap_class, &device_shash); SHASH_FOR_EACH(node, &device_shash) { - struct netdev_bsd * const dev = node->data; + struct netdev *netdev = node->data; + struct netdev_bsd * const dev = netdev_bsd_cast(netdev); if (!strcmp(dev->kernel_name, kernel_name)) { shash_destroy(&device_shash);