f6ddb4675c
Added a script check_goto.pl, that when run from the source code root, will scan all .c files to match the following pattern: label: if (condition) goto label; On finding such a pattern the script will print the file name and the line number. There are certain cases where the above recursive pattern is intended. Hence adding those labels to ignore-labels. Thanks Vijaikumar Mallikarjuna for the perl script. Also fixed all such existing errors Change-Id: I1b821d0a8c296f16e40faff20bd029bdc880c2e9 BUG: 1119256 Signed-off-by: Vijaikumar Mallikarjuna <vmallika@redhat.com> Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/8307 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com> Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
46 lines
1.2 KiB
Perl
Executable File
46 lines
1.2 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my @ignore_labels = qw (TODO retry fetch_data again try_again sp_state_read_proghdr redo disabled_loop fd_alloc_try_again);
|
|
my @ignore_files = qw (y.tab.c lex.c);
|
|
my @c_files;
|
|
my $line;
|
|
my @labels;
|
|
my $in_comments;
|
|
|
|
{
|
|
local $" = "|";
|
|
my $cmd = "find . -type f -name '*.c' | grep -vE '(@ignore_files)'";
|
|
@c_files = `$cmd`;
|
|
}
|
|
|
|
foreach my $file (@c_files) {
|
|
chomp ($file);
|
|
open FD, $file or die ("Failed to read file $file: $!");
|
|
@labels = ();
|
|
$in_comments = 0;
|
|
while ($line = <FD>) {
|
|
chomp ($line);
|
|
|
|
next if $line =~ /^\s*(#|\/\/)/;
|
|
$in_comments = 1 if ($line =~ /\/\*/);
|
|
$in_comments = 0 if ($line =~ /\*\//);
|
|
|
|
next if $in_comments;
|
|
if ($line =~ /^\s*(([a-zA-Z]|_)\w*)\s*:/) {
|
|
push (@labels, $1) unless grep (/$1/, @ignore_labels);
|
|
}
|
|
@labels = () if $line =~ /^}/;
|
|
|
|
next unless @labels;
|
|
if ($line =~ /^\s*goto\s*(\w+)/) {
|
|
print "$file:$.: $line\n" if grep /^$1$/, @labels;
|
|
}
|
|
}
|
|
|
|
close FD;
|
|
}
|
|
|