1 // SPDX-License-Identifier: GPL-2.0 << 2 /// Remove an open coded simple_open() functio 1 /// Remove an open coded simple_open() function 3 /// and replace file operations references to 2 /// and replace file operations references to the function 4 /// with simple_open() instead. 3 /// with simple_open() instead. 5 /// 4 /// 6 // Confidence: High 5 // Confidence: High 7 // Comments: 6 // Comments: 8 // Options: --no-includes --include-headers 7 // Options: --no-includes --include-headers 9 8 10 virtual patch 9 virtual patch 11 virtual report 10 virtual report 12 11 13 @ open depends on patch @ 12 @ open depends on patch @ 14 identifier open_f != simple_open; 13 identifier open_f != simple_open; 15 identifier i, f; 14 identifier i, f; 16 @@ 15 @@ 17 -int open_f(struct inode *i, struct file *f) 16 -int open_f(struct inode *i, struct file *f) 18 -{ 17 -{ 19 ( 18 ( 20 -if (i->i_private) 19 -if (i->i_private) 21 -f->private_data = i->i_private; 20 -f->private_data = i->i_private; 22 | 21 | 23 -f->private_data = i->i_private; 22 -f->private_data = i->i_private; 24 ) 23 ) 25 -return 0; 24 -return 0; 26 -} 25 -} 27 26 28 @ has_open depends on open @ 27 @ has_open depends on open @ 29 identifier fops; 28 identifier fops; 30 identifier open.open_f; 29 identifier open.open_f; 31 @@ 30 @@ 32 struct file_operations fops = { 31 struct file_operations fops = { 33 ..., 32 ..., 34 -.open = open_f, 33 -.open = open_f, 35 +.open = simple_open, 34 +.open = simple_open, 36 ... 35 ... 37 }; 36 }; 38 37 39 @ openr depends on report @ 38 @ openr depends on report @ 40 identifier open_f != simple_open; 39 identifier open_f != simple_open; 41 identifier i, f; 40 identifier i, f; 42 position p; 41 position p; 43 @@ 42 @@ 44 int open_f@p(struct inode *i, struct file *f) 43 int open_f@p(struct inode *i, struct file *f) 45 { 44 { 46 ( 45 ( 47 if (i->i_private) 46 if (i->i_private) 48 f->private_data = i->i_private; 47 f->private_data = i->i_private; 49 | 48 | 50 f->private_data = i->i_private; 49 f->private_data = i->i_private; 51 ) 50 ) 52 return 0; 51 return 0; 53 } 52 } 54 53 55 @ has_openr depends on openr @ 54 @ has_openr depends on openr @ 56 identifier fops; 55 identifier fops; 57 identifier openr.open_f; 56 identifier openr.open_f; 58 position p; 57 position p; 59 @@ 58 @@ 60 struct file_operations fops = { 59 struct file_operations fops = { 61 ..., 60 ..., 62 .open = open_f@p, 61 .open = open_f@p, 63 ... 62 ... 64 }; 63 }; 65 64 66 @script:python@ 65 @script:python@ 67 pf << openr.p; 66 pf << openr.p; 68 ps << has_openr.p; 67 ps << has_openr.p; 69 @@ 68 @@ 70 69 71 coccilib.report.print_report(pf[0],"WARNING op 70 coccilib.report.print_report(pf[0],"WARNING opportunity for simple_open, see also structure on line %s"%(ps[0].line))
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.