[Cocci] modifying array initializers?

Johannes Berg johannes at sipsolutions.net
Fri Apr 21 15:12:23 CEST 2017


Hi,

I'm exploring backporting the netlink error reporting stuff from Linux
in backports. I have this:

static __genl_const struct genl_ops nl80211_ops[] = {
        {
                .cmd = NL80211_CMD_GET_WIPHY,
                .doit = nl80211_get_wiphy,
                .dumpit = nl80211_dump_wiphy,
                .done = nl80211_dump_wiphy_done,
                .policy = nl80211_policy,
                /* can be retrieved by unprivileged users */
                .internal_flags = NL80211_FLAG_NEED_WIPHY |
                                  NL80211_FLAG_NEED_RTNL,
        },
        {
                .cmd = NL80211_CMD_SET_WIPHY,
                .doit = nl80211_set_wiphy,
                .policy = nl80211_policy,
                .flags = GENL_UNS_ADMIN_PERM,
                .internal_flags = NL80211_FLAG_NEED_RTNL,
        },
	[...]
};

and would like to wrap all the .doit calls.

This works for the first instance, but I can't seem to figure out if
it's possible to apply to each one:

@@
identifier fn;
fresh identifier wrap_fn = "_wrap_" ## fn;
@@
+static int wrap_fn(struct sk_buff *skb, struct genl_info *info)
+{
+       return fn(skb, info);
+}
static struct genl_ops nl80211_ops[] = {
        {
-               .doit = fn,
+               .doit = wrap_fn,
                ...
        },
        ...
};

Is there a way to loop over all the initializers?

johannes


More information about the Cocci mailing list