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