> > * Ability to add blank lines using +
> 
> ACK.

Looks like I was too fast with this one. Using just blank lines, the line
following the blank line gets modified. I use this spatch:

@ init @
type T;
identifier client, data;
@@
        T data = i2c_get_clientdata(client);

@ main extends init @
statement S,S1;
@@

        ... when != S
+       T data = i2c_get_clientdata(client);
+
        S1
        ...
+       i2c_set_clientdata(client, NULL);
+       kfree(data);
-       kfree(i2c_get_clientdata(client));

and the result for

===

w...@katana:~/Kernel/linux-2.6$ spatch -sp_file /tmp/kfree_clientdata.cocci 
drivers/misc/eeprom/eeprom.c
init_defs_builtins: /usr/local/share/coccinelle/standard.h
HANDLING: drivers/misc/eeprom/eeprom.c
diff = 
--- drivers/misc/eeprom/eeprom.c        2010-03-03 14:53:28.000000000 +0100
+++ /tmp/cocci-output-28888-6919fe-eeprom.c     2010-03-08 02:36:39.000000000 
+0100
@@ -208,8 +208,11 @@ exit:
 
 static int eeprom_remove(struct i2c_client *client)
 {
-       sysfs_remove_bin_file(&client->dev.kobj, &eeprom_attr);
-       kfree(i2c_get_clientdata(client));
+       struct eeprom_data *data = i2c_get_clientdata(client);
+
+sysfs_remove_bin_file(&client->dev.kobj, &eeprom_attr);
+       i2c_set_clientdata(client, NULL);
+       kfree(data);
 
        return 0;
 }

===

Note the modifiaction of sysfs_remove_bin_file()-lines. Using just a comment
works (I just replaced the empty line with a comment in the above spatch):

===

w...@katana:~/Kernel/linux-2.6$ spatch -sp_file /tmp/kfree_clientdata.cocci 
drivers/misc/eeprom/eeprom.c
init_defs_builtins: /usr/local/share/coccinelle/standard.h
HANDLING: drivers/misc/eeprom/eeprom.c
diff = 
--- drivers/misc/eeprom/eeprom.c        2010-03-03 14:53:28.000000000 +0100
+++ /tmp/cocci-output-29793-fc1af3-eeprom.c     2010-03-08 02:38:19.000000000 
+0100
@@ -208,8 +208,11 @@ exit:
 
 static int eeprom_remove(struct i2c_client *client)
 {
+       struct eeprom_data *data = i2c_get_clientdata(client);
+       /* fix blank line */
        sysfs_remove_bin_file(&client->dev.kobj, &eeprom_attr);
-       kfree(i2c_get_clientdata(client));
+       i2c_set_clientdata(client, NULL);
+       kfree(data);
 
        return 0;
 }

===

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to