[ovs-dev] [PATCH] netlink: Avoid designated initializers because MSVC does not support them.

Ben Pfaff blp at nicira.com
Thu Jul 18 21:51:54 UTC 2013


Thanks for the review.

I decided to just write NOT_REACHED() for those cases, because they
should never be reached.

On Thu, Jul 18, 2013 at 02:39:40PM -0700, Linda Sun wrote:
> Looks good to me.
> 
> I would return SIZE_MAX for N_NL_ATTR_TYPES and default, the same as NL_A_NO_ATTR and NL_A_UNSPEC.
> 
> Thanks!
> 
> Linda
> 
> ----- Original Message -----
> From: "Ben Pfaff" <blp at nicira.com>
> To: dev at openvswitch.org
> Cc: "Ben Pfaff" <blp at nicira.com>, "Linda Sun" <lsun at vmware.com>
> Sent: Thursday, July 18, 2013 1:13:36 PM
> Subject: [PATCH] netlink: Avoid designated initializers because MSVC does not support them.
> 
> CC: Linda Sun <lsun at vmware.com>
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/netlink.c |   50 +++++++++++++++++++++++++++++++++++++-------------
>  1 files changed, 37 insertions(+), 13 deletions(-)
> 
> diff --git a/lib/netlink.c b/lib/netlink.c
> index 7e7884e..638c8bf 100644
> --- a/lib/netlink.c
> +++ b/lib/netlink.c
> @@ -607,17 +607,41 @@ nl_attr_get_nested(const struct nlattr *nla, struct ofpbuf *nested)
>      ofpbuf_use_const(nested, nl_attr_get(nla), nl_attr_get_size(nla));
>  }
>  
> -/* Default minimum and maximum payload sizes for each type of attribute. */
> -static const size_t attr_len_range[][2] = {
> -    [0 ... N_NL_ATTR_TYPES - 1] = { 0, SIZE_MAX },
> -    [NL_A_U8] = { 1, 1 },
> -    [NL_A_U16] = { 2, 2 },
> -    [NL_A_U32] = { 4, 4 },
> -    [NL_A_U64] = { 8, 8 },
> -    [NL_A_STRING] = { 1, SIZE_MAX },
> -    [NL_A_FLAG] = { 0, SIZE_MAX },
> -    [NL_A_NESTED] = { 0, SIZE_MAX },
> -};
> +/* Default minimum payload size for each type of attribute. */
> +static size_t
> +min_attr_len(enum nl_attr_type type)
> +{
> +    switch (type) {
> +    case NL_A_NO_ATTR: return 0;
> +    case NL_A_UNSPEC: return 0;
> +    case NL_A_U8: return 1;
> +    case NL_A_U16: return 2;
> +    case NL_A_U32: return 4;
> +    case NL_A_U64: return 8;
> +    case NL_A_STRING: return 1;
> +    case NL_A_FLAG: return 0;
> +    case NL_A_NESTED: return 0;
> +    case N_NL_ATTR_TYPES: default: return 0;
> +    }
> +}
> +
> +/* Default maximum payload size for each type of attribute. */
> +static size_t
> +max_attr_len(enum nl_attr_type type)
> +{
> +    switch (type) {
> +    case NL_A_NO_ATTR: return SIZE_MAX;
> +    case NL_A_UNSPEC: return SIZE_MAX;
> +    case NL_A_U8: return 1;
> +    case NL_A_U16: return 2;
> +    case NL_A_U32: return 4;
> +    case NL_A_U64: return 8;
> +    case NL_A_STRING: return SIZE_MAX;
> +    case NL_A_FLAG: return SIZE_MAX;
> +    case NL_A_NESTED: return SIZE_MAX;
> +    case N_NL_ATTR_TYPES: default: return 0;
> +    }
> +}
>  
>  bool
>  nl_attr_validate(const struct nlattr *nla, const struct nl_policy *policy)
> @@ -634,11 +658,11 @@ nl_attr_validate(const struct nlattr *nla, const struct nl_policy *policy)
>      /* Figure out min and max length. */
>      min_len = policy->min_len;
>      if (!min_len) {
> -        min_len = attr_len_range[policy->type][0];
> +        min_len = min_attr_len(policy->type);
>      }
>      max_len = policy->max_len;
>      if (!max_len) {
> -        max_len = attr_len_range[policy->type][1];
> +        max_len = max_attr_len(policy->type);
>      }
>  
>      /* Verify length. */
> -- 
> 1.7.2.5



More information about the dev mailing list