162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci///
362306a36Sopenharmony_ci/// Catch strings ending in newline with GENL_SET_ERR_MSG, NL_SET_ERR_MSG,
462306a36Sopenharmony_ci/// NL_SET_ERR_MSG_MOD.
562306a36Sopenharmony_ci///
662306a36Sopenharmony_ci// Confidence: Very High
762306a36Sopenharmony_ci// Copyright: (C) 2020 Intel Corporation
862306a36Sopenharmony_ci// URL: https://coccinelle.gitlabpages.inria.fr/website
962306a36Sopenharmony_ci// Options: --no-includes --include-headers
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_civirtual context
1262306a36Sopenharmony_civirtual org
1362306a36Sopenharmony_civirtual report
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci@r depends on context || org || report@
1662306a36Sopenharmony_ciexpression e;
1762306a36Sopenharmony_ciconstant m;
1862306a36Sopenharmony_ciposition p;
1962306a36Sopenharmony_ci@@
2062306a36Sopenharmony_ci  \(GENL_SET_ERR_MSG\|NL_SET_ERR_MSG\|NL_SET_ERR_MSG_MOD\)(e,m@p)
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci@script:python@
2362306a36Sopenharmony_cim << r.m;
2462306a36Sopenharmony_ci@@
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciif not m.endswith("\\n\""):
2762306a36Sopenharmony_ci	cocci.include_match(False)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci@r1 depends on r@
3062306a36Sopenharmony_ciidentifier fname;
3162306a36Sopenharmony_ciexpression r.e;
3262306a36Sopenharmony_ciconstant r.m;
3362306a36Sopenharmony_ciposition r.p;
3462306a36Sopenharmony_ci@@
3562306a36Sopenharmony_ci  fname(e,m@p)
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci//----------------------------------------------------------
3862306a36Sopenharmony_ci//  For context mode
3962306a36Sopenharmony_ci//----------------------------------------------------------
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci@depends on context && r@
4262306a36Sopenharmony_ciidentifier r1.fname;
4362306a36Sopenharmony_ciexpression r.e;
4462306a36Sopenharmony_ciconstant r.m;
4562306a36Sopenharmony_ci@@
4662306a36Sopenharmony_ci* fname(e,m)
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci//----------------------------------------------------------
4962306a36Sopenharmony_ci//  For org mode
5062306a36Sopenharmony_ci//----------------------------------------------------------
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci@script:python depends on org@
5362306a36Sopenharmony_cifname << r1.fname;
5462306a36Sopenharmony_cim << r.m;
5562306a36Sopenharmony_cip << r.p;
5662306a36Sopenharmony_ci@@
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciif m.endswith("\\n\""):
5962306a36Sopenharmony_ci	msg="WARNING avoid newline at end of message in %s" % (fname)
6062306a36Sopenharmony_ci	msg_safe=msg.replace("[","@(").replace("]",")")
6162306a36Sopenharmony_ci	coccilib.org.print_todo(p[0], msg_safe)
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci//----------------------------------------------------------
6462306a36Sopenharmony_ci//  For report mode
6562306a36Sopenharmony_ci//----------------------------------------------------------
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci@script:python depends on report@
6862306a36Sopenharmony_cifname << r1.fname;
6962306a36Sopenharmony_cim << r.m;
7062306a36Sopenharmony_cip << r.p;
7162306a36Sopenharmony_ci@@
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciif m.endswith("\\n\""):
7462306a36Sopenharmony_ci	msg="WARNING avoid newline at end of message in %s" % (fname)
7562306a36Sopenharmony_ci	coccilib.report.print_report(p[0], msg)
76