xref: /xnu-11215.61.5/bsd/vfs/vnode_if.sh (revision 4f1223e81cd707a65cc109d0b8ad6653699da3c4)
1*4f1223e8SApple OSS Distributions#!/bin/sh -
2*4f1223e8SApple OSS Distributionscopyright='
3*4f1223e8SApple OSS Distributions/*
4*4f1223e8SApple OSS Distributions * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
5*4f1223e8SApple OSS Distributions *
6*4f1223e8SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
7*4f1223e8SApple OSS Distributions *
8*4f1223e8SApple OSS Distributions * The contents of this file constitute Original Code as defined in and
9*4f1223e8SApple OSS Distributions * are subject to the Apple Public Source License Version 1.1 (the
10*4f1223e8SApple OSS Distributions * "License").  You may not use this file except in compliance with the
11*4f1223e8SApple OSS Distributions * License.  Please obtain a copy of the License at
12*4f1223e8SApple OSS Distributions * http://www.apple.com/publicsource and read it before using this file.
13*4f1223e8SApple OSS Distributions *
14*4f1223e8SApple OSS Distributions * This Original Code and all software distributed under the License are
15*4f1223e8SApple OSS Distributions * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16*4f1223e8SApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17*4f1223e8SApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18*4f1223e8SApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
19*4f1223e8SApple OSS Distributions * License for the specific language governing rights and limitations
20*4f1223e8SApple OSS Distributions * under the License.
21*4f1223e8SApple OSS Distributions *
22*4f1223e8SApple OSS Distributions * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
23*4f1223e8SApple OSS Distributions */
24*4f1223e8SApple OSS Distributions/*
25*4f1223e8SApple OSS Distributions * Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved
26*4f1223e8SApple OSS Distributions * Copyright (c) 1992, 1993, 1994, 1995
27*4f1223e8SApple OSS Distributions *	The Regents of the University of California.  All rights reserved.
28*4f1223e8SApple OSS Distributions *
29*4f1223e8SApple OSS Distributions * Redistribution and use in source and binary forms, with or without
30*4f1223e8SApple OSS Distributions * modification, are permitted provided that the following conditions
31*4f1223e8SApple OSS Distributions * are met:
32*4f1223e8SApple OSS Distributions * 1. Redistributions of source code must retain the above copyright
33*4f1223e8SApple OSS Distributions *    notice, this list of conditions and the following disclaimer.
34*4f1223e8SApple OSS Distributions * 2. Redistributions in binary form must reproduce the above copyright
35*4f1223e8SApple OSS Distributions *    notice, this list of conditions and the following disclaimer in the
36*4f1223e8SApple OSS Distributions *    documentation and/or other materials provided with the distribution.
37*4f1223e8SApple OSS Distributions * 3. All advertising materials mentioning features or use of this software
38*4f1223e8SApple OSS Distributions *    must display the following acknowledgement:
39*4f1223e8SApple OSS Distributions *      This product includes software developed by the University of
40*4f1223e8SApple OSS Distributions *      California, Berkeley and its contributors.
41*4f1223e8SApple OSS Distributions * 4. Neither the name of the University nor the names of its contributors
42*4f1223e8SApple OSS Distributions *    may be used to endorse or promote products derived from this software
43*4f1223e8SApple OSS Distributions *    without specific prior written permission.
44*4f1223e8SApple OSS Distributions *
45*4f1223e8SApple OSS Distributions * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
46*4f1223e8SApple OSS Distributions * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47*4f1223e8SApple OSS Distributions * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48*4f1223e8SApple OSS Distributions * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
49*4f1223e8SApple OSS Distributions * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50*4f1223e8SApple OSS Distributions * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51*4f1223e8SApple OSS Distributions * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52*4f1223e8SApple OSS Distributions * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53*4f1223e8SApple OSS Distributions * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54*4f1223e8SApple OSS Distributions * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55*4f1223e8SApple OSS Distributions * SUCH DAMAGE.
56*4f1223e8SApple OSS Distributions */
57*4f1223e8SApple OSS Distributions'
58*4f1223e8SApple OSS DistributionsSCRIPT_ID='@(#)vnode_if.sh	8.7 (Berkeley) 5/11/95'
59*4f1223e8SApple OSS Distributions
60*4f1223e8SApple OSS Distributions# Script to produce VFS front-end sugar.
61*4f1223e8SApple OSS Distributions#
62*4f1223e8SApple OSS Distributions# usage: vnode_if.sh srcfile
63*4f1223e8SApple OSS Distributions#	(where srcfile is currently bsd/vfs/vnode_if.src)
64*4f1223e8SApple OSS Distributions#
65*4f1223e8SApple OSS Distributions
66*4f1223e8SApple OSS Distributionsif [ $# -ne 1 ] ; then
67*4f1223e8SApple OSS Distributions	echo 'usage: vnode_if.sh srcfile'
68*4f1223e8SApple OSS Distributions	exit 1
69*4f1223e8SApple OSS Distributionsfi
70*4f1223e8SApple OSS Distributions
71*4f1223e8SApple OSS Distributions# Name of the source file.
72*4f1223e8SApple OSS Distributionssrc=$1
73*4f1223e8SApple OSS Distributions
74*4f1223e8SApple OSS Distributions# Names of the created files.
75*4f1223e8SApple OSS Distributionsout_c=vnode_if.c
76*4f1223e8SApple OSS Distributionsout_h=vnode_if.h
77*4f1223e8SApple OSS Distributions
78*4f1223e8SApple OSS Distributions# Awk program (must support nawk extensions)
79*4f1223e8SApple OSS Distributions# Use "awk" at Berkeley, "nawk" or "gawk" elsewhere.
80*4f1223e8SApple OSS Distributionsawk=${AWK:-awk}
81*4f1223e8SApple OSS Distributions#awk=${AWK:-gawk}
82*4f1223e8SApple OSS Distributions
83*4f1223e8SApple OSS Distributions# Does this awk have a "toupper" function? (i.e. is it GNU awk)
84*4f1223e8SApple OSS Distributionsisgawk=`$awk 'BEGIN { print toupper("true"); exit; }' 2>/dev/null`
85*4f1223e8SApple OSS Distributions
86*4f1223e8SApple OSS Distributions# If this awk does not define "toupper" then define our own.
87*4f1223e8SApple OSS Distributionsif [ "$isgawk" = TRUE ] ; then
88*4f1223e8SApple OSS Distributions	# GNU awk provides it.
89*4f1223e8SApple OSS Distributions	toupper=
90*4f1223e8SApple OSS Distributionselse
91*4f1223e8SApple OSS Distributions	# Provide our own toupper()
92*4f1223e8SApple OSS Distributions	toupper='
93*4f1223e8SApple OSS Distributionsfunction toupper(str) {
94*4f1223e8SApple OSS Distributions	_toupper_cmd = "echo "str" |tr a-z A-Z"
95*4f1223e8SApple OSS Distributions	_toupper_cmd | getline _toupper_str;
96*4f1223e8SApple OSS Distributions	close(_toupper_cmd);
97*4f1223e8SApple OSS Distributions	return _toupper_str;
98*4f1223e8SApple OSS Distributions}'
99*4f1223e8SApple OSS Distributionsfi
100*4f1223e8SApple OSS Distributions
101*4f1223e8SApple OSS Distributions#
102*4f1223e8SApple OSS Distributions# This is the common part of all awk programs that read $src
103*4f1223e8SApple OSS Distributions# This parses the input for one function into the arrays:
104*4f1223e8SApple OSS Distributions#	argdir, argtype, argname, willrele
105*4f1223e8SApple OSS Distributions# and calls "doit()" to generate output for the function.
106*4f1223e8SApple OSS Distributions#
107*4f1223e8SApple OSS Distributions# Input to this parser is pre-processed slightly by sed
108*4f1223e8SApple OSS Distributions# so this awk parser doesn't have to work so hard.  The
109*4f1223e8SApple OSS Distributions# changes done by the sed pre-processing step are:
110*4f1223e8SApple OSS Distributions#	insert a space beween * and pointer name
111*4f1223e8SApple OSS Distributions#	replace semicolons with spaces
112*4f1223e8SApple OSS Distributions#
113*4f1223e8SApple OSS Distributionssed_prep='s:\*\([^\*/]\):\* \1:g
114*4f1223e8SApple OSS Distributionss/;/ /'
115*4f1223e8SApple OSS Distributionsawk_parser='
116*4f1223e8SApple OSS Distributions# Comment line
117*4f1223e8SApple OSS Distributions/^#/	{ next; }
118*4f1223e8SApple OSS Distributions# First line of description
119*4f1223e8SApple OSS Distributions/^vop_/	{
120*4f1223e8SApple OSS Distributions	name=$1;
121*4f1223e8SApple OSS Distributions	argc=0;
122*4f1223e8SApple OSS Distributions	ubc=$3;
123*4f1223e8SApple OSS Distributions	next;
124*4f1223e8SApple OSS Distributions}
125*4f1223e8SApple OSS Distributions# Last line of description
126*4f1223e8SApple OSS Distributions/^}/	{
127*4f1223e8SApple OSS Distributions	doit();
128*4f1223e8SApple OSS Distributions	next;
129*4f1223e8SApple OSS Distributions}
130*4f1223e8SApple OSS Distributions# Middle lines of description
131*4f1223e8SApple OSS Distributions{
132*4f1223e8SApple OSS Distributions	argdir[argc] = $1; i=2;
133*4f1223e8SApple OSS Distributions	if ($2 == "WILLRELE") {
134*4f1223e8SApple OSS Distributions		willrele[argc] = 1;
135*4f1223e8SApple OSS Distributions		i++;
136*4f1223e8SApple OSS Distributions	} else
137*4f1223e8SApple OSS Distributions		willrele[argc] = 0;
138*4f1223e8SApple OSS Distributions	argtype[argc] = $i; i++;
139*4f1223e8SApple OSS Distributions	while (i < NF) {
140*4f1223e8SApple OSS Distributions		argtype[argc] = argtype[argc]" "$i;
141*4f1223e8SApple OSS Distributions		i++;
142*4f1223e8SApple OSS Distributions	}
143*4f1223e8SApple OSS Distributions	argname[argc] = $i;
144*4f1223e8SApple OSS Distributions	argc++;
145*4f1223e8SApple OSS Distributions	next;
146*4f1223e8SApple OSS Distributions}
147*4f1223e8SApple OSS Distributions'
148*4f1223e8SApple OSS Distributions
149*4f1223e8SApple OSS Distributions# This is put after the copyright on each generated file.
150*4f1223e8SApple OSS Distributionswarning="
151*4f1223e8SApple OSS Distributions/*
152*4f1223e8SApple OSS Distributions * Warning: This file is generated automatically.
153*4f1223e8SApple OSS Distributions * (Modifications made here may easily be lost!)
154*4f1223e8SApple OSS Distributions *
155*4f1223e8SApple OSS Distributions * Created by the script:
156*4f1223e8SApple OSS Distributions *	${SCRIPT_ID}
157*4f1223e8SApple OSS Distributions */
158*4f1223e8SApple OSS Distributions"
159*4f1223e8SApple OSS Distributions
160*4f1223e8SApple OSS Distributions# Get rid of ugly spaces
161*4f1223e8SApple OSS Distributionsspace_elim='s:\([^/]\*\) :\1:g'
162*4f1223e8SApple OSS Distributions
163*4f1223e8SApple OSS Distributions#
164*4f1223e8SApple OSS Distributions# Redirect stdout to the H file.
165*4f1223e8SApple OSS Distributions#
166*4f1223e8SApple OSS Distributionsecho "$0: Creating $out_h" 1>&2
167*4f1223e8SApple OSS Distributionsexec > $out_h
168*4f1223e8SApple OSS Distributions
169*4f1223e8SApple OSS Distributions# Begin stuff
170*4f1223e8SApple OSS Distributionsecho "$copyright"
171*4f1223e8SApple OSS Distributionsecho "$warning"
172*4f1223e8SApple OSS Distributionsecho '
173*4f1223e8SApple OSS Distributions#ifndef _SYS_VNODE_IF_H_
174*4f1223e8SApple OSS Distributions#define _SYS_VNODE_IF_H_
175*4f1223e8SApple OSS Distributions
176*4f1223e8SApple OSS Distributions#include <sys/appleapiopts.h>
177*4f1223e8SApple OSS Distributions#include <sys/ubc.h>
178*4f1223e8SApple OSS Distributions
179*4f1223e8SApple OSS Distributions#ifdef __APPLE_API_UNSTABLE
180*4f1223e8SApple OSS Distributionsextern struct vnodeop_desc vop_default_desc;
181*4f1223e8SApple OSS Distributions'
182*4f1223e8SApple OSS Distributions
183*4f1223e8SApple OSS Distributions# Body stuff
184*4f1223e8SApple OSS Distributions# This awk program needs toupper() so define it if necessary.
185*4f1223e8SApple OSS Distributionssed -e "$sed_prep" $src | $awk "$toupper"'
186*4f1223e8SApple OSS Distributionsfunction doit() {
187*4f1223e8SApple OSS Distributions	# Declare arg struct, descriptor.
188*4f1223e8SApple OSS Distributions	printf("\nstruct %s_args {\n", name);
189*4f1223e8SApple OSS Distributions	printf("\tstruct vnodeop_desc * a_desc;\n");
190*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
191*4f1223e8SApple OSS Distributions		printf("\t%s a_%s;\n", argtype[i], argname[i]);
192*4f1223e8SApple OSS Distributions	}
193*4f1223e8SApple OSS Distributions	printf("};\n");
194*4f1223e8SApple OSS Distributions	printf("extern struct vnodeop_desc %s_desc;\n", name);
195*4f1223e8SApple OSS Distributions	# Define inline function.
196*4f1223e8SApple OSS Distributions	printf("#define %s(", toupper(name));
197*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
198*4f1223e8SApple OSS Distributions		printf("%s", argname[i]);
199*4f1223e8SApple OSS Distributions		if (i < (argc-1)) printf(", ");
200*4f1223e8SApple OSS Distributions	}
201*4f1223e8SApple OSS Distributions	printf(") _%s(", toupper(name));
202*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
203*4f1223e8SApple OSS Distributions		printf("%s", argname[i]);
204*4f1223e8SApple OSS Distributions		if (i < (argc-1)) printf(", ");
205*4f1223e8SApple OSS Distributions	}
206*4f1223e8SApple OSS Distributions	printf(")\n");
207*4f1223e8SApple OSS Distributions	printf("static __inline int _%s(", toupper(name));
208*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
209*4f1223e8SApple OSS Distributions		# generate ANSI protoypes now, hurrah!
210*4f1223e8SApple OSS Distributions		printf("%s _%s", argtype[i], argname[i]);
211*4f1223e8SApple OSS Distributions		if (i < (argc-1)) printf(", ");
212*4f1223e8SApple OSS Distributions	}
213*4f1223e8SApple OSS Distributions	printf(")\n");
214*4f1223e8SApple OSS Distributions	printf("{\n\tstruct %s_args a;\n", name);
215*4f1223e8SApple OSS Distributions	printf("\ta.a_desc = VDESC(%s);\n", name);
216*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
217*4f1223e8SApple OSS Distributions		printf("\ta.a_%s = _%s;\n", argname[i], argname[i]);
218*4f1223e8SApple OSS Distributions	}
219*4f1223e8SApple OSS Distributions	if (toupper(ubc) == "UBC") {
220*4f1223e8SApple OSS Distributions		printf("\t{\n\t\t" \
221*4f1223e8SApple OSS Distributions			"int _err;\n\t\t"   \
222*4f1223e8SApple OSS Distributions			"_err = VCALL(_%s%s, VOFFSET(%s), &a);\n\t\t"    \
223*4f1223e8SApple OSS Distributions			"return (_err);\n\t}\n}\n",
224*4f1223e8SApple OSS Distributions			argname[0], argname[0], arg0special, name, argname[0]);
225*4f1223e8SApple OSS Distributions	} else {
226*4f1223e8SApple OSS Distributions		printf("\treturn (VCALL(_%s%s, VOFFSET(%s), &a));\n}\n",
227*4f1223e8SApple OSS Distributions			argname[0], arg0special, name);
228*4f1223e8SApple OSS Distributions	}
229*4f1223e8SApple OSS Distributions}
230*4f1223e8SApple OSS DistributionsBEGIN	{
231*4f1223e8SApple OSS Distributions	arg0special="";
232*4f1223e8SApple OSS Distributions}
233*4f1223e8SApple OSS DistributionsEND	{
234*4f1223e8SApple OSS Distributions	printf("\n/* Special cases: */\n#include <sys/buf.h>\n#include <sys/vm.h>\n");
235*4f1223e8SApple OSS Distributions	argc=1;
236*4f1223e8SApple OSS Distributions	argtype[0]="struct buf *";
237*4f1223e8SApple OSS Distributions	argname[0]="bp";
238*4f1223e8SApple OSS Distributions	arg0special="->b_vp";
239*4f1223e8SApple OSS Distributions	name="vop_strategy";
240*4f1223e8SApple OSS Distributions	doit();
241*4f1223e8SApple OSS Distributions	name="VNOP_BWRITE";
242*4f1223e8SApple OSS Distributions	doit();
243*4f1223e8SApple OSS Distributions}
244*4f1223e8SApple OSS Distributions'"$awk_parser" | sed -e "$space_elim"
245*4f1223e8SApple OSS Distributions
246*4f1223e8SApple OSS Distributions# End stuff
247*4f1223e8SApple OSS Distributionsecho '
248*4f1223e8SApple OSS Distributions/* End of special cases. */
249*4f1223e8SApple OSS Distributions
250*4f1223e8SApple OSS Distributions#endif /* __APPLE_API_UNSTABLE */
251*4f1223e8SApple OSS Distributions#endif /* !_SYS_VNODE_IF_H_ */'
252*4f1223e8SApple OSS Distributions
253*4f1223e8SApple OSS Distributions#
254*4f1223e8SApple OSS Distributions# Redirect stdout to the C file.
255*4f1223e8SApple OSS Distributions#
256*4f1223e8SApple OSS Distributionsecho "$0: Creating $out_c" 1>&2
257*4f1223e8SApple OSS Distributionsexec > $out_c
258*4f1223e8SApple OSS Distributions
259*4f1223e8SApple OSS Distributions# Begin stuff
260*4f1223e8SApple OSS Distributionsecho "$copyright"
261*4f1223e8SApple OSS Distributionsecho "$warning"
262*4f1223e8SApple OSS Distributionsecho '
263*4f1223e8SApple OSS Distributions#include <sys/param.h>
264*4f1223e8SApple OSS Distributions#include <sys/mount.h>
265*4f1223e8SApple OSS Distributions#include <sys/vm.h>
266*4f1223e8SApple OSS Distributions#include <sys/vnode.h>
267*4f1223e8SApple OSS Distributions
268*4f1223e8SApple OSS Distributionsstruct vnodeop_desc vop_default_desc = {
269*4f1223e8SApple OSS Distributions	.vdesc_offset = 0,
270*4f1223e8SApple OSS Distributions	.vdesc_name = "default",
271*4f1223e8SApple OSS Distributions	.vdesc_flags = 0,
272*4f1223e8SApple OSS Distributions	.vdesc_vp_offsets = NULL,
273*4f1223e8SApple OSS Distributions	.vdesc_vpp_offset = VDESC_NO_OFFSET,
274*4f1223e8SApple OSS Distributions	.vdesc_cred_offset = VDESC_NO_OFFSET,
275*4f1223e8SApple OSS Distributions	.vdesc_proc_offset = VDESC_NO_OFFSET,
276*4f1223e8SApple OSS Distributions	.vdesc_componentname_offset = VDESC_NO_OFFSET,
277*4f1223e8SApple OSS Distributions	.vdesc_context_offset = VDESC_NO_OFFSET,
278*4f1223e8SApple OSS Distributions	.vdesc_transports = NULL,
279*4f1223e8SApple OSS Distributions};
280*4f1223e8SApple OSS Distributions'
281*4f1223e8SApple OSS Distributions
282*4f1223e8SApple OSS Distributions# Body stuff
283*4f1223e8SApple OSS Distributionssed -e "$sed_prep" $src | $awk '
284*4f1223e8SApple OSS Distributionsfunction do_offset(typematch) {
285*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
286*4f1223e8SApple OSS Distributions		if (argtype[i] == typematch) {
287*4f1223e8SApple OSS Distributions			printf("\tVOPARG_OFFSETOF(struct %s_args, a_%s),\n",
288*4f1223e8SApple OSS Distributions				name, argname[i]);
289*4f1223e8SApple OSS Distributions			return i;
290*4f1223e8SApple OSS Distributions		};
291*4f1223e8SApple OSS Distributions	};
292*4f1223e8SApple OSS Distributions	print "\tVDESC_NO_OFFSET,";
293*4f1223e8SApple OSS Distributions	return -1;
294*4f1223e8SApple OSS Distributions}
295*4f1223e8SApple OSS Distributions
296*4f1223e8SApple OSS Distributionsfunction doit() {
297*4f1223e8SApple OSS Distributions	# Define offsets array
298*4f1223e8SApple OSS Distributions	printf("\nint %s_vp_offsets[] = {\n", name);
299*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
300*4f1223e8SApple OSS Distributions		if (argtype[i] == "struct vnode *") {
301*4f1223e8SApple OSS Distributions			printf ("\tVOPARG_OFFSETOF(struct %s_args,a_%s),\n",
302*4f1223e8SApple OSS Distributions				name, argname[i]);
303*4f1223e8SApple OSS Distributions		}
304*4f1223e8SApple OSS Distributions	}
305*4f1223e8SApple OSS Distributions	print "\tVDESC_NO_OFFSET";
306*4f1223e8SApple OSS Distributions	print "};";
307*4f1223e8SApple OSS Distributions	# Define F_desc
308*4f1223e8SApple OSS Distributions	printf("struct vnodeop_desc %s_desc = {\n", name);
309*4f1223e8SApple OSS Distributions	# offset
310*4f1223e8SApple OSS Distributions	printf ("\t0,\n");
311*4f1223e8SApple OSS Distributions	# printable name
312*4f1223e8SApple OSS Distributions	printf ("\t\"%s\",\n", name);
313*4f1223e8SApple OSS Distributions	# flags
314*4f1223e8SApple OSS Distributions	printf("\t0");
315*4f1223e8SApple OSS Distributions	vpnum = 0;
316*4f1223e8SApple OSS Distributions	for (i=0; i<argc; i++) {
317*4f1223e8SApple OSS Distributions		if (match(argtype[i], "struct vnode *") == 1) {
318*4f1223e8SApple OSS Distributions			if (willrele[i]) {
319*4f1223e8SApple OSS Distributions				if (argdir[i] ~ /OUT/) {
320*4f1223e8SApple OSS Distributions					printf(" | VDESC_VPP_WILLRELE");
321*4f1223e8SApple OSS Distributions				} else {
322*4f1223e8SApple OSS Distributions					printf(" | VDESC_VP%s_WILLRELE", vpnum);
323*4f1223e8SApple OSS Distributions				};
324*4f1223e8SApple OSS Distributions			}
325*4f1223e8SApple OSS Distributions		vpnum++;
326*4f1223e8SApple OSS Distributions		}
327*4f1223e8SApple OSS Distributions	}
328*4f1223e8SApple OSS Distributions	print ",";
329*4f1223e8SApple OSS Distributions	# vp offsets
330*4f1223e8SApple OSS Distributions	printf ("\t%s_vp_offsets,\n", name);
331*4f1223e8SApple OSS Distributions	# vpp (if any)
332*4f1223e8SApple OSS Distributions	do_offset("struct vnode **");
333*4f1223e8SApple OSS Distributions	# cred (if any)
334*4f1223e8SApple OSS Distributions	do_offset("kauth_credential_t");
335*4f1223e8SApple OSS Distributions	# proc (if any)
336*4f1223e8SApple OSS Distributions	do_offset("struct proc *");
337*4f1223e8SApple OSS Distributions	# componentname
338*4f1223e8SApple OSS Distributions	do_offset("struct componentname *");
339*4f1223e8SApple OSS Distributions	# transport layer information
340*4f1223e8SApple OSS Distributions	printf ("\tNULL,\n};\n");
341*4f1223e8SApple OSS Distributions}
342*4f1223e8SApple OSS DistributionsEND	{
343*4f1223e8SApple OSS Distributions	printf("\n/* Special cases: */\n");
344*4f1223e8SApple OSS Distributions	argc=1;
345*4f1223e8SApple OSS Distributions	argdir[0]="IN";
346*4f1223e8SApple OSS Distributions	argtype[0]="struct buf *";
347*4f1223e8SApple OSS Distributions	argname[0]="bp";
348*4f1223e8SApple OSS Distributions	willrele[0]=0;
349*4f1223e8SApple OSS Distributions	name="vop_strategy";
350*4f1223e8SApple OSS Distributions	doit();
351*4f1223e8SApple OSS Distributions	name="VNOP_BWRITE";
352*4f1223e8SApple OSS Distributions	doit();
353*4f1223e8SApple OSS Distributions}
354*4f1223e8SApple OSS Distributions'"$awk_parser" | sed -e "$space_elim"
355*4f1223e8SApple OSS Distributions
356*4f1223e8SApple OSS Distributions# End stuff
357*4f1223e8SApple OSS Distributionsecho '
358*4f1223e8SApple OSS Distributions/* End of special cases. */'
359*4f1223e8SApple OSS Distributions
360*4f1223e8SApple OSS Distributions# Add the vfs_op_descs array to the C file.
361*4f1223e8SApple OSS Distributions# Begin stuff
362*4f1223e8SApple OSS Distributionsecho '
363*4f1223e8SApple OSS Distributionsstruct vnodeop_desc *vfs_op_descs[] = {
364*4f1223e8SApple OSS Distributions	&vop_default_desc,	/* MUST BE FIRST */
365*4f1223e8SApple OSS Distributions	&vop_strategy_desc,	/* XXX: SPECIAL CASE */
366*4f1223e8SApple OSS Distributions	&VNOP_BWRITE_desc,	/* XXX: SPECIAL CASE */
367*4f1223e8SApple OSS Distributions'
368*4f1223e8SApple OSS Distributions
369*4f1223e8SApple OSS Distributions# Body stuff
370*4f1223e8SApple OSS Distributionssed -e "$sed_prep" $src | $awk '
371*4f1223e8SApple OSS Distributionsfunction doit() {
372*4f1223e8SApple OSS Distributions	printf("\t&%s_desc,\n", name);
373*4f1223e8SApple OSS Distributions}
374*4f1223e8SApple OSS Distributions'"$awk_parser"
375*4f1223e8SApple OSS Distributions
376*4f1223e8SApple OSS Distributions# End stuff
377*4f1223e8SApple OSS Distributionsecho '	NULL
378*4f1223e8SApple OSS Distributions};
379*4f1223e8SApple OSS Distributions'
380*4f1223e8SApple OSS Distributions
381*4f1223e8SApple OSS Distributionsexit 0
382*4f1223e8SApple OSS Distributions
383*4f1223e8SApple OSS Distributions# Local Variables:
384*4f1223e8SApple OSS Distributions# tab-width: 4
385*4f1223e8SApple OSS Distributions# End:
386