Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753032AbbB0NWL (ORCPT ); Fri, 27 Feb 2015 08:22:11 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:63939 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752386AbbB0NWJ (ORCPT ); Fri, 27 Feb 2015 08:22:09 -0500 X-AuditID: cbfec7f4-b7f126d000001e9a-95-54f06eeec958 From: Daniel Granat To: Julia.Lawall@lip6.fr, cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org Cc: Gilles.Muller@lip6.fr, nicolas.palix@imag.fr, Daniel Granat Subject: [PATCH] Add coccinelle script that makes sure that tables are NULL terminated Date: Fri, 27 Feb 2015 14:21:53 +0100 Message-id: <1425043313-15844-1-git-send-email-d.granat@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKJMWRmVeSWpSXmKPExsVy+t/xy7rv8j6EGDw4LGDxY9NqNosJj4wt Zv+8xGSx7MFpRovLu+awWRx7uZzJgc3j2LFWZo+9W7I8+rasYvR4tOw+i8fnTXIBrFFcNimp OZllqUX6dglcGX8amhkLpgpW/JmwlrWBcT9vFyMHh4SAicSVTTldjJxAppjEhXvr2boYuTiE BJYySrze1gvl9DFJ/J69kBmkik1AS+LynQdMILaIgK/EhT3TWUBsZoEIiVUPloPZwkD28iMX 2UBsFgFViacL57KDLOMVcJH41SUIsUxO4uSxyawTGLkXMDKsYhRNLU0uKE5KzzXUK07MLS7N S9dLzs/dxAgJii87GBcfszrEKMDBqMTD6yD4IUSINbGsuDL3EKMEB7OSCO/5DKAQb0piZVVq UX58UWlOavEhRiYOTqkGxo0zbZ3cNh8ScDvnJZtjKb3UJ+Qv5+HF3/SPml5ZbnJ2+/oHJ3yX SwXy9l+f0tRsvtKHxTR4vd/P1F0Pni6ebqS25NQyw9URjPkmm56oBMo6pmSVMDZM61sV4/vb bX7I/7s/3V7+/q7aNvWWWuD0pz9f275YLzNht8D5tr8c4jfP5WV51CaG7VdiKc5INNRiLipO BAA5DPrW6AEAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2332 Lines: 115 Signed-off-by: Daniel Granat --- scripts/coccinelle/misc/device_id_tables.cocci | 95 ++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 scripts/coccinelle/misc/device_id_tables.cocci diff --git a/scripts/coccinelle/misc/device_id_tables.cocci b/scripts/coccinelle/misc/device_id_tables.cocci new file mode 100644 index 0000000..5968984 --- /dev/null +++ b/scripts/coccinelle/misc/device_id_tables.cocci @@ -0,0 +1,95 @@ +/// Make sure '*_device_id$' tables are NULL terminated +// +// Keywords: device_id +// Confidence: Medium +// Options: --include-headers + +virtual org +virtual report +virtual patch + +@initialize:python@ +@@ +import re + +postfix = '_device_id$' +prefix_list = ['platform', 'of', 'i2c'] + +@r1 depends on patch || org || report@ +position p1; +identifier var, arr; +identifier struct_name; +expression E; +@@ + +( +struct struct_name arr[] = { + ..., + { + .var = E, + } + @p1 +}; +| +struct struct_name arr[] = { + ..., + { ..., var, ... }, + @p1 +}; +) + +@script:python depends on report@ +struct_name << r1.struct_name; +p1 << r1.p1; +arr << r1.arr; +pattern; +@@ + +for i in prefix_list: + pattern = str(i)+postfix + if re.match(pattern, struct_name) != None: + print "\nCOCCI: \"%s\" matchs required pattern \"%s\"" % (struct_name, pattern) + msg = "\"%s\" is not NULL terminated at line %s" % (arr, p1[0].line) + coccilib.report.print_report(p1[0],msg) + break + +@script:python match depends on patch@ +struct_name << r1.struct_name; +matched_name; +pattern; +@@ + +coccinelle.matched_name = '' + +for i in prefix_list: + pattern = str(i)+postfix + if re.match(pattern, struct_name) != None: + coccinelle.matched_name = struct_name + break + +@r2 depends on patch@ +position r1.p1; +identifier var, arr; +identifier match.matched_name; +expression E; +@@ + +( +struct matched_name arr[] = { + ..., + { + .var = E, +- } + @p1 ++ }, ++ {}, +}; +| +struct matched_name arr[] = { + ..., + { ..., var, ... }, + @p1 ++ {}, +}; +) + -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/