hdf5/bin/checkposix
Robb Matzke 07dacb9486 [svn-r60] ./bin/checkposix NEW
Perl script that looks for Posix functions that haven't been
        protected by adding `HD' to the beginning of the name.  It
        takes a list of .c file names as arguments.

./bin/errors                    NEW
        A filter that takes a function prologue and function body as
        standard input and updates the error list in the prologue
        based on the function body.  You must add the `ERRORS' or
        `Errors:' field to the prologue before you pass it through
        this filter or else the errors come out as a separate
        comment.  The errors field must be terminated with a blank
        line in the prologue so we know where the end is.

        I may enhance this in the future to take an entire file as
        standard input instead of individual functions.
1997-09-02 10:37:49 -05:00

62 lines
1.6 KiB
Perl
Executable File

#!/usr/local/bin/perl -w
require 5.003;
# Copyright (C) 1997 National Center for Supercomputing Applications.
# All rights reserved.
#
# Robb Matzke, matzke@llnl.gov
# 30 Aug 1997
#
# Purpose: Given the names of C source files this script will print the
# file name, line number, and function name of any function that
# doesn't begin with the letter `h' or `H' as stipulated by the
# HDF5 programming style guide.
#
# Emacs users can run this script as the compile command and
# use `next-error' (usually bound to M-`) to find each name
# violation.
while (<>) {
# Get rid of comments by removing the inside part.
s|/\*.*?\*/||g;
if ($in_comment) {
if (/\*\//) {
s|.*?\*/||;
$in_comment = 0;
} else {
$_="\n";
}
} elsif (m|/\*|) {
s|/\*.*||;
$in_comment = 1;
}
# Get rid of string constants if they begin and end on this line.
s/([\'\"])([^\1]|\\\1)*?\1/$1$1/g;
# Now find all function calls on this line
while (($name)=/\b([a-gi-z_A-GI-Z]\w*)\s*\(/) {
$_ = $';
# Ignore C statements that look sort of like function
# calls.
next if $name =~ /^(if|for|return|sizeof|switch|while)$/;
# These are really HDF5 functions/macros even though they don't
# start with `h' or `H'.
next if $name =~ /^FUNC_(ENTER|LEAVE)$/;
next if $name =~ /^U?INT(8|16|32|64)(ENCODE|DECODE)$/;
next if $name =~ /^(MIN|MAX3?|NELMTS|BOUND|CONSTR)$/;
# These functions/macros are exempt.
next if $name =~ /^(assert|main|[fs]?printf)$/;
print "$ARGV:$.: $name\n";
}
} continue {
close ARGV if eof;
}