1#!/usr/bin/perl -w 2 3$infile = "stdin"; 4 5if ($ARGV[0]) { 6 $infile = $ARGV[0]; 7} 8 9$infile =~ m"^([^.]+)"o; 10 11# $fpref = $1; 12$allsrc = ""; 13 14open (IN, $infile) || die "Cannot open input file $infile"; 15 16while (<IN>) { 17 $allsrc .= $_; 18} 19 20close IN; 21 22print "\n"; 23print "============================\n"; 24print ".. File $infile\n"; 25print "============================\n"; 26 27################ 28# typedef struct 29################ 30 31@presrc = split (/^typedef\s+struct\s+\S*\s*[{][^}]+[}]\s*[^;]+;\s*$/osm, $allsrc); 32$ip = 0; 33$dalias=""; 34 35while ($allsrc =~ /^typedef\s+struct\s+(\S*)\s*[{][^}]+[}]\s*([^;]+);\s*(\#define\s+(\S+)\s+\S+[*])?$/gosm) { 36 $dnam = $1; 37 $dalias = $2; 38 $ddefine = $4; 39 @anam = (split(/[ \t,*]+/, $dalias)); 40 if (defined($ddefine)) { 41 push @anam, $ddefine; 42 } 43 if (!defined($dnam) || $dnam eq "") { 44 $dnam = $anam[$#anam]; 45 } 46 $presrc = $presrc[$ip]; 47 48 if ($presrc =~ /[\n][\/][*]\s+[@]data[static]*\s+(\S+)([^\/*][^*]*[*]+)*[\/]\s*$/osm) { 49 $hnam = $1; 50 $ok = 0; 51 foreach $nam (@anam) { 52 if ($hnam eq $nam) {$ok = 1} 53 } 54 if (!$ok && $dnam ne $hnam) { 55 print "bad docheader for $hnam precedes $dnam\n"; 56 } 57 } 58 else { 59 print "bad or missing docheader for $dnam\n"; 60 } 61 $ip++; 62} 63 64################ 65# typedef enum 66################ 67 68@presrc = split (/^typedef\s+enum\s+\S*\s*[{][^}]+[}]\s*[^;]+;\s*$/osm, $allsrc); 69$ip = 0; 70$dalias=""; 71 72while ($allsrc =~ /^typedef\s+enum\s+(\S*)\s*[{][^}]+[}]\s*([^;]+);\s*?$/gosm) { 73 $ealias = $1; 74 $enam = $2; 75 if (!defined($enam) || $enam eq "") { 76 $enam = $ealias; 77 } 78 @anam = (split(/[ \t,*]+/, $enam)); 79 80 $presrc = $presrc[$ip]; 81 82 if ($presrc =~ /[\n][\/][*]\s+[@]enum[static]*\s+(\S+)([^\/*][^*]*[*]+)*[\/]\s*$/osm) { 83 $hnam = $1; 84 $ok = 0; 85 foreach $nam (@anam) { 86 if ($hnam eq $nam) {$ok = 1} 87 } 88 if (!$ok && $enam ne $hnam) { 89 print "bad enumheader for $hnam precedes $enam\n"; 90 } 91 } 92 else { 93 print "bad enumheader bad or missing docheader for $enam\n"; 94 } 95 $ip++; 96} 97 98################ 99# const 100################ 101 102@presrc = split (/^[sc][tatic ]*onst\s+[^*=;\(\)]*\s[^*]\S+\s*[=][^;]+;\s*?$/osm, $allsrc); 103$ip = 0; 104$dalias=""; 105 106while ($allsrc =~ /^[sc][tatic ]*onst\s+[^*=;\(\)]*\s([^*]\S+)\s*[=]([^;]+);\s*?$/gosm) { 107 $cnam = $1; 108 $cnam =~ s/[\[][0-9]*[\]]$//; 109 if (!defined($cnam) || $cnam eq "") { 110 $cnam = "unknown"; 111 } 112 113 $presrc = $presrc[$ip]; 114 115# print "PRESRC $ip\n$presrc\n====================\n"; 116 if ($presrc =~ /[\n][\/][*]\s+[@]const(static)?\s+(\S+)([^\/*][^*]*[*]+)*[\/]\s*$/osm) { 117 $hnam = $2; 118# if ($cnam ne $hnam) { 119# print "bad constheader for $hnam precedes $cnam\n"; 120# } 121 } 122 elsif ($presrc =~ /^\s*$/) {} 123 else { 124 print "bad constheader bad or missing docheader for $cnam\n"; 125 } 126 $ip++; 127} 128