1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
#!/usr/bin/perl -w
#
# Gnumeric
#
# Copyright (C) 2006 Morten Welinder.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this library; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Author: Morten Welinder <terra@gnome.org>
use strict;
my $exitcode = 0;
my $verbose = 0;
my $strict = 0;
warn "$0: should be run from top-level directory.\n"
unless -r "configure.in" && -r 'ChangeLog';
my %base_exceptions =
();
my %exceptions =
();
{
local (*FIND);
open (*FIND, "find . '(' -type f -name '*.c' -print ')' -o '(' -type d '(' -name CVS -o -name intl -o -name macros -o -name .git -o -name win32 ')' -prune ')' |")
or die "$0: cannot execute find: $!\n";
FILE:
foreach my $filename (<FIND>) {
chomp $filename;
$filename =~ s|^\./||;
next if $exceptions{$filename};
my $basename = $filename;
$basename =~ s|^.*/||;
next if $base_exceptions{$basename};
local (*FIL);
if (open (*FIL, "< $filename")) {
# print STDERR "Checking $filename...\n";
my $lineno = 0;
my @lines;
LINE:
while (<FIL>) {
$lineno++;
push @lines, $_;
if ($lineno >= 2 &&
($lines[-2] . $lines[-1]) =~
/^\s*if\s*\(\s*(NULL\s*!=\s*)?([^ ()]+)\s*(!=\s*NULL\s*)?\)\s*(g_free|g_list_free|g_slist_free|go_list_free_custom|go_slist_free_custom|go_format_unref|value_release)\s*\(\s*\2\s*\)\s*;/) {
print STDERR "$0: Checked $4 at $filename:$lineno\n";
next LINE;
}
if ($lineno >= 4 &&
($lines[-4] . $lines[-3] . $lines[-2] . $lines[-1] ) =~
/^\s*if\s*\(\s*(NULL\s*!=\s*)?([^ ()]+)\s*(!=\s*NULL\s*)?\)\s*{\s*(g_free|g_list_free|g_slist_free|go_list_free_custom|go_slist_free_custom|go_format_unref|value_release)\s*\(\s*\2\s*\)\s*;\s*\2\s*=\s*(0|NULL)\s*;\s*}/) {
print STDERR "$0: Checked $4 at $filename:$lineno\n";
next LINE;
}
if ($lineno >= 3 &&
($lines[-3] . $lines[-2] . $lines[-1]) =~
/^[^\n]*([^ ()]+)(\s*!=\s*NULL)?\s*\?\s*(g_strdup|value_dup)\s*\(\s*\1\s*\)\s*:\s*NULL/) {
print STDERR "$0: Checked $3 at $filename:$lineno\n";
next LINE;
}
if ($lineno >= 3 &&
($lines[-3] . $lines[-2] . $lines[-1]) =~
/^[^\n]*(\s*NULL\s*!=\s*)([^ ()]+)\s*\?\s*(g_strdup|value_dup)\s*\(\s*\2\s*\)\s*:\s*NULL/) {
print STDERR "$0: Checked $3 at $filename:$lineno\n";
next LINE;
}
}
close (*FIL);
} else {
print STDERR "$0: Cannot read `$filename': $!\b";
$exitcode = 1;
}
}
close (*FIND);
}
exit $exitcode;
|