| #!/usr/bin/env perl | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # | |
| # checkdeclares: find struct declared more than once | |
| # | |
| # Copyright 2021 Wan Jiabing<wanjiabing@vivo.com> | |
| # Inspired by checkincludes.pl | |
| # | |
| # This script checks for duplicate struct declares. | |
| # Note that this will not take into consideration macros so | |
| # you should run this only if you know you do have real dups | |
| # and do not have them under #ifdef's. | |
| # You could also just review the results. | |
| use strict; | |
| sub usage { | |
| print "Usage: checkdeclares.pl file1.h ...\n"; | |
| print "Warns of struct declaration duplicates\n"; | |
| exit 1; | |
| } | |
| if ($#ARGV < 0) { | |
| usage(); | |
| } | |
| my $dup_counter = 0; | |
| foreach my $file (@ARGV) { | |
| open(my $f, '<', $file) | |
| or die "Cannot open $file: $!.\n"; | |
| my %declaredstructs = (); | |
| while (<$f>) { | |
| if (m/^\s*struct\s*(\w*);$/o) { | |
| ++$declaredstructs{$1}; | |
| } | |
| } | |
| close($f); | |
| foreach my $structname (keys %declaredstructs) { | |
| if ($declaredstructs{$structname} > 1) { | |
| print "$file: struct $structname is declared more than once.\n"; | |
| ++$dup_counter; | |
| } | |
| } | |
| } | |
| if ($dup_counter == 0) { | |
| print "No duplicate struct declares found.\n"; | |
| } |