Merge tag 'trace-v5.15-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / scripts / checkdeclares.pl
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 }