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