3 # Copyright (c) 2005 Dag-Erling Coïdan 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
46 # look for K&R-style function definitions
47 if (m/^(\w+)\s*\(([\w,\s]+)\)$/) {
50 my @args = split(/\s*,\s*/, $2);
52 # capture K&R-style argument list
58 # remove comments (common in vfs code)
59 $arglist =~ s/\/\*([^*]|\*[^\/])*\*\// /gs;
60 # identify type of each argument
62 foreach (split('\n', $arglist)) {
64 if (!/^\s*([\w\s\*]+?)\s*(\w+?);\s*$/) {
65 warn("[$fn:$line] $func(): can't parse argument list\n");
72 # construct ANSI-style function definition
74 foreach my $arg (@args) {
75 # missing arguments in argument list
76 if (!exists($type{$arg})) {
77 warn("[$fn:$line] $func(): unknown type for '$arg' argument\n");
83 $type{$arg} = "void *"
84 if $type{$arg} eq "caddr_t";
88 unless ($type{$arg} =~ m/\*$/);
91 unless $arg eq $args[-1];
95 # extra arguments in argument list
97 warn("[$fn:$line] $func(): too many arguments\n");
102 print $ofh "$repl\n";
104 # warn about long lines so they can be fixed up manually
105 warn("[$fn:$line] $func(): definition exceeds 80 characters\n")
106 if length($repl) >= 80;
119 my $tfn = "$fn.ansify";
123 if (open(IN, "<", $fn)) {
124 if (open(OUT, ">", $tfn)) {
125 ansify(*IN{IO}, *OUT{IO}, $fn);
126 if (!rename($tfn, $fn)) {
131 warn("$fn.ansify: $!\n");
139 print STDERR "usage: ansify [options] [file ...]
142 -c, --caddr_t Replace caddr_t with void * in converted
149 Getopt::Long::Configure("auto_abbrev", "bundling");
151 "c|caddr_t" => \$caddr_t,
160 ansify(*STDIN{IO}, *STDOUT{IO}, "(stdin)");