18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/// 38c2ecf20Sopenharmony_ci/// Catch strings ending in newline with GENL_SET_ERR_MSG, NL_SET_ERR_MSG, 48c2ecf20Sopenharmony_ci/// NL_SET_ERR_MSG_MOD. 58c2ecf20Sopenharmony_ci/// 68c2ecf20Sopenharmony_ci// Confidence: Very High 78c2ecf20Sopenharmony_ci// Copyright: (C) 2020 Intel Corporation 88c2ecf20Sopenharmony_ci// URL: http://coccinelle.lip6.fr/ 98c2ecf20Sopenharmony_ci// Options: --no-includes --include-headers 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_civirtual context 128c2ecf20Sopenharmony_civirtual org 138c2ecf20Sopenharmony_civirtual report 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci@r depends on context || org || report@ 168c2ecf20Sopenharmony_ciexpression e; 178c2ecf20Sopenharmony_ciconstant m; 188c2ecf20Sopenharmony_ciposition p; 198c2ecf20Sopenharmony_ci@@ 208c2ecf20Sopenharmony_ci \(GENL_SET_ERR_MSG\|NL_SET_ERR_MSG\|NL_SET_ERR_MSG_MOD\)(e,m@p) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci@script:python@ 238c2ecf20Sopenharmony_cim << r.m; 248c2ecf20Sopenharmony_ci@@ 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ciif not m.endswith("\\n\""): 278c2ecf20Sopenharmony_ci cocci.include_match(False) 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci@r1 depends on r@ 308c2ecf20Sopenharmony_ciidentifier fname; 318c2ecf20Sopenharmony_ciexpression r.e; 328c2ecf20Sopenharmony_ciconstant r.m; 338c2ecf20Sopenharmony_ciposition r.p; 348c2ecf20Sopenharmony_ci@@ 358c2ecf20Sopenharmony_ci fname(e,m@p) 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci//---------------------------------------------------------- 388c2ecf20Sopenharmony_ci// For context mode 398c2ecf20Sopenharmony_ci//---------------------------------------------------------- 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci@depends on context && r@ 428c2ecf20Sopenharmony_ciidentifier r1.fname; 438c2ecf20Sopenharmony_ciexpression r.e; 448c2ecf20Sopenharmony_ciconstant r.m; 458c2ecf20Sopenharmony_ci@@ 468c2ecf20Sopenharmony_ci* fname(e,m) 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci//---------------------------------------------------------- 498c2ecf20Sopenharmony_ci// For org mode 508c2ecf20Sopenharmony_ci//---------------------------------------------------------- 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci@script:python depends on org@ 538c2ecf20Sopenharmony_cifname << r1.fname; 548c2ecf20Sopenharmony_cim << r.m; 558c2ecf20Sopenharmony_cip << r.p; 568c2ecf20Sopenharmony_ci@@ 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciif m.endswith("\\n\""): 598c2ecf20Sopenharmony_ci msg="WARNING avoid newline at end of message in %s" % (fname) 608c2ecf20Sopenharmony_ci msg_safe=msg.replace("[","@(").replace("]",")") 618c2ecf20Sopenharmony_ci coccilib.org.print_todo(p[0], msg_safe) 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci//---------------------------------------------------------- 648c2ecf20Sopenharmony_ci// For report mode 658c2ecf20Sopenharmony_ci//---------------------------------------------------------- 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci@script:python depends on report@ 688c2ecf20Sopenharmony_cifname << r1.fname; 698c2ecf20Sopenharmony_cim << r.m; 708c2ecf20Sopenharmony_cip << r.p; 718c2ecf20Sopenharmony_ci@@ 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciif m.endswith("\\n\""): 748c2ecf20Sopenharmony_ci msg="WARNING avoid newline at end of message in %s" % (fname) 758c2ecf20Sopenharmony_ci coccilib.report.print_report(p[0], msg) 76