162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/// Remove an open coded simple_open() function 362306a36Sopenharmony_ci/// and replace file operations references to the function 462306a36Sopenharmony_ci/// with simple_open() instead. 562306a36Sopenharmony_ci/// 662306a36Sopenharmony_ci// Confidence: High 762306a36Sopenharmony_ci// Comments: 862306a36Sopenharmony_ci// Options: --no-includes --include-headers 962306a36Sopenharmony_ci 1062306a36Sopenharmony_civirtual patch 1162306a36Sopenharmony_civirtual report 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci@ open depends on patch @ 1462306a36Sopenharmony_ciidentifier open_f != simple_open; 1562306a36Sopenharmony_ciidentifier i, f; 1662306a36Sopenharmony_ci@@ 1762306a36Sopenharmony_ci-int open_f(struct inode *i, struct file *f) 1862306a36Sopenharmony_ci-{ 1962306a36Sopenharmony_ci( 2062306a36Sopenharmony_ci-if (i->i_private) 2162306a36Sopenharmony_ci-f->private_data = i->i_private; 2262306a36Sopenharmony_ci| 2362306a36Sopenharmony_ci-f->private_data = i->i_private; 2462306a36Sopenharmony_ci) 2562306a36Sopenharmony_ci-return 0; 2662306a36Sopenharmony_ci-} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci@ has_open depends on open @ 2962306a36Sopenharmony_ciidentifier fops; 3062306a36Sopenharmony_ciidentifier open.open_f; 3162306a36Sopenharmony_ci@@ 3262306a36Sopenharmony_cistruct file_operations fops = { 3362306a36Sopenharmony_ci..., 3462306a36Sopenharmony_ci-.open = open_f, 3562306a36Sopenharmony_ci+.open = simple_open, 3662306a36Sopenharmony_ci... 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci@ openr depends on report @ 4062306a36Sopenharmony_ciidentifier open_f != simple_open; 4162306a36Sopenharmony_ciidentifier i, f; 4262306a36Sopenharmony_ciposition p; 4362306a36Sopenharmony_ci@@ 4462306a36Sopenharmony_ciint open_f@p(struct inode *i, struct file *f) 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci( 4762306a36Sopenharmony_ciif (i->i_private) 4862306a36Sopenharmony_cif->private_data = i->i_private; 4962306a36Sopenharmony_ci| 5062306a36Sopenharmony_cif->private_data = i->i_private; 5162306a36Sopenharmony_ci) 5262306a36Sopenharmony_cireturn 0; 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci@ has_openr depends on openr @ 5662306a36Sopenharmony_ciidentifier fops; 5762306a36Sopenharmony_ciidentifier openr.open_f; 5862306a36Sopenharmony_ciposition p; 5962306a36Sopenharmony_ci@@ 6062306a36Sopenharmony_cistruct file_operations fops = { 6162306a36Sopenharmony_ci..., 6262306a36Sopenharmony_ci.open = open_f@p, 6362306a36Sopenharmony_ci... 6462306a36Sopenharmony_ci}; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci@script:python@ 6762306a36Sopenharmony_cipf << openr.p; 6862306a36Sopenharmony_cips << has_openr.p; 6962306a36Sopenharmony_ci@@ 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cicoccilib.report.print_report(pf[0],"WARNING opportunity for simple_open, see also structure on line %s"%(ps[0].line)) 72