File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / mem-include-scan.pl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:16 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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>