2008-05-25 Jim Meyering <meyering@redhat.com>
+ 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.
+
useless-if-before-free: accept white space in the expression.
* build-aux/useless-if-before-free: For now, any white space
in the expression must be identical in the free argument.
# 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
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";
+ }
}
}
}