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" <b...@nicira.com> > To: dev@openvswitch.org > Cc: "Ben Pfaff" <b...@nicira.com>, "Linda Sun" <l...@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 <l...@vmware.com> > Signed-off-by: Ben Pfaff <b...@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 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev