#!/usr/bin/perl $warning_nums = 0; @key_words = ("_OPENMP", "dyna_salt\\.h", "DES_bs\\.h", "dynamic\\.h"); @has_key_worlds = (); @flags = ("FMT_OMP", "FMT_DYNA_SALT", "FMT_BS", "FMT_DYNAMIC"); @has_flags = (); if ($#key_words != $#flags) { print "key_words and flags must has the same length\n"; exit(1); } for ($i = 0; $i <= $#key_words; $i++) { $has_key_words[$i] = 0; $has_flags[$i] = 0; } foreach $argnum (0 .. $#ARGV) { # print "$ARGV[$argnum]\n"; test_file($ARGV[$argnum]); } print "There are $warning_nums warnings.\n"; sub test_file { #print "Testing file:@_\n"; # Clear array for ($i = 0; $i <= $#key_words; $i++) { $has_key_words[$i] = 0; $has_flags[$i] = 0; } # flag: FMT_SPLIT_UNIFIES_CASE $is_has_split_unifies_case = 0; $is_has_FMT_SPLIT_UNIFIES_CASE = 0; open($file_handler, "<", @_) || die "failed to open @_\n"; while ($line = <$file_handler>) { for ($i = 0; $i <= $#key_words; $i++) { if ($line =~ /$key_words[$i]/) { $has_key_words[$i] = 1; } if ($line =~ /$flags[$i]/) { $has_flags[$i] = 1; } } # flag: FMT_SPLIT_UNIFIES_CASE if ($line =~ /strlwr/ || $line =~ /strupr/ || $line =~ /enc_strlwr/ || $line =~ /enc_strupper/) { $is_has_split_unifies_case = 1; } if ($line =~ /FMT_SPLIT_UNIFIES_CASE/) { $is_has_FMT_SPLIT_UNIFIES_CASE = 1; } } for ($i = 0; $i <= $#key_words; $i++) { if ($has_key_words[$i] == 1 && $has_flags[$i] != 1) { report_warning(@_, "has key words: $key_words[$i], but no flag: $flags[$i]"); } elsif ($has_key_words[$i] != 1 && $has_flags[$i] == 1) { report_warning(@_, "has flag: $flags[$i], but no key words: $key_words[$i]"); } } if ($is_has_split_unifies_case == 1 && $is_has_FMT_SPLIT_UNIFIES_CASE != 1) { report_warning(@_, "has key words: strlwr or strupr or enc_strlwr, or enc_strupper, but no flag: FMT_SPLIT_UNIFIES_CASE"); } elsif ($is_has_split_unifies_case != 1 && $is_has_FMT_SPLIT_UNIFIES_CASE == 1) { report_warning(@_, "has flag: FMT_SPLIT_UNIFIES_CASE, but no key words: strlwr or strupr or enc_strlwr, or enc_strupper"); } close($file_handler); } sub report_warning { $warning_nums = $warning_nums + 1; open(LOG, ">> fmt_flags_warning.log") || die; print LOG "file : $_[0]\n"; print LOG "warning : $_[1]\n\n"; close(LOG); }