xref: /xnu-12377.41.6/bsd/dev/dtrace/scripts/io.d (revision bbb1b6f9e71b8cdde6e5cd6f4841f207dee3d828)
1*bbb1b6f9SApple OSS Distributions /*
2*bbb1b6f9SApple OSS Distributions  * Copyright (c) 2007 Apple, Inc. All rights reserved.
3*bbb1b6f9SApple OSS Distributions  *
4*bbb1b6f9SApple OSS Distributions  * @APPLE_LICENSE_HEADER_START@
5*bbb1b6f9SApple OSS Distributions  *
6*bbb1b6f9SApple OSS Distributions  * The contents of this file constitute Original Code as defined in and
7*bbb1b6f9SApple OSS Distributions  * are subject to the Apple Public Source License Version 1.1 (the
8*bbb1b6f9SApple OSS Distributions  * "License").  You may not use this file except in compliance with the
9*bbb1b6f9SApple OSS Distributions  * License.  Please obtain a copy of the License at
10*bbb1b6f9SApple OSS Distributions  * http://www.apple.com/publicsource and read it before using this file.
11*bbb1b6f9SApple OSS Distributions  *
12*bbb1b6f9SApple OSS Distributions  * This Original Code and all software distributed under the License are
13*bbb1b6f9SApple OSS Distributions  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14*bbb1b6f9SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15*bbb1b6f9SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16*bbb1b6f9SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
17*bbb1b6f9SApple OSS Distributions  * License for the specific language governing rights and limitations
18*bbb1b6f9SApple OSS Distributions  * under the License.
19*bbb1b6f9SApple OSS Distributions  *
20*bbb1b6f9SApple OSS Distributions  * @APPLE_LICENSE_HEADER_END@
21*bbb1b6f9SApple OSS Distributions  */
22*bbb1b6f9SApple OSS Distributions 
23*bbb1b6f9SApple OSS Distributions #pragma D depends_on library darwin.d
24*bbb1b6f9SApple OSS Distributions #pragma D depends_on module mach_kernel
25*bbb1b6f9SApple OSS Distributions #pragma D depends_on provider io
26*bbb1b6f9SApple OSS Distributions 
27*bbb1b6f9SApple OSS Distributions inline int B_WRITE = 0x0000;
28*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_WRITE
29*bbb1b6f9SApple OSS Distributions inline int B_READ = 0x0001;
30*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_READ
31*bbb1b6f9SApple OSS Distributions inline int B_ASYNC = 0x0002;
32*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_ASYNC
33*bbb1b6f9SApple OSS Distributions inline int B_NOCACHE = 0x0004;
34*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_NOCACHE
35*bbb1b6f9SApple OSS Distributions inline int B_DELWRI = 0x0008;
36*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_DELWRI
37*bbb1b6f9SApple OSS Distributions inline int B_LOCKED = 0x0010;
38*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_LOCKED
39*bbb1b6f9SApple OSS Distributions inline int B_PHYS = 0x0020;
40*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_PHYS
41*bbb1b6f9SApple OSS Distributions inline int B_CLUSTER = 0x0040;
42*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_CLUSTER
43*bbb1b6f9SApple OSS Distributions inline int B_PAGEIO = 0x0080;
44*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_PAGEIO
45*bbb1b6f9SApple OSS Distributions inline int B_META = 0x0100;
46*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_META
47*bbb1b6f9SApple OSS Distributions inline int B_RAW = 0x0200;
48*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_RAW
49*bbb1b6f9SApple OSS Distributions inline int B_FUA = 0x0400;
50*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_FUA
51*bbb1b6f9SApple OSS Distributions inline int B_PASSIVE = 0x0800;
52*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" B_PASSIVE
53*bbb1b6f9SApple OSS Distributions 
54*bbb1b6f9SApple OSS Distributions typedef struct bufinfo {
55*bbb1b6f9SApple OSS Distributions 	int b_flags;			/* buffer status */
56*bbb1b6f9SApple OSS Distributions 	size_t b_bcount;		/* number of bytes */
57*bbb1b6f9SApple OSS Distributions 	caddr_t b_addr;			/* buffer address */
58*bbb1b6f9SApple OSS Distributions 	uint64_t b_lblkno;		/* block # on device */
59*bbb1b6f9SApple OSS Distributions 	uint64_t b_blkno;		/* expanded block # on device */
60*bbb1b6f9SApple OSS Distributions 	size_t b_resid;			/* # of bytes not transferred */
61*bbb1b6f9SApple OSS Distributions 	size_t b_bufsize;		/* size of allocated buffer */
62*bbb1b6f9SApple OSS Distributions 	caddr_t b_iodone;		/* I/O completion routine */
63*bbb1b6f9SApple OSS Distributions 	int b_error;			/* expanded error field */
64*bbb1b6f9SApple OSS Distributions 	dev_t b_edev;			/* extended device */
65*bbb1b6f9SApple OSS Distributions } bufinfo_t;
66*bbb1b6f9SApple OSS Distributions 
67*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
68*bbb1b6f9SApple OSS Distributions translator bufinfo_t < struct buf *B > {
69*bbb1b6f9SApple OSS Distributions 	b_flags = B->b_flags;
70*bbb1b6f9SApple OSS Distributions 	b_addr = (caddr_t)B->b_datap;
71*bbb1b6f9SApple OSS Distributions 	b_bcount = B->b_bcount;
72*bbb1b6f9SApple OSS Distributions 	b_lblkno = B->b_lblkno;
73*bbb1b6f9SApple OSS Distributions 	b_blkno = B->b_blkno;
74*bbb1b6f9SApple OSS Distributions 	b_resid = B->b_resid;
75*bbb1b6f9SApple OSS Distributions 	b_bufsize = B->b_bufsize;
76*bbb1b6f9SApple OSS Distributions 	b_iodone = (caddr_t)B->b_iodone;
77*bbb1b6f9SApple OSS Distributions 	b_error = B->b_error;
78*bbb1b6f9SApple OSS Distributions 	b_edev = B->b_dev;
79*bbb1b6f9SApple OSS Distributions };
80*bbb1b6f9SApple OSS Distributions 
81*bbb1b6f9SApple OSS Distributions typedef struct devinfo {
82*bbb1b6f9SApple OSS Distributions 	int dev_major;			/* major number */
83*bbb1b6f9SApple OSS Distributions 	int dev_minor;			/* minor number */
84*bbb1b6f9SApple OSS Distributions 	int dev_instance;		/* instance number */
85*bbb1b6f9SApple OSS Distributions 	string dev_name;		/* name of device */
86*bbb1b6f9SApple OSS Distributions 	string dev_statname;		/* name of device + instance/minor */
87*bbb1b6f9SApple OSS Distributions 	string dev_pathname;		/* pathname of device */
88*bbb1b6f9SApple OSS Distributions } devinfo_t;
89*bbb1b6f9SApple OSS Distributions 
90*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
91*bbb1b6f9SApple OSS Distributions translator devinfo_t < struct buf *B > {
92*bbb1b6f9SApple OSS Distributions 	dev_major = getmajor(B->b_dev);
93*bbb1b6f9SApple OSS Distributions 	dev_minor = getminor(B->b_dev);
94*bbb1b6f9SApple OSS Distributions 	dev_instance = getminor(B->b_dev);
95*bbb1b6f9SApple OSS Distributions 	dev_name = "??"; /* XXX */
96*bbb1b6f9SApple OSS Distributions 	dev_statname = "??"; /* XXX */
97*bbb1b6f9SApple OSS Distributions 	dev_pathname = "??"; /* XXX */
98*bbb1b6f9SApple OSS Distributions };
99*bbb1b6f9SApple OSS Distributions 
100*bbb1b6f9SApple OSS Distributions typedef off_t offset_t;
101*bbb1b6f9SApple OSS Distributions 
102*bbb1b6f9SApple OSS Distributions typedef struct fileinfo {
103*bbb1b6f9SApple OSS Distributions 	string fi_name;			/* name (basename of fi_pathname) */
104*bbb1b6f9SApple OSS Distributions 	string fi_dirname;		/* directory (dirname of fi_pathname) */
105*bbb1b6f9SApple OSS Distributions 	string fi_pathname;		/* full pathname */
106*bbb1b6f9SApple OSS Distributions 	offset_t fi_offset;		/* offset within file */
107*bbb1b6f9SApple OSS Distributions 	string fi_fs;			/* filesystem */
108*bbb1b6f9SApple OSS Distributions 	string fi_mount;		/* mount point of file system */
109*bbb1b6f9SApple OSS Distributions 	int fi_oflags;          /* open(2) flags for file descriptor */
110*bbb1b6f9SApple OSS Distributions } fileinfo_t;
111*bbb1b6f9SApple OSS Distributions 
112*bbb1b6f9SApple OSS Distributions #pragma D binding "1.0" translator
113*bbb1b6f9SApple OSS Distributions translator fileinfo_t < struct buf *B > {
114*bbb1b6f9SApple OSS Distributions 	fi_name = B->b_vp->v_name == NULL ? "<unknown (NULL v_name)>" : B->b_vp->v_name;
115*bbb1b6f9SApple OSS Distributions 
116*bbb1b6f9SApple OSS Distributions 	fi_dirname = B->b_vp->v_parent == NULL ? "<unknown (NULL v_parent)>" :
117*bbb1b6f9SApple OSS Distributions 			(B->b_vp->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" : B->b_vp->v_parent->v_name);
118*bbb1b6f9SApple OSS Distributions 
119*bbb1b6f9SApple OSS Distributions 	fi_pathname = strjoin("??/",
120*bbb1b6f9SApple OSS Distributions 			strjoin(B->b_vp->v_parent == NULL ? "<unknown (NULL v_parent)>" :
121*bbb1b6f9SApple OSS Distributions 				(B->b_vp->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" : B->b_vp->v_parent->v_name),
122*bbb1b6f9SApple OSS Distributions 				strjoin("/",
123*bbb1b6f9SApple OSS Distributions 					B->b_vp->v_name == NULL ? "<unknown (NULL v_name)>" : B->b_vp->v_name)));
124*bbb1b6f9SApple OSS Distributions 
125*bbb1b6f9SApple OSS Distributions 	fi_offset = B->b_upl == NULL ? -1 : ((upl_t)B->b_upl)->u_offset;
126*bbb1b6f9SApple OSS Distributions 
127*bbb1b6f9SApple OSS Distributions 	fi_fs = B->b_vp->v_mount->mnt_vtable->vfc_name;
128*bbb1b6f9SApple OSS Distributions 
129*bbb1b6f9SApple OSS Distributions 	fi_mount = B->b_vp->v_mount->mnt_vnodecovered == NULL ? "/" : B->b_vp->v_mount->mnt_vnodecovered->v_name;
130*bbb1b6f9SApple OSS Distributions 
131*bbb1b6f9SApple OSS Distributions 	fi_oflags = 0;
132*bbb1b6f9SApple OSS Distributions };
133*bbb1b6f9SApple OSS Distributions 
134*bbb1b6f9SApple OSS Distributions /*
135*bbb1b6f9SApple OSS Distributions  * The following inline constants can be used to examine fi_oflags when using
136*bbb1b6f9SApple OSS Distributions  * the fds[] array or a translated fileglob *.  Note that the various open
137*bbb1b6f9SApple OSS Distributions  * flags behave as a bit-field *except* for O_RDONLY, O_WRONLY, and O_RDWR.
138*bbb1b6f9SApple OSS Distributions  * To test the open mode, you write code similar to that used with the fcntl(2)
139*bbb1b6f9SApple OSS Distributions  * F_GET[X]FL command, such as: if ((fi_oflags & O_ACCMODE) == O_WRONLY).
140*bbb1b6f9SApple OSS Distributions  */
141*bbb1b6f9SApple OSS Distributions inline int O_ACCMODE = 0x0003;
142*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_ACCMODE
143*bbb1b6f9SApple OSS Distributions 
144*bbb1b6f9SApple OSS Distributions inline int O_RDONLY = 0x0000;
145*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_RDONLY
146*bbb1b6f9SApple OSS Distributions inline int O_WRONLY = 0x0001;
147*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_WRONLY
148*bbb1b6f9SApple OSS Distributions inline int O_RDWR = 0x0002;
149*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_RDWR
150*bbb1b6f9SApple OSS Distributions 
151*bbb1b6f9SApple OSS Distributions inline int O_NONBLOCK = 0x0004;
152*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_NONBLOCK
153*bbb1b6f9SApple OSS Distributions inline int O_APPEND = 0x0008;
154*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_APPEND
155*bbb1b6f9SApple OSS Distributions inline int O_SHLOCK = 0x0010;
156*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_SHLOCK
157*bbb1b6f9SApple OSS Distributions inline int O_EXLOCK = 0x0020;
158*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_EXLOCK
159*bbb1b6f9SApple OSS Distributions inline int O_ASYNC = 0x0040;
160*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_ASYNC
161*bbb1b6f9SApple OSS Distributions inline int O_SYNC = 0x0080;
162*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_SYNC
163*bbb1b6f9SApple OSS Distributions inline int O_NOFOLLOW = 0x0100;
164*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_NOFOLLOW
165*bbb1b6f9SApple OSS Distributions inline int O_CREAT = 0x0200;
166*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_CREAT
167*bbb1b6f9SApple OSS Distributions inline int O_TRUNC = 0x0400;
168*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_TRUNC
169*bbb1b6f9SApple OSS Distributions inline int O_EXCL = 0x0800;
170*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_EXCL
171*bbb1b6f9SApple OSS Distributions inline int O_RESOLVE_BENEATH = 0x1000;
172*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_RESOLVE_BENEATH
173*bbb1b6f9SApple OSS Distributions inline int O_EVTONLY = 0x8000;
174*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_EVTONLY
175*bbb1b6f9SApple OSS Distributions inline int O_NOCTTY = 0x20000;
176*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_NOCTTY
177*bbb1b6f9SApple OSS Distributions inline int O_DIRECTORY = 0x100000;
178*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_DIRECTORY
179*bbb1b6f9SApple OSS Distributions inline int O_SYMLINK = 0x200000;
180*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_SYMLINK
181*bbb1b6f9SApple OSS Distributions inline int O_NOFOLLOW_ANY = 0x20000000;
182*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" O_NOFOLLOW_ANY
183*bbb1b6f9SApple OSS Distributions 
184*bbb1b6f9SApple OSS Distributions /* From bsd/sys/file_internal.h */
185*bbb1b6f9SApple OSS Distributions inline int DTYPE_VNODE = 1;
186*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_VNODE
187*bbb1b6f9SApple OSS Distributions inline int DTYPE_SOCKET = 2;
188*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_SOCKET
189*bbb1b6f9SApple OSS Distributions inline int DTYPE_PSXSHM = 3;
190*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_PSXSHM
191*bbb1b6f9SApple OSS Distributions inline int DTYPE_PSXSEM = 4;
192*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_PSXSEM
193*bbb1b6f9SApple OSS Distributions inline int DTYPE_KQUEUE = 5;
194*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_KQUEUE
195*bbb1b6f9SApple OSS Distributions inline int DTYPE_PIPE = 6;
196*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_PIPE
197*bbb1b6f9SApple OSS Distributions inline int DTYPE_FSEVENTS = 7;
198*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" DTYPE_FSEVENTS
199*bbb1b6f9SApple OSS Distributions 
200*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" translator
201*bbb1b6f9SApple OSS Distributions translator fileinfo_t < struct fileglob *F > {
202*bbb1b6f9SApple OSS Distributions 	fi_name = (F == NULL) ? "<none>" :
203*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_VNODE ?
204*bbb1b6f9SApple OSS Distributions 			((struct vnode *)F->fg_data)->v_name == NULL ? "<unknown (NULL v_name)>" : ((struct vnode *)F->fg_data)->v_name :
205*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_SOCKET ? "<socket>" :
206*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_PSXSHM ? "<shared memory>" :
207*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_PSXSEM ? "<semaphore>" :
208*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_KQUEUE ? "<kqueue>" :
209*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_PIPE ? "<pipe>" :
210*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type == DTYPE_FSEVENTS ? "<fsevents>" : "<unknown (BAD fo_type)>";
211*bbb1b6f9SApple OSS Distributions 
212*bbb1b6f9SApple OSS Distributions 	fi_dirname = (F == NULL) ? "<none>" :
213*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type != DTYPE_VNODE ? "<unknown (not a vnode)>" :
214*bbb1b6f9SApple OSS Distributions 			((struct vnode *)F->fg_data)->v_parent == NULL ? "<unknown (NULL v_parent)>" :
215*bbb1b6f9SApple OSS Distributions 			(((struct vnode *)F->fg_data)->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" :
216*bbb1b6f9SApple OSS Distributions 			 ((struct vnode *)F->fg_data)->v_parent->v_name);
217*bbb1b6f9SApple OSS Distributions 
218*bbb1b6f9SApple OSS Distributions 	fi_pathname = (F == NULL) ? "<none>" :
219*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type != DTYPE_VNODE ? "<unknown (not a vnode)>" :
220*bbb1b6f9SApple OSS Distributions 			strjoin("??/",
221*bbb1b6f9SApple OSS Distributions 			strjoin(((struct vnode *)F->fg_data)->v_parent == NULL ? "<unknown (NULL v_parent)>" :
222*bbb1b6f9SApple OSS Distributions 				(((struct vnode *)F->fg_data)->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" :
223*bbb1b6f9SApple OSS Distributions 				 ((struct vnode *)F->fg_data)->v_parent->v_name),
224*bbb1b6f9SApple OSS Distributions 				strjoin("/",
225*bbb1b6f9SApple OSS Distributions 					((struct vnode *)F->fg_data)->v_name == NULL ? "<unknown (NULL v_name)>" :
226*bbb1b6f9SApple OSS Distributions 					((struct vnode *)F->fg_data)->v_name)));
227*bbb1b6f9SApple OSS Distributions 
228*bbb1b6f9SApple OSS Distributions 	fi_offset = (F == NULL) ? 0 :
229*bbb1b6f9SApple OSS Distributions 			F->fg_offset;
230*bbb1b6f9SApple OSS Distributions 
231*bbb1b6f9SApple OSS Distributions 	fi_fs = (F == NULL) ? "<none>" :
232*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type != DTYPE_VNODE ? "<unknown (not a vnode)>" :
233*bbb1b6f9SApple OSS Distributions 			((struct vnode *)F->fg_data)->v_mount->mnt_vtable->vfc_name;
234*bbb1b6f9SApple OSS Distributions 
235*bbb1b6f9SApple OSS Distributions 	fi_mount = (F == NULL) ? "<none>" :
236*bbb1b6f9SApple OSS Distributions 		F->fg_ops->fo_type != DTYPE_VNODE ? "<unknown (not a vnode)>" :
237*bbb1b6f9SApple OSS Distributions 			((struct vnode *)F->fg_data)->v_mount->mnt_vnodecovered == NULL ? "/" :
238*bbb1b6f9SApple OSS Distributions 			((struct vnode *)F->fg_data)->v_mount->mnt_vnodecovered->v_name;
239*bbb1b6f9SApple OSS Distributions 
240*bbb1b6f9SApple OSS Distributions 	fi_oflags = (F == NULL) ? 0 :
241*bbb1b6f9SApple OSS Distributions 			F->fg_flag - 1; /* Subtract one to map FREAD/FWRITE bitfield to O_RD/WR open() flags. */
242*bbb1b6f9SApple OSS Distributions };
243*bbb1b6f9SApple OSS Distributions 
244*bbb1b6f9SApple OSS Distributions inline fileinfo_t fds[int fd] = xlate <fileinfo_t> (
245*bbb1b6f9SApple OSS Distributions 	(fd >= 0 && fd < curproc->p_fd.fd_afterlast) ?
246*bbb1b6f9SApple OSS Distributions 		(struct fileglob *)(curproc->p_fd.fd_ofiles[fd]->fp_glob) :
247*bbb1b6f9SApple OSS Distributions 		(struct fileglob *)NULL);
248*bbb1b6f9SApple OSS Distributions 
249*bbb1b6f9SApple OSS Distributions #pragma D attributes Stable/Stable/Common fds
250*bbb1b6f9SApple OSS Distributions #pragma D binding "1.1" fds
251*bbb1b6f9SApple OSS Distributions 
252*bbb1b6f9SApple OSS Distributions #pragma D binding "1.2" translator
253*bbb1b6f9SApple OSS Distributions translator fileinfo_t < struct vnode *V > {
254*bbb1b6f9SApple OSS Distributions 	fi_name = V->v_name == NULL ? "<unknown (NULL v_name)>" : V->v_name;
255*bbb1b6f9SApple OSS Distributions 
256*bbb1b6f9SApple OSS Distributions 	fi_dirname = V->v_parent == NULL ? "<unknown (NULL v_parent)>" :
257*bbb1b6f9SApple OSS Distributions 			(V->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" : V->v_parent->v_name);
258*bbb1b6f9SApple OSS Distributions 
259*bbb1b6f9SApple OSS Distributions 	fi_pathname = strjoin("??/",
260*bbb1b6f9SApple OSS Distributions 			strjoin(V->v_parent == NULL ? "<unknown (NULL v_parent)>" :
261*bbb1b6f9SApple OSS Distributions 				(V->v_parent->v_name == NULL ? "<unknown (NULL v_name)>" : V->v_parent->v_name),
262*bbb1b6f9SApple OSS Distributions 				strjoin("/",
263*bbb1b6f9SApple OSS Distributions 					V->v_name == NULL ? "<unknown (NULL v_name)>" : V->v_name)));
264*bbb1b6f9SApple OSS Distributions 
265*bbb1b6f9SApple OSS Distributions 	fi_fs = V->v_mount->mnt_vtable->vfc_name;
266*bbb1b6f9SApple OSS Distributions 
267*bbb1b6f9SApple OSS Distributions 	fi_mount = V->v_mount->mnt_vnodecovered == NULL ? "/" : V->v_mount->mnt_vnodecovered->v_name;
268*bbb1b6f9SApple OSS Distributions };
269*bbb1b6f9SApple OSS Distributions 
270