mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-03 02:32:04 +08:00
07dacb9486
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.
62 lines
1.6 KiB
Perl
Executable File
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;
|
|
}
|