diff options
author | 2008-02-07 16:49:29 +0000 | |
---|---|---|
committer | 2008-02-07 16:49:29 +0000 | |
commit | e8ff93b4e6c2e64cc37d5d568497f0d6c92d237b (patch) | |
tree | bece93d50e4163c155b36f0a3439c5eb9d3a8aec /build-aux | |
parent | Remove trailing blanks (diff) | |
download | libvirt-e8ff93b4e6c2e64cc37d5d568497f0d6c92d237b.tar.gz libvirt-e8ff93b4e6c2e64cc37d5d568497f0d6c92d237b.tar.bz2 libvirt-e8ff93b4e6c2e64cc37d5d568497f0d6c92d237b.zip |
Remove more useless if tests before "free"-like functions.
* build-aux/useless-if-before-free: Rename from ...
* build-aux/find-unnecessary-if-before-free: ... this. Remove file.
Also changed it so that new names are no longer hard-coded in the
script. Instead, they're supplied via options:
* Makefile.cfg (useless_free_options): Define.
Add xmlXPathFreeObject to the list of free-like functions it detects.
* Makefile.maint (sc_avoid_if_before_free): Reflect script renaming.
* .x-sc_avoid_if_before_free: Likewise.
* src/openvz_conf.c (openvzParseXML): Remove useless "if"-before-free.
* src/qemu_conf.c (qemudParseXML, qemudParseNetworkXML): Likewise.
* src/virsh.c (cmdVNCDisplay, cmdTTYConsole, cmdDetachInterface):
(cmdDetachDisk): Likewise.
* src/xm_internal.c (xenXMConfigSetIntFromXPath): Likewise.
(xenXMConfigSetStringFromXPath, xenXMParseXMLToConfig): Likewise.
(xenXMDomainAttachDevice, xenXMAttachDisk, xenXMAttachInterface):
(xenXMDomainDetachDevice): Likewise.
* src/xml.c (virXPathString): Likewise.
* tests/xmlrpctest.c (checkRequestValue): Likewise.
Diffstat (limited to 'build-aux')
-rwxr-xr-x | build-aux/find-unnecessary-if-before-free | 42 | ||||
-rwxr-xr-x | build-aux/useless-if-before-free | 118 |
2 files changed, 118 insertions, 42 deletions
diff --git a/build-aux/find-unnecessary-if-before-free b/build-aux/find-unnecessary-if-before-free deleted file mode 100755 index 0cd38ebc1..000000000 --- a/build-aux/find-unnecessary-if-before-free +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl -# Detect instances of "if (p) free (p);". -# Likewise for "if (p != NULL) free (p);". -# Exit status is like grep: 0 for no match. 1 for any number. - -# Note: giving line numbers isn't practical, since I've reset the -# input record separator. -use strict; -use warnings; -(my $ME = $0) =~ s|.*/||; - -{ - # Use ';' as the input record separator. - $/ = ';'; - - my $found_match = 0; - foreach my $file (@ARGV) - { - open FH, '<', $file - or die "$ME: can't open `$file' for reading: $!\n"; - while (defined (my $line = <FH>)) - { - if ($line =~ - /\b(if\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\) - \s+(?:xmlXPathFreeContext|(?:sexpr_)?free)\s*\(\s*\2\s*\))/sx) - { - print "$file: $1\n"; - $found_match = 1; - } - } - close FH; - } - exit !$found_match; -} - -my $foo = <<'EOF'; -# The above is to *find* them. -# This adjusts them, removing the unnecessary "if (p)" part. - -git ls-files -z --exclude=find-unnecessary-if-before-free |xargs -0 \ -perl -0x3b -pi -e 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)\s+((?:xmlXPathFreeContext|(?:sexpr_)?free)\s*\(\s*\1\s*\))/$2/s' -EOF diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free new file mode 100755 index 000000000..57040a3d8 --- /dev/null +++ b/build-aux/useless-if-before-free @@ -0,0 +1,118 @@ +#!/usr/bin/perl -T +# Detect instances of "if (p) free (p);". +# Likewise for "if (p != NULL) free (p);". + +my $VERSION = '2008-02-04 22:25'; # 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 +# do its job. Otherwise, update this string manually. + +# Exit status is like grep: 0 for no match. 1 for any number. +# Note: giving line numbers isn't practical, since I've reset the +# input record separator. +use strict; +use warnings; +use Getopt::Long; + +(my $ME = $0) =~ s|.*/||; + +my $debug = 0; +my $verbose = 0; + +sub usage ($) +{ + my ($exit_code) = @_; + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); + if ($exit_code != 0) + { + print $STREAM "Try `$ME --help' for more information.\n"; + } + else + { + print $STREAM <<EOF; +Usage: $ME [OPTIONS] FILE... + +OPTIONS: + + --name=N add name N to the list of `free'-like functions to detect; + may be repeated + + --help display this help and exit + --version output version information and exit + --verbose generate verbose output + +EXAMPLE: + + git ls-files -z |xargs -0 $ME + +EOF + } + exit $exit_code; +} + +{ + my @name = qw(free); + GetOptions + ( + debug => \$debug, + verbose => \$verbose, + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + 'name=s@' => \@name, + ) or usage 1; + + # Make sure we have the right number of non-option arguments. + # Always tell the user why we fail. + @ARGV < 1 + and (warn "$ME: missing FILE argument\n"), usage 1; + + my $or = join '|', @name; + my $regexp = qr/(?:$or)/; + + # Set the input record separator. + $/ = '"'; + + my $found_match = 0; + foreach my $file (@ARGV) + { + open FH, '<', $file + or die "$ME: can't open `$file' for reading: $!\n"; + while (defined (my $line = <FH>)) + { + if ($line =~ + /\b(if\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\) + (?: \s*$regexp\s*\(\s*\2\s*\)| + \s*\{\s*$regexp\s*\(\s*\2\s*\)\s*;\s*\}))/sx) + { + print "$file: $1\n"; + $found_match = 1; + } + } + close FH; + } + exit !$found_match; +} + +my $foo = <<'EOF'; +# The above is to *find* them. +# This adjusts them, removing the unnecessary "if (p)" part. + +# FIXME: do something like this as an option. +git ls-files -z --exclude=$ME |xargs -0 \ +perl -0x3b -pi -e 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)\s+((?:sexpr_)?free\s*\(\s*\1\s*\))/$2/s' + +When modifying files, refuse to process anything other than a regular file. + +# Or this one-liner to detect them: +git ls-files -z |xargs -0 perl -00 -ne '/\b(if\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)(?:\s*(?:sexpr_)?free\s*\(\s*\2\s*\)|\s*\{\s*(?:sexpr_)?free\s*\(\s*\2\s*\)\s*;\s*\}))/sx and print "$1\n"' +EOF + +## Local Variables: +## indent-tabs-mode: nil +## eval: (add-hook 'write-file-hooks 'time-stamp) +## time-stamp-start: "my $VERSION = '" +## time-stamp-format: "%:y-%02m-%02d %02H:%02M" +## time-stamp-time-zone: "UTC" +## time-stamp-end: "'; # UTC" +## End: |