From a8cfbbdc7413f05278fa54d4c4644ec6eb5d943b Mon Sep 17 00:00:00 2001 From: Marat Zakirov Date: Fri, 7 Nov 2014 08:15:19 +0000 Subject: [PATCH] mklog: Always doubt in functions. contrib/ 2014-11-07 Marat Zakirov * mklog: Always doubt in functions. Add EOF protection. From-SVN: r217212 --- contrib/ChangeLog | 5 +++++ contrib/mklog | 41 ++++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 3878803bdf2..9dcc7ea3ac9 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2014-11-07 Marat Zakirov + + * mklog: Always doubt in functions. + Add EOF protection. + 2014-10-31 Jan-Benedict Glaw * config-list.mk: Don't build Go for certain targets. diff --git a/contrib/mklog b/contrib/mklog index 6ed4c6e8f51..8e3c6b619ac 100755 --- a/contrib/mklog +++ b/contrib/mklog @@ -108,10 +108,22 @@ sub remove_suffixes ($) { return $filename; } +sub is_context_hunk_start { + return @_[0] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/; +} + +sub is_unified_hunk_start { + return @_[0] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/; +} + # Check if line is a top-level declaration. # TODO: ignore preprocessor directives except maybe #define ? sub is_top_level { my ($function, $is_context_diff) = (@_); + if (is_unified_hunk_start ($function) + || is_context_hunk_start ($function)) { + return 1; + } if ($is_context_diff) { $function =~ s/^..//; } else { @@ -200,14 +212,10 @@ foreach (@diff_lines) { $look_for_funs = 0; } - # Mark if we met doubtfully changed function. - $doubtfunc = 0; - if ($diff_lines[$line_idx] =~ /^@@ .* @@ ([a-zA-Z0-9_].*)/) { - $doubtfunc = 1; + if (is_unified_hunk_start ($diff_lines[$line_idx])) { $is_context_diff = 0; } - elsif ($diff_lines[$line_idx] =~ /^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/) { - $doubtfunc = 1; + elsif (is_context_hunk_start ($diff_lines[$line_idx])) { $is_context_diff = 1; } @@ -222,7 +230,6 @@ foreach (@diff_lines) { # # The third pattern looks for the starts of functions or classes # within a diff block both for context and unified diff files. - if ($look_for_funs && (/^\*\*\*\*\*\** ([a-zA-Z0-9_].*)/ || /^@@ .* @@ ([a-zA-Z0-9_].*)/ @@ -249,19 +256,19 @@ foreach (@diff_lines) { } # Check is function really modified $no_real_change = 0; - if ($doubtfunc) { - $idx = $line_idx; + $idx = $line_idx; # Skip line info in context diffs. - while ($is_context_diff && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) { - ++$idx; - } + while ($idx <= $#diff_lines && $is_context_diff + && $diff_lines[$idx + 1] =~ /^[-\*]{3} [0-9]/) { + ++$idx; + } # Check all lines till the first change # for the presence of really changed function - do { - ++$idx; - $no_real_change = is_top_level ($diff_lines[$idx], $is_context_diff); - } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/)) - } + do { + ++$idx; + $no_real_change = $idx > $#diff_lines + || is_top_level ($diff_lines[$idx], $is_context_diff); + } while (!$no_real_change && ($diff_lines[$idx] !~ /^[-+!]/)); if ($fn && !$seen_names{$fn} && !$no_real_change) { # If this is the first function in the file, we display it next # to the filename, so we need an extra space before the opening -- 2.30.2