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