cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

checkincludes.pl (1988B)


      1#!/usr/bin/env perl
      2# SPDX-License-Identifier: GPL-2.0
      3#
      4# checkincludes: find/remove files included more than once
      5#
      6# Copyright abandoned, 2000, Niels Kristian Bech Jensen <nkbj@image.dk>.
      7# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
      8#
      9# This script checks for duplicate includes. It also has support
     10# to remove them in place. Note that this will not take into
     11# consideration macros so you should run this only if you know
     12# you do have real dups and do not have them under #ifdef's. You
     13# could also just review the results.
     14
     15use strict;
     16
     17sub usage {
     18	print "Usage: checkincludes.pl [-r]\n";
     19	print "By default we just warn of duplicates\n";
     20	print "To remove duplicated includes in place use -r\n";
     21	exit 1;
     22}
     23
     24my $remove = 0;
     25
     26if ($#ARGV < 0) {
     27	usage();
     28}
     29
     30if ($#ARGV >= 1) {
     31	if ($ARGV[0] =~ /^-/) {
     32		if ($ARGV[0] eq "-r") {
     33			$remove = 1;
     34			shift;
     35		} else {
     36			usage();
     37		}
     38	}
     39}
     40
     41my $dup_counter = 0;
     42
     43foreach my $file (@ARGV) {
     44	open(my $f, '<', $file)
     45	    or die "Cannot open $file: $!.\n";
     46
     47	my %includedfiles = ();
     48	my @file_lines = ();
     49
     50	while (<$f>) {
     51		if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
     52			++$includedfiles{$1};
     53		}
     54		push(@file_lines, $_);
     55	}
     56
     57	close($f);
     58
     59	if (!$remove) {
     60		foreach my $filename (keys %includedfiles) {
     61			if ($includedfiles{$filename} > 1) {
     62				print "$file: $filename is included more than once.\n";
     63				++$dup_counter;
     64			}
     65		}
     66		next;
     67	}
     68
     69	open($f, '>', $file)
     70	    or die("Cannot write to $file: $!");
     71
     72	my $dups = 0;
     73	foreach (@file_lines) {
     74		if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
     75			foreach my $filename (keys %includedfiles) {
     76				if ($1 eq $filename) {
     77					if ($includedfiles{$filename} > 1) {
     78						$includedfiles{$filename}--;
     79						$dups++;
     80						++$dup_counter;
     81					} else {
     82						print {$f} $_;
     83					}
     84				}
     85			}
     86		} else {
     87			print {$f} $_;
     88		}
     89	}
     90	if ($dups > 0) {
     91		print "$file: removed $dups duplicate includes\n";
     92	}
     93	close($f);
     94}
     95
     96if ($dup_counter == 0) {
     97	print "No duplicate includes found.\n";
     98}