From: Ben Pfaff Date: Thu, 19 Nov 2009 19:06:14 +0000 (-0800) Subject: netdev: Really set output values to 0 on failure in netdev_get_features(). X-Git-Tag: v0.99.0~25 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=7671589afbe5e7ff8a7f2e730ed077416e419fa8;p=sliver-openvswitch.git netdev: Really set output values to 0 on failure in netdev_get_features(). The comment on netdev_get_features() claimed that all of the passed-in values were set to 0 on failure, but the implementation didn't live up to the promise. CC: Paul Ingram --- diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 73247030d..3ccd6be93 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -720,8 +720,7 @@ netdev_linux_get_stats(const struct netdev *netdev_, struct netdev_stats *stats) /* Stores the features supported by 'netdev' into each of '*current', * '*advertised', '*supported', and '*peer' that are non-null. Each value is a * bitmap of "enum ofp_port_features" bits, in host byte order. Returns 0 if - * successful, otherwise a positive errno value. On failure, all of the - * passed-in values are set to 0. */ + * successful, otherwise a positive errno value. */ static int netdev_linux_get_features(struct netdev *netdev, uint32_t *current, uint32_t *advertised, diff --git a/lib/netdev.c b/lib/netdev.c index 481671f79..965bdbf6c 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -377,11 +377,27 @@ netdev_get_features(struct netdev *netdev, uint32_t *supported, uint32_t *peer) { uint32_t dummy[4]; - return netdev->class->get_features(netdev, - current ? current : &dummy[0], - advertised ? advertised : &dummy[1], - supported ? supported : &dummy[2], - peer ? peer : &dummy[3]); + int error; + + if (!current) { + current = &dummy[0]; + } + if (!advertised) { + advertised = &dummy[1]; + } + if (!supported) { + supported = &dummy[2]; + } + if (!peer) { + peer = &dummy[3]; + } + + error = netdev->class->get_features(netdev, current, advertised, supported, + peer); + if (error) { + *current = *advertised = *supported = *peer = 0; + } + return error; } /* Set the features advertised by 'netdev' to 'advertise'. Returns 0 if