From 1d90ee174c73434aa97b812188ef21d7408ac8aa Mon Sep 17 00:00:00 2001 From: Tom Eastep Date: Fri, 4 May 2012 07:01:08 -0700 Subject: [PATCH] Cleanup of ERROR/WARNING message enhancement. Signed-off-by: Tom Eastep --- Shorewall/Perl/Shorewall/Config.pm | 36 +++++++++++++++++++----------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/Shorewall/Perl/Shorewall/Config.pm b/Shorewall/Perl/Shorewall/Config.pm index a48655c32..d577a1e69 100644 --- a/Shorewall/Perl/Shorewall/Config.pm +++ b/Shorewall/Perl/Shorewall/Config.pm @@ -808,22 +808,33 @@ my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); # Create 'currentlineinfo' # sub currentlineinfo() { + my $linenumber = $currentlinenumber || 1; + if ( $currentfile ) { - my $lineinfo = " $currentfilename "; + my $lineinfo = @includestack || @openstack ? "\n $currentfilename " : " $currentfilename "; - if ( $currentlinenumber eq 'EOF' ) { + if ( $linenumber eq 'EOF' ) { $lineinfo .= '(EOF)' } else { - $currentlinenumber ||= 1; - $lineinfo .= "(line $currentlinenumber)"; - - for ( my $i = @openstack - 1; $i >= 0; $i-- ) { - my $istack = $openstack[$i]; - - for ( my $j = ( @$istack - 1 ); $j >= 0; $j-- ) { - my $info = $istack->[$j]; - $lineinfo .= "\n from $info->[1] (line $info->[2])"; - } + $lineinfo .= "(line $linenumber)"; + } + # + # Unwind the current include stack + # + for ( my $i = @includestack - 1; $i >= 0; $i-- ) { + my $info = $includestack[$i]; + $linenumber = $info->[2] || 1; + $lineinfo .= "\n from $info->[1] (line $linenumber)"; + } + # + # Now unwind the open stack; each element is an include stack + # + for ( my $i = @openstack - 1; $i >= 0; $i-- ) { + my $istack = $openstack[$i]; + for ( my $j = ( @$istack - 1 ); $j >= 0; $j-- ) { + my $info = $istack->[$j]; + $linenumber = $info->[2] || 1; + $lineinfo .= "\n from $info->[1] (line $linenumber)"; } } @@ -894,7 +905,6 @@ sub cleanup() { # Issue fatal error message and die # sub fatal_error { - my $linenumber = $currentlinenumber || 1; my $currentlineinfo = currentlineinfo; $| = 1; #Reset output buffering (flush any partially filled buffers).