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>