1// SPDX-License-Identifier: GPL-2.0-only 2/// 3/// Catch strings ending in newline with GENL_SET_ERR_MSG, NL_SET_ERR_MSG, 4/// NL_SET_ERR_MSG_MOD. 5/// 6// Confidence: Very High 7// Copyright: (C) 2020 Intel Corporation 8// URL: http://coccinelle.lip6.fr/ 9// Options: --no-includes --include-headers 10 11virtual context 12virtual org 13virtual report 14 15@r depends on context || org || report@ 16expression e; 17constant m; 18position p; 19@@ 20 \(GENL_SET_ERR_MSG\|NL_SET_ERR_MSG\|NL_SET_ERR_MSG_MOD\)(e,m@p) 21 22@script:python@ 23m << r.m; 24@@ 25 26if not m.endswith("\\n\""): 27 cocci.include_match(False) 28 29@r1 depends on r@ 30identifier fname; 31expression r.e; 32constant r.m; 33position r.p; 34@@ 35 fname(e,m@p) 36 37//---------------------------------------------------------- 38// For context mode 39//---------------------------------------------------------- 40 41@depends on context && r@ 42identifier r1.fname; 43expression r.e; 44constant r.m; 45@@ 46* fname(e,m) 47 48//---------------------------------------------------------- 49// For org mode 50//---------------------------------------------------------- 51 52@script:python depends on org@ 53fname << r1.fname; 54m << r.m; 55p << r.p; 56@@ 57 58if m.endswith("\\n\""): 59 msg="WARNING avoid newline at end of message in %s" % (fname) 60 msg_safe=msg.replace("[","@(").replace("]",")") 61 coccilib.org.print_todo(p[0], msg_safe) 62 63//---------------------------------------------------------- 64// For report mode 65//---------------------------------------------------------- 66 67@script:python depends on report@ 68fname << r1.fname; 69m << r.m; 70p << r.p; 71@@ 72 73if m.endswith("\\n\""): 74 msg="WARNING avoid newline at end of message in %s" % (fname) 75 coccilib.report.print_report(p[0], msg) 76