Annotation of embedaddon/curl/tests/mem-include-scan.pl, revision 1.1

1.1     ! misho       1: #!/usr/bin/env perl
        !             2: #***************************************************************************
        !             3: #                                  _   _ ____  _
        !             4: #  Project                     ___| | | |  _ \| |
        !             5: #                             / __| | | | |_) | |
        !             6: #                            | (__| |_| |  _ <| |___
        !             7: #                             \___|\___/|_| \_\_____|
        !             8: #
        !             9: # Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
        !            10: #
        !            11: # This software is licensed as described in the file COPYING, which
        !            12: # you should have received as part of this distribution. The terms
        !            13: # are also available at https://curl.haxx.se/docs/copyright.html.
        !            14: #
        !            15: # You may opt to use, copy, modify, merge, publish, distribute and/or sell
        !            16: # copies of the Software, and permit persons to whom the Software is
        !            17: # furnished to do so, under the terms of the COPYING file.
        !            18: #
        !            19: # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
        !            20: # KIND, either express or implied.
        !            21: #
        !            22: ###########################################################################
        !            23: #
        !            24: # This script scans C source files. If they seem to use memory functions,
        !            25: # it also makes sure that it #includes the correct two header files!
        !            26: #
        !            27: # You can also mark a C source as fine by using 'mem-include-scan' anywhere in
        !            28: # it.
        !            29: #
        !            30: 
        !            31: use strict;
        !            32: use warnings;
        !            33: 
        !            34: my $dir = $ARGV[0] || die "specify directory!";
        !            35: 
        !            36: sub scanfile {
        !            37:     my ($file) = @_;
        !            38:     my $memfunc;
        !            39:     my $memdebug;
        !            40:     my $curlmem;
        !            41: 
        !            42:     print STDERR "checking $file...\n";
        !            43: 
        !            44:     open(F, "<$file");
        !            45:     while(<F>) {
        !            46:         if($_ =~ /(free|alloc|strdup)\(/) {
        !            47:             $memfunc++;
        !            48:         }
        !            49:         elsif($_ =~ /^ *# *include \"memdebug.h\"/) {
        !            50:             $memdebug++;
        !            51:         }
        !            52:         elsif($_ =~ /^ *# *include \"curl_memory.h\"/) {
        !            53:             $curlmem++;
        !            54:         }
        !            55:         elsif($_ =~ /mem-include-scan/) {
        !            56:             # free pass
        !            57:             close(F);
        !            58:             return 0;
        !            59:         }
        !            60:         if($memfunc && $memdebug && $curlmem) {
        !            61:             last;
        !            62:         }
        !            63:     }
        !            64:     close(F);
        !            65: 
        !            66: 
        !            67:     if($memfunc) {
        !            68:         if($memdebug && $curlmem) {
        !            69:             return 0;
        !            70:         }
        !            71:         else {
        !            72:             if(!$memdebug) {
        !            73:                 print STDERR "$file doesn't include \"memdebug.h\"!\n";
        !            74:             }
        !            75:             if(!$curlmem) {
        !            76:                 print STDERR "$file doesn't include \"curl_memory.h\"!\n";
        !            77:             }
        !            78:             return 1;
        !            79:         }
        !            80:     }
        !            81:     return 0;
        !            82: }
        !            83: 
        !            84: opendir(my $dh, $dir) || die "can't opendir $dir: $!";
        !            85: my @cfiles = grep { /\.c\z/ && -f "$dir/$_" } readdir($dh);
        !            86: closedir $dh;
        !            87: 
        !            88: my $errs;
        !            89: for(@cfiles) {
        !            90:     $errs += scanfile("$dir/$_");
        !            91: }
        !            92: 
        !            93: if($errs) {
        !            94:     print STDERR "----\n$errs errors detected!\n";
        !            95:     exit 2;
        !            96: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>