1 #!/usr/bin/env perl 1 #!/usr/bin/env perl 2 # SPDX-License-Identifier: GPL-2.0 2 # SPDX-License-Identifier: GPL-2.0 3 # 3 # 4 # checkdeclares: find struct declared more tha 4 # checkdeclares: find struct declared more than once 5 # 5 # 6 # Copyright 2021 Wan Jiabing<wanjiabing@vivo.co 6 # Copyright 2021 Wan Jiabing<wanjiabing@vivo.com> 7 # Inspired by checkincludes.pl 7 # Inspired by checkincludes.pl 8 # 8 # 9 # This script checks for duplicate struct decl 9 # This script checks for duplicate struct declares. 10 # Note that this will not take into considerat 10 # Note that this will not take into consideration macros so 11 # you should run this only if you know you do 11 # you should run this only if you know you do have real dups 12 # and do not have them under #ifdef's. 12 # and do not have them under #ifdef's. 13 # You could also just review the results. 13 # You could also just review the results. 14 14 15 use strict; 15 use strict; 16 16 17 sub usage { 17 sub usage { 18 print "Usage: checkdeclares.pl file1.h 18 print "Usage: checkdeclares.pl file1.h ...\n"; 19 print "Warns of struct declaration dup 19 print "Warns of struct declaration duplicates\n"; 20 exit 1; 20 exit 1; 21 } 21 } 22 22 23 if ($#ARGV < 0) { 23 if ($#ARGV < 0) { 24 usage(); 24 usage(); 25 } 25 } 26 26 27 my $dup_counter = 0; 27 my $dup_counter = 0; 28 28 29 foreach my $file (@ARGV) { 29 foreach my $file (@ARGV) { 30 open(my $f, '<', $file) 30 open(my $f, '<', $file) 31 or die "Cannot open $file: $!.\n"; 31 or die "Cannot open $file: $!.\n"; 32 32 33 my %declaredstructs = (); 33 my %declaredstructs = (); 34 34 35 while (<$f>) { 35 while (<$f>) { 36 if (m/^\s*struct\s*(\w*);$/o) 36 if (m/^\s*struct\s*(\w*);$/o) { 37 ++$declaredstructs{$1} 37 ++$declaredstructs{$1}; 38 } 38 } 39 } 39 } 40 40 41 close($f); 41 close($f); 42 42 43 foreach my $structname (keys %declared 43 foreach my $structname (keys %declaredstructs) { 44 if ($declaredstructs{$structna 44 if ($declaredstructs{$structname} > 1) { 45 print "$file: struct $ 45 print "$file: struct $structname is declared more than once.\n"; 46 ++$dup_counter; 46 ++$dup_counter; 47 } 47 } 48 } 48 } 49 } 49 } 50 50 51 if ($dup_counter == 0) { 51 if ($dup_counter == 0) { 52 print "No duplicate struct declares fo 52 print "No duplicate struct declares found.\n"; 53 } 53 }
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.