From 3548d242578a9c8d6b0189d6bc9326bc26983881 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 19 Mar 2014 17:34:55 -0700 Subject: [PATCH] CodingStyle: Allow designated initializers. MSVC 2013 finally implements them, 14 years after they became part of C, so we can use them in generic code now. Signed-off-by: Ben Pfaff Acked-by: Alex Wang --- CodingStyle | 9 ++++----- lib/odp-util.c | 11 +++++------ ofproto/ofproto-dpif-xlate.c | 10 +++++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/CodingStyle b/CodingStyle index 6ac03167d..bae8cd65c 100644 --- a/CodingStyle +++ b/CodingStyle @@ -515,8 +515,7 @@ global variables. C DIALECT - Some C99 features are OK because they are widely implemented even in -older compilers: + Some C99 features are OK because they are widely implemented: * Flexible array members (e.g. struct { int foo[]; }). @@ -531,12 +530,12 @@ older compilers: only take on the values 0 or 1, because this behavior can't be simulated on C89 compilers. + * Designated initializers (e.g. "struct foo foo = {.a = 1};" and + "int a[] = {[2] = 5};"). + Don't use other C99 features that are not widely implemented in older compilers: - * Don't use designated initializers (e.g. don't write "struct foo - foo = {.a = 1};" or "int a[] = {[2] = 5};"). - * Don't mix declarations and code within a block. * Don't use declarations in iteration statements (e.g. don't write diff --git a/lib/odp-util.c b/lib/odp-util.c index 463f0082f..5cc275768 100644 --- a/lib/odp-util.c +++ b/lib/odp-util.c @@ -149,9 +149,8 @@ static void format_odp_sample_action(struct ds *ds, const struct nlattr *attr) { static const struct nl_policy ovs_sample_policy[] = { - { NL_A_NO_ATTR, 0, 0, false }, /* OVS_SAMPLE_ATTR_UNSPEC */ - { NL_A_U32, 0, 0, false }, /* OVS_SAMPLE_ATTR_PROBABILITY */ - { NL_A_NESTED, 0, 0, false }, /* OVS_SAMPLE_ATTR_ACTIONS */ + [OVS_SAMPLE_ATTR_PROBABILITY] = { .type = NL_A_U32 }, + [OVS_SAMPLE_ATTR_ACTIONS] = { .type = NL_A_NESTED } }; struct nlattr *a[ARRAY_SIZE(ovs_sample_policy)]; double percentage; @@ -255,9 +254,9 @@ static void format_odp_userspace_action(struct ds *ds, const struct nlattr *attr) { static const struct nl_policy ovs_userspace_policy[] = { - { NL_A_NO_ATTR, 0, 0, false }, /* OVS_USERSPACE_ATTR_UNSPEC */ - { NL_A_U32, 0, 0, false }, /* OVS_USERSPACE_ATTR_PID */ - { NL_A_UNSPEC, 0, 0, true }, /* OVS_USERSPACE_ATTR_USERDATA */ + [OVS_USERSPACE_ATTR_PID] = { .type = NL_A_U32 }, + [OVS_USERSPACE_ATTR_USERDATA] = { .type = NL_A_UNSPEC, + .optional = true }, }; struct nlattr *a[ARRAY_SIZE(ovs_userspace_policy)]; const struct nlattr *userdata_attr; diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index 1ff80d946..d0b1f47e0 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -201,9 +201,11 @@ struct xlate_ctx { * it did not arrive on a "real" port. 'ofpp_none_bundle' exists for * when an input bundle is needed for validation (e.g., mirroring or * OFPP_NORMAL processing). It is not connected to an 'ofproto' or have - * any 'port' structs, so care must be taken when dealing with it. - * The bundle's name and vlan mode are initialized in lookup_input_bundle() */ -static struct xbundle ofpp_none_bundle; + * any 'port' structs, so care must be taken when dealing with it. */ +static struct xbundle ofpp_none_bundle = { + .name = "OFPP_NONE", + .vlan_mode = PORT_VLAN_TRUNK +}; /* Node in 'xport''s 'skb_priorities' map. Used to maintain a map from * 'priority' (the datapath's term for QoS queue) to the dscp bits which all @@ -894,8 +896,6 @@ lookup_input_bundle(const struct xbridge *xbridge, ofp_port_t in_port, /* Special-case OFPP_NONE, which a controller may use as the ingress * port for traffic that it is sourcing. */ if (in_port == OFPP_NONE) { - ofpp_none_bundle.name = "OFPP_NONE"; - ofpp_none_bundle.vlan_mode = PORT_VLAN_TRUNK; return &ofpp_none_bundle; } -- 2.43.0