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 15use strict; 16 17sub usage { 18 print "Usage: checkdeclares.pl file1.h ...\n"; 19 print "Warns of struct declaration duplicates\n"; 20 exit 1; 21} 22 23if ($#ARGV < 0) { 24 usage(); 25} 26 27my $dup_counter = 0; 28 29foreach 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 51if ($dup_counter == 0) { 52 print "No duplicate struct declares found.\n"; 53} 54