162306a36Sopenharmony_ci#!/usr/bin/env perl 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# checkdeclares: find struct declared more than once 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# Copyright 2021 Wan Jiabing<wanjiabing@vivo.com> 762306a36Sopenharmony_ci# Inspired by checkincludes.pl 862306a36Sopenharmony_ci# 962306a36Sopenharmony_ci# This script checks for duplicate struct declares. 1062306a36Sopenharmony_ci# Note that this will not take into consideration macros so 1162306a36Sopenharmony_ci# you should run this only if you know you do have real dups 1262306a36Sopenharmony_ci# and do not have them under #ifdef's. 1362306a36Sopenharmony_ci# You could also just review the results. 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciuse strict; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cisub usage { 1862306a36Sopenharmony_ci print "Usage: checkdeclares.pl file1.h ...\n"; 1962306a36Sopenharmony_ci print "Warns of struct declaration duplicates\n"; 2062306a36Sopenharmony_ci exit 1; 2162306a36Sopenharmony_ci} 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciif ($#ARGV < 0) { 2462306a36Sopenharmony_ci usage(); 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cimy $dup_counter = 0; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciforeach my $file (@ARGV) { 3062306a36Sopenharmony_ci open(my $f, '<', $file) 3162306a36Sopenharmony_ci or die "Cannot open $file: $!.\n"; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci my %declaredstructs = (); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci while (<$f>) { 3662306a36Sopenharmony_ci if (m/^\s*struct\s*(\w*);$/o) { 3762306a36Sopenharmony_ci ++$declaredstructs{$1}; 3862306a36Sopenharmony_ci } 3962306a36Sopenharmony_ci } 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci close($f); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci foreach my $structname (keys %declaredstructs) { 4462306a36Sopenharmony_ci if ($declaredstructs{$structname} > 1) { 4562306a36Sopenharmony_ci print "$file: struct $structname is declared more than once.\n"; 4662306a36Sopenharmony_ci ++$dup_counter; 4762306a36Sopenharmony_ci } 4862306a36Sopenharmony_ci } 4962306a36Sopenharmony_ci} 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciif ($dup_counter == 0) { 5262306a36Sopenharmony_ci print "No duplicate struct declares found.\n"; 5362306a36Sopenharmony_ci} 54