On Oct 05 2016, Julia Lawall <[email protected]> wrote:
> On Tue, 4 Oct 2016, Nikolaus Rath wrote:
>
>> Hello,
>>
>> In a set of C files, I would like to replace each instance of one type
>> (struct fasel_foo) with another type (struct fasel_bar). For instance,
>>
>> char* fasel_foo_print(struct fasel_foo *ptr) {
>>     // ...
>>    return "this struct fasel_foo string should not change";
>> }
>>
>> should become
>>
>> char* fasel_foo_print(struct fasel_bar *ptr) {
>>     // ...
>>    return "this struct fasel_foo string should not change";
>> }
>>
>>
>> Based on the LWN articles that I've read, this seems like the perfect
>> use-case for coccinelle. However, somehow I'm struggling to write a
>> patch for this. All the documentation that I could get my hands on seems
>> to describe more abstract changes that require the use of variables -
>> but as far as I can tell, I need something much simpler:
>>
>> @@
>> "struct fasel_foo must be a type name!"
>> @@
>> - struct fasel_foo
>> + struct fasel_bar
>>
>>
>> ...if only I knew what to put between the @@.
>
> Put nothing :)  From the word struct it should figure out that it is
> working on a type.

Oh, great! Thanks!


This solves my problem, but it makes me wonder how this generalizes to
other problems. For example, 

1. What would I need to do if I don't want to replace a struct but
   something typedef'd? (my_type *ptr --> new_type *ptr).

2. ..and how would I go about if instead of the type, I want to replace
   a variable name? (my_type *ptr --> my_type *pointer).


Best,
-Nikolaus

-- 
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to