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