3 # Copyright (c) 2005 Dag-Erling Smørgrav
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer
11 # in this position and unchanged.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
45 # look for K&R-style function definitions
46 if (m/^(\w+)\s*\(([\w,\s]+)\)$/) {
49 my @args = split(/\s*,\s*/, $2);
51 # capture K&R-style argument list
57 # remove comments (common in vfs code)
58 $arglist =~ s/\/\*([^*]|\*[^\/])*\*\// /gs;
59 # identify type of each argument
61 foreach (split('\n', $arglist)) {
63 if (!/^\s*([\w\s\*]+?)\s*(\w+?);\s*$/) {
64 warn("[$fn:$line] $func(): can't parse argument list\n");
71 # construct ANSI-style function definition
73 foreach my $arg (@args) {
74 # missing arguments in argument list
75 if (!exists($type{$arg})) {
76 warn("[$fn:$line] $func(): unknown type for '$arg' argument\n");
82 $type{$arg} = "void *"
83 if $type{$arg} eq "caddr_t";
87 unless ($type{$arg} =~ m/\*$/);
90 unless $arg eq $args[-1];
94 # extra arguments in argument list
96 warn("[$fn:$line] $func(): too many arguments\n");
101 print $ofh "$repl\n";
103 # warn about long lines so they can be fixed up manually
104 warn("[$fn:$line] $func(): definition exceeds 80 characters\n")
105 if length($repl) >= 80;
118 my $tfn = "$fn.ansify";
122 if (open(IN, "<", $fn)) {
123 if (open(OUT, ">", $tfn)) {
124 ansify(*IN{IO}, *OUT{IO}, $fn);
125 if (!rename($tfn, $fn)) {
130 warn("$fn.ansify: $!\n");
138 print STDERR "usage: ansify [options] [file ...]
141 -c, --caddr_t Replace caddr_t with void * in converted
148 Getopt::Long::Configure("auto_abbrev", "bundling");
150 "c|caddr_t" => \$caddr_t,
159 ansify(*STDIN{IO}, *STDOUT{IO}, "(stdin)");