summaryrefslogtreecommitdiff
path: root/build-aux/useless-if-before-free
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2008-05-25 19:37:11 +0200
committerJim Meyering <meyering@redhat.com>2008-05-25 19:37:11 +0200
commitcf1a557f5303e1f3b3cdb8667c34a4837f43d88f (patch)
tree569bfa91343982323406a70a7a886a1709933e6e /build-aux/useless-if-before-free
parent6d3f150872497bf8fd6c74aa309f2509476a13a8 (diff)
downloadgnulib-cf1a557f5303e1f3b3cdb8667c34a4837f43d88f.tar.gz
useless-if-before-free: freed expr may have white-space differences
* build-aux/useless-if-before-free: Recognize cases in which the freed expression differs from the tested one in embedded white space, e.g., if (p[i + 1]) free(p[i+1]). Correct thinko in prev: $1 was used, so we can't make any regexp shy. Improved tests now detect this.
Diffstat (limited to 'build-aux/useless-if-before-free')
-rwxr-xr-xbuild-aux/useless-if-before-free24
1 files changed, 16 insertions, 8 deletions
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
index f08b6cba6c..0bae2c4d05 100755
--- a/build-aux/useless-if-before-free
+++ b/build-aux/useless-if-before-free
@@ -2,7 +2,7 @@
# Detect instances of "if (p) free (p);".
# Likewise for "if (p != NULL) free (p);". And with braces.
-my $VERSION = '2008-05-25 16:59'; # UTC
+my $VERSION = '2008-05-25 17:36'; # UTC
# The definition above must lie within the first 8 lines in order
# for the Emacs time-stamp write hook (at end) to update it.
# If you change this file with Emacs, please let the write hook
@@ -122,14 +122,22 @@ EOF
while (defined (my $line = <FH>))
{
while ($line =~
- /\b(?:if\s*\(\s*([^)]+?)(?:\s*!=\s*NULL)?\s*\)
- (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*\1\s*\)|
- \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;\s*\}))/sxg)
+ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*NULL)?\s*\)
+ (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)|
+ \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
{
- $found_match = 1;
- $list
- and (print "$file\0"), next FILE;
- print "$file: $1\n";
+ # Compare "if" expression and free'd expression,
+ # without regard to white space.
+ (my $e1 = $2) =~ tr/ \t//d;
+ my $e2 = defined $3 ? $3 : $4;
+ $e2 =~ tr/ \t//d;
+ if ($e1 eq $e2)
+ {
+ $found_match = 1;
+ $list
+ and (print "$file\0"), next FILE;
+ print "$file: $1\n";
+ }
}
}
}