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