Annotation of embedaddon/curl/tests/mem-include-scan.pl, revision 1.1.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>