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