Hi all,
I'm very new to coccinelle, so sorry if the question is irrelevant or was
already asked.
I'm trying to add a new argument to a function which has a couple of callbacks.
The original function is:
static inline int cpuhp_setup_state(enum cpuhp_state state,
int (*startup)(unsigned int cpu),
int (*teardown)(unsigned int cpu));
I would like to pass a private pointer when setting the state and then pass
this pointer to the 'startup' / 'teardown' callbacks where there signature will
be
different and all call sites must change their callbacks signature also.
I tried to first add the new argument to the function, in order to have:
static inline int cpuhp_setup_state(enum cpuhp_state state,
int (*startup)(unsigned int cpu),
int (*teardown)(unsigned int cpu),
void *data);
... with the rule:
@rule@
identifier cpuhp_setup_state;
identifier state, name, startup, teardown, data;
@@
static inline int cpuhp_setup_state(enum cpuhp_state state,
const char *name,
int (*startup)(unsigned int cpu),
int (*teardown)(unsigned int cpu),
void *data)
{
...
}
@@
identifier rule.cpuhp_setup_state;
expression E1, E2, E3, E4;
@@
cpuhp_setup_state(E1, E2, E3, E4
+ , NULL
)
But the parsing gives:
...
cpuhp_setup_state(E1, E2, E3, E4
>>> , NULL
)
grep tokens
cpuhp_state || cpu
No query
warning: line 8: should cpu be a metavariable?
warning: line 9: should cpu be a metavariable?
And I don't have the expected result, well actually I have no output.
Can someone give me some hints or help to implement this change ?
Thanks in advance
-- Daniel
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci