1 | /*␊ |
2 | * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.␊ |
7 | * ␊ |
8 | * This file contains Original Code and/or Modifications of Original Code␊ |
9 | * as defined in and that are subject to the Apple Public Source License␊ |
10 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
11 | * compliance with the License. Please obtain a copy of the License at␊ |
12 | * http://www.opensource.apple.com/apsl/ and read it before using this␊ |
13 | * file.␊ |
14 | * ␊ |
15 | * The Original Code and all software distributed under the License are␊ |
16 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
17 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
18 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
19 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
20 | * Please see the License for the specific language governing rights and␊ |
21 | * limitations under the License.␊ |
22 | * ␊ |
23 | * @APPLE_LICENSE_HEADER_END@␊ |
24 | */␊ |
25 | /*␉$NetBSD: ntfs.h,v 1.9 1999/10/31 19:45:26 jdolecek Exp $␉*/␊ |
26 | ␊ |
27 | /*-␊ |
28 | * Copyright (c) 1998, 1999 Semen Ustimenko␊ |
29 | * All rights reserved.␊ |
30 | *␊ |
31 | * Redistribution and use in source and binary forms, with or without␊ |
32 | * modification, are permitted provided that the following conditions␊ |
33 | * are met:␊ |
34 | * 1. Redistributions of source code must retain the above copyright␊ |
35 | * notice, this list of conditions and the following disclaimer.␊ |
36 | * 2. Redistributions in binary form must reproduce the above copyright␊ |
37 | * notice, this list of conditions and the following disclaimer in the␊ |
38 | * documentation and/or other materials provided with the distribution.␊ |
39 | *␊ |
40 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND␊ |
41 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE␊ |
42 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE␊ |
43 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE␊ |
44 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL␊ |
45 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS␊ |
46 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)␊ |
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT␊ |
48 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY␊ |
49 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF␊ |
50 | * SUCH DAMAGE.␊ |
51 | *␊ |
52 | * $FreeBSD: src/sys/fs/ntfs/ntfs.h,v 1.14 2001/11/27 00:18:33 jhb Exp $␊ |
53 | */␊ |
54 | ␊ |
55 | /*#define NTFS_DEBUG 1*/␊ |
56 | ␊ |
57 | #ifdef APPLE␊ |
58 | /* We're using FreeBSD style byte order macros in the source. */␊ |
59 | #include <libkern/OSByteOrder.h>␊ |
60 | #define le16toh(x)␉␉OSSwapLittleToHostInt16(x)␊ |
61 | #define le32toh(x)␉␉OSSwapLittleToHostInt32(x)␊ |
62 | #define le64toh(x)␉␉OSSwapLittleToHostInt64(x)␊ |
63 | ␊ |
64 | /* FreeBSD mutexes correspond to Darwin's simple locks */␊ |
65 | #define mtx_lock(lock)␉␉simple_lock(lock)␊ |
66 | #define mtx_unlock(lock)␉simple_unlock(lock)␊ |
67 | #define mtx_destroy(lock)␉/* Nothing. */␊ |
68 | ␊ |
69 | #define lockdestroy(lock)␉/* Nothing. */␊ |
70 | ␊ |
71 | #endif␊ |
72 | ␊ |
73 | typedef u_int64_t cn_t;␊ |
74 | typedef u_int16_t wchar;␊ |
75 | ␊ |
76 | #pragma pack(1)␊ |
77 | ␊ |
78 | #define BBSIZE 1024␊ |
79 | #define␉BBOFF ((off_t)(0))␊ |
80 | #define␉BBLOCK ((daddr_t)(0))␊ |
81 | #define␉NTFS_MFTINO 0␊ |
82 | #define␉NTFS_VOLUMEINO␉␉3␊ |
83 | #define␉NTFS_ATTRDEFINO␉␉4␊ |
84 | #define␉NTFS_ROOTINO␉␉5␊ |
85 | #define␉NTFS_BITMAPINO␉␉6␊ |
86 | #define␉NTFS_BOOTINO␉␉7␊ |
87 | #define␉NTFS_BADCLUSINO␉␉8␊ |
88 | #define␉NTFS_UPCASEINO␉␉10␊ |
89 | #define NTFS_MAXFILENAME␉255␊ |
90 | ␊ |
91 | struct fixuphdr {␊ |
92 | ␉u_int32_t fh_magic;␊ |
93 | ␉u_int16_t fh_foff;␊ |
94 | ␉u_int16_t fh_fnum;␊ |
95 | };␊ |
96 | ␊ |
97 | #define NTFS_AF_INRUN␉0x00000001␊ |
98 | ␊ |
99 | struct attrhdr {␊ |
100 | ␉u_int32_t a_type;␊ |
101 | ␉u_int32_t reclen;␊ |
102 | ␉u_int8_t a_flag;␊ |
103 | ␉u_int8_t a_namelen;␊ |
104 | ␉u_int8_t a_nameoff;␊ |
105 | ␉u_int8_t reserved1;␊ |
106 | ␉u_int8_t a_compression;␊ |
107 | ␉u_int8_t reserved2;␊ |
108 | ␉u_int16_t a_index;␊ |
109 | };␊ |
110 | ␊ |
111 | #define NTFS_A_STD 0x10␊ |
112 | #define NTFS_A_ATTRLIST 0x20␊ |
113 | #define NTFS_A_NAME 0x30␊ |
114 | #define NTFS_A_VOLUMENAME␉0x60␊ |
115 | #define NTFS_A_DATA 0x80␊ |
116 | #define␉NTFS_A_INDXROOT 0x90␊ |
117 | #define␉NTFS_A_INDX 0xA0␊ |
118 | #define NTFS_A_INDXBITMAP 0xB0␊ |
119 | ␊ |
120 | #define NTFS_MAXATTRNAME␉255␊ |
121 | ␊ |
122 | struct attr {␊ |
123 | ␉struct attrhdr a_hdr;␊ |
124 | ␉union {␊ |
125 | ␉␉struct {␊ |
126 | ␉␉␉u_int16_t a_datalen;␊ |
127 | ␉␉␉u_int16_t reserved1;␊ |
128 | ␉␉␉u_int16_t a_dataoff;␊ |
129 | ␉␉␉u_int16_t a_indexed;␊ |
130 | ␉␉} a_S_r;␊ |
131 | ␉␉struct {␊ |
132 | ␉␉␉cn_t a_vcnstart;␊ |
133 | ␉␉␉cn_t a_vcnend;␊ |
134 | ␉␉␉u_int16_t a_dataoff;␊ |
135 | ␉␉␉u_int16_t a_compressalg;␊ |
136 | ␉␉␉u_int32_t reserved1;␊ |
137 | ␉␉␉u_int64_t a_allocated;␊ |
138 | ␉␉␉u_int64_t a_datalen;␊ |
139 | ␉␉␉u_int64_t a_initialized;␊ |
140 | ␉␉} a_S_nr;␊ |
141 | ␉} a_S;␊ |
142 | };␊ |
143 | #define a_r a_S.a_S_r␊ |
144 | #define a_nr␉a_S.a_S_nr␊ |
145 | ␊ |
146 | typedef struct {␊ |
147 | ␉u_int64_t t_create;␊ |
148 | ␉u_int64_t t_write;␊ |
149 | ␉u_int64_t t_mftwrite;␊ |
150 | ␉u_int64_t t_access;␊ |
151 | } ntfs_times_t;␊ |
152 | ␊ |
153 | #define NTFS_FFLAG_RDONLY 0x01LL␊ |
154 | #define NTFS_FFLAG_HIDDEN 0x02LL␊ |
155 | #define NTFS_FFLAG_SYSTEM 0x04LL␊ |
156 | #define NTFS_FFLAG_ARCHIVE 0x20LL␊ |
157 | #define NTFS_FFLAG_COMPRESSED␉0x0800LL␊ |
158 | #define NTFS_FFLAG_DIR 0x10000000LL␊ |
159 | ␊ |
160 | struct attr_name {␊ |
161 | ␉u_int32_t n_pnumber;␉/* Parent ntnode */␊ |
162 | ␉u_int32_t reserved;␊ |
163 | ␉ntfs_times_t n_times;␊ |
164 | ␉u_int64_t n_size;␊ |
165 | ␉u_int64_t n_attrsz;␊ |
166 | ␉u_int64_t n_flag;␊ |
167 | ␉u_int8_t n_namelen;␊ |
168 | ␉u_int8_t n_nametype;␊ |
169 | ␉u_int16_t n_name[1];␊ |
170 | };␊ |
171 | ␊ |
172 | #define NTFS_IRFLAG_INDXALLOC␉0x00000001␊ |
173 | struct attr_indexroot {␊ |
174 | ␉u_int32_t ir_unkn1;␉/* attribute type (0x30 for $FILE_NAME) */␊ |
175 | ␉u_int32_t ir_unkn2;␉/* collation rule (0x01 for file names) */␊ |
176 | ␉u_int32_t ir_size;␉/* size of index allocation entry */␊ |
177 | ␉u_int32_t ir_unkn3;␉/* clusters per index record, and 3 bytes padding */␊ |
178 | ␉u_int32_t ir_unkn4;␉/* (offset to first index entry?) always 0x10 */␊ |
179 | ␉u_int32_t ir_datalen;␉/* (total size of index enties?) sizeof something */␊ |
180 | ␉u_int32_t ir_allocated;␉/* (allocated size of index entries?) */␊ |
181 | ␉u_int8_t ␉ir_flag;␉/* 1=index allocation needed (large index) */␊ |
182 | u_int8_t ir_pad1;␉/* padding */␊ |
183 | ␉u_int16_t ir_pad2;␉/* padding */␊ |
184 | };␊ |
185 | ␊ |
186 | struct attr_attrlist {␊ |
187 | ␉u_int32_t al_type;␉/* Attribute type */␊ |
188 | ␉u_int16_t reclen;␉␉/* length of this entry */␊ |
189 | ␉u_int8_t al_namelen;␉/* Attribute name len */␊ |
190 | ␉u_int8_t al_nameoff;␉/* Name offset from entry start */␊ |
191 | ␉u_int64_t al_vcnstart;␉/* VCN number */␊ |
192 | ␉u_int32_t al_inumber;␉/* Parent ntnode */␊ |
193 | ␉u_int32_t reserved;␊ |
194 | ␉u_int16_t al_index;␉/* Attribute index in MFT record */␊ |
195 | ␉u_int16_t al_name[1];␉/* Name */␊ |
196 | };␊ |
197 | ␊ |
198 | #define␉NTFS_INDXMAGIC␉(u_int32_t)(0x58444E49)␊ |
199 | struct attr_indexalloc {␊ |
200 | ␉struct fixuphdr ia_fixup;␊ |
201 | ␉u_int64_t unknown1;␊ |
202 | ␉cn_t ia_bufcn;␊ |
203 | ␉u_int16_t ia_hdrsize;␊ |
204 | ␉u_int16_t unknown2;␊ |
205 | ␉u_int32_t ia_inuse;␊ |
206 | ␉u_int32_t ia_allocated;␊ |
207 | };␊ |
208 | ␊ |
209 | #define␉NTFS_IEFLAG_SUBNODE␉0x00000001␊ |
210 | #define␉NTFS_IEFLAG_LAST␉0x00000002␊ |
211 | ␊ |
212 | struct attr_indexentry {␊ |
213 | ␉u_int32_t ie_number;␊ |
214 | ␉u_int32_t unknown1;␊ |
215 | ␉u_int16_t reclen;␊ |
216 | ␉u_int16_t ie_size;␊ |
217 | ␉u_int32_t ie_flag;/* 1 - has subnodes, 2 - last */␊ |
218 | ␉u_int32_t ie_fpnumber;␊ |
219 | ␉u_int32_t unknown2;␊ |
220 | ␉ntfs_times_t ie_ftimes;␊ |
221 | ␉u_int64_t ie_fallocated;␊ |
222 | ␉u_int64_t ie_fsize;␊ |
223 | ␉u_int32_t ie_fflag;␊ |
224 | u_int32_t unknown3;␉/* used by reparse points and external attributes? */␊ |
225 | ␉u_int8_t ie_fnamelen;␊ |
226 | ␉u_int8_t ie_fnametype;␊ |
227 | ␉wchar ie_fname[NTFS_MAXFILENAME];␊ |
228 | ␉/* cn_t␉␉ie_bufcn;␉ buffer with subnodes */␊ |
229 | };␊ |
230 | ␊ |
231 | #define␉NTFS_FILEMAGIC␉(u_int32_t)(0x454C4946)␊ |
232 | #define␉NTFS_FRFLAG_DIR␉0x0002␊ |
233 | struct filerec {␊ |
234 | ␉struct fixuphdr fr_fixup;␊ |
235 | ␉u_int8_t reserved[8];␊ |
236 | ␉u_int16_t fr_seqnum;␉/* Sequence number */␊ |
237 | ␉u_int16_t fr_nlink;␊ |
238 | ␉u_int16_t fr_attroff;␉/* offset to attributes */␊ |
239 | ␉u_int16_t fr_flags;␉/* 1-nonresident attr, 2-directory */␊ |
240 | ␉u_int32_t fr_size;/* hdr + attributes */␊ |
241 | ␉u_int32_t fr_allocated;␉/* allocated length of record */␊ |
242 | ␉u_int64_t fr_mainrec;␉/* main record */␊ |
243 | ␉u_int16_t fr_attrnum;␉/* maximum attr number + 1 ??? */␊ |
244 | };␊ |
245 | ␊ |
246 | #define␉NTFS_ATTRNAME_MAXLEN␉0x40␊ |
247 | #define␉NTFS_ADFLAG_NONRES 0x0080␉/* Attrib can be non resident */␊ |
248 | #define␉NTFS_ADFLAG_INDEX 0x0002␉/* Attrib can be indexed */␊ |
249 | struct attrdef {␊ |
250 | ␉wchar␉␉ad_name[NTFS_ATTRNAME_MAXLEN];␊ |
251 | ␉u_int32_t␉ad_type;␊ |
252 | ␉u_int32_t␉reserved1[2];␊ |
253 | ␉u_int32_t␉ad_flag;␊ |
254 | ␉u_int64_t␉ad_minlen;␊ |
255 | ␉u_int64_t␉ad_maxlen;␉/* -1 for nonlimited */␊ |
256 | };␊ |
257 | ␊ |
258 | struct ntvattrdef {␊ |
259 | ␉char␉␉ad_name[0x40];␊ |
260 | ␉int ad_namelen;␊ |
261 | ␉u_int32_t␉ad_type;␊ |
262 | };␊ |
263 | ␊ |
264 | #define␉NTFS_BBID␉"NTFS "␊ |
265 | #define␉NTFS_BBIDLEN␉8␊ |
266 | struct bootfile {␊ |
267 | ␉u_int8_t reserved1[3];␉/* asm jmp near ... */␊ |
268 | ␉u_int8_t bf_sysid[8];␉/* 'NTFS ' */␊ |
269 | ␉u_int16_t bf_bps;␉␉/* bytes per sector */␊ |
270 | ␉u_int8_t bf_spc;␉␉/* sectors per cluster */␊ |
271 | ␉u_int8_t reserved2[7];␉/* unused (zeroed) */␊ |
272 | ␉u_int8_t bf_media;␉/* media desc. (0xF8) */␊ |
273 | ␉u_int8_t reserved3[2]; /* always 0 */␊ |
274 | ␉u_int16_t bf_spt;␉␉/* sectors per track */␊ |
275 | ␉u_int16_t bf_heads;␉/* number of heads */␊ |
276 | u_int32_t bf_hidsecs; /* hidden sectors */␊ |
277 | ␉u_int8_t reserver4[8]; /* not used by NTFS (0x00000000) */␊ |
278 | ␉u_int64_t bf_spv;␉␉/* sectors per volume (total) */␊ |
279 | ␉cn_t bf_mftcn;␉/* $MFT cluster number */␊ |
280 | ␉cn_t bf_mftmirrcn;␉/* $MFTMirr cn */␊ |
281 | ␉u_int8_t bf_mftrecsz;␉/* MFT record size (clust) */␊ |
282 | /* 0xF6 inducates 1/4 */␊ |
283 | u_int8_t reserved5[3];␊ |
284 | ␉u_int8_t bf_ibsz;␉/* index buffer size */␊ |
285 | u_int8_t reserved6[3]; /* not used by NTFS (0x000000) */␊ |
286 | ␉u_int64_t bf_volsn;␉/* volume ser. num. */␊ |
287 | u_int32_t bf_crc32; /* checksum */␊ |
288 | };␊ |
289 | ␊ |
290 | /*␊ |
291 | * Darwin's ntfs.util needs to include this file to get definitions␊ |
292 | * for the on-disk structures. It doesn't need the ntfsmount structure.␊ |
293 | * In fact, since it doesn't #define KERNEL, the struct netexport below␊ |
294 | * won't be defined.␊ |
295 | *␊ |
296 | * So, I'm using #ifdef KERNEL around the things that are only relevant␊ |
297 | * to the in-kernel implementation.␊ |
298 | *␊ |
299 | |
300 | * invent a different conditional here.␊ |
301 | */␊ |
302 | #ifdef KERNEL␊ |
303 | ␊ |
304 | #define␉NTFS_SYSNODESNUM␉0x0B␊ |
305 | struct ntfsmount {␊ |
306 | ␉struct mount *ntm_mountp;␉/* filesystem vfs structure */␊ |
307 | ␉struct bootfile ntm_bootfile;␊ |
308 | ␉dev_t ntm_dev;␉/* device mounted */␊ |
309 | ␉struct vnode *ntm_devvp;␉/* block device mounted vnode */␊ |
310 | ␉struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];␊ |
311 | ␉u_int32_t ntm_bpmftrec;␊ |
312 | ␉uid_t ntm_uid;␊ |
313 | ␉gid_t ntm_gid;␊ |
314 | ␉mode_t ntm_mode;␊ |
315 | ␉u_long ntm_flag;␊ |
316 | ␉cn_t ntm_cfree;␊ |
317 | ␉struct ntvattrdef *ntm_ad;␉/* attribute names are stored in native byte order */␊ |
318 | ␉int ntm_adnum;␊ |
319 | ␉wchar * ntm_82u;␉/* 8bit to Unicode */␊ |
320 | ␉char ** ntm_u28;␉/* Unicode to 8 bit */␊ |
321 | #ifdef APPLE␊ |
322 | ␉struct netexport ntm_export;␉/* NFS export information */␊ |
323 | #endif␊ |
324 | };␊ |
325 | ␊ |
326 | #define ntm_mftcn ntm_bootfile.bf_mftcn␊ |
327 | #define ntm_mftmirrcn␉ntm_bootfile.bf_mftmirrcn␊ |
328 | #define␉ntm_mftrecsz␉ntm_bootfile.bf_mftrecsz␊ |
329 | #define␉ntm_spc ntm_bootfile.bf_spc␊ |
330 | #define␉ntm_bps ntm_bootfile.bf_bps␊ |
331 | ␊ |
332 | #pragma pack()␊ |
333 | ␊ |
334 | #define␉NTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + le16toh((s)->reclen)))␊ |
335 | ␊ |
336 | /* Convert mount ptr to ntfsmount ptr. */␊ |
337 | #define VFSTONTFS(mp) ((struct ntfsmount *)((mp)->mnt_data))␊ |
338 | #define VTONT(v) FTONT(VTOF(v))␊ |
339 | #define␉VTOF(v) ((struct fnode *)((v)->v_data))␊ |
340 | #define␉FTOV(f) ((f)->f_vp)␊ |
341 | #define␉FTONT(f) ((f)->f_ip)␊ |
342 | #define ntfs_cntobn(cn) ((daddr_t)(cn) * (ntmp->ntm_spc))␊ |
343 | #define ntfs_cntob(cn) ((off_t)(cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)␊ |
344 | #define ntfs_btocn(off) (cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
345 | #define ntfs_btocl(off) (cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
346 | #define ntfs_btocnoff(off)␉(off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
347 | #define ntfs_bntob(bn) (daddr_t)((bn) * (ntmp)->ntm_bps)␊ |
348 | ␊ |
349 | #define␉ntfs_bpbl (daddr_t)((ntmp)->ntm_bps)␊ |
350 | ␊ |
351 | #ifdef MALLOC_DECLARE␊ |
352 | MALLOC_DECLARE(M_NTFSMNT);␊ |
353 | MALLOC_DECLARE(M_NTFSNTNODE);␊ |
354 | MALLOC_DECLARE(M_NTFSFNODE);␊ |
355 | MALLOC_DECLARE(M_NTFSDIR);␊ |
356 | MALLOC_DECLARE(M_NTFSNTHASH);␊ |
357 | #endif␊ |
358 | ␊ |
359 | #ifndef M_NTFSMNT␊ |
360 | #define M_NTFSMNT M_TEMP␊ |
361 | #endif␊ |
362 | #ifndef M_NTFSNTNODE␊ |
363 | #define M_NTFSNTNODE M_TEMP␊ |
364 | #endif␊ |
365 | #ifndef M_NTFSFNODE␊ |
366 | #define M_NTFSFNODE M_TEMP␊ |
367 | #endif␊ |
368 | #ifndef M_NTFSDIR␊ |
369 | #define M_NTFSDIR M_TEMP␊ |
370 | #endif␊ |
371 | #ifndef M_NTFSNTHASH␊ |
372 | #define M_NTFSNTHASH M_TEMP␊ |
373 | #endif␊ |
374 | #ifndef M_NTFSRUN␊ |
375 | #define M_NTFSRUN M_TEMP␊ |
376 | #endif␊ |
377 | #ifndef M_NTFSRDATA␊ |
378 | #define M_NTFSRDATA M_TEMP␊ |
379 | #endif␊ |
380 | #ifndef M_NTFSNTVATTR␊ |
381 | #define M_NTFSNTVATTR M_TEMP␊ |
382 | #endif␊ |
383 | #ifndef M_NTFSDECOMP␊ |
384 | #define M_NTFSDECOMP M_TEMP␊ |
385 | #endif␊ |
386 | #define VT_NTFS VT_OTHER␊ |
387 | ␊ |
388 | #if defined(NTFS_DEBUG)␊ |
389 | #define dprintf(a) printf a␊ |
390 | #if NTFS_DEBUG > 1␊ |
391 | #define ddprintf(a) printf a␊ |
392 | #else␊ |
393 | #define ddprintf(a)␊ |
394 | #endif␊ |
395 | #else␊ |
396 | #define dprintf(a)␊ |
397 | #define ddprintf(a)␊ |
398 | #endif␊ |
399 | ␊ |
400 | #ifdef APPLE␊ |
401 | typedef int vop_t(void *);␊ |
402 | #else␊ |
403 | #endif␊ |
404 | extern vop_t **ntfs_vnodeop_p;␊ |
405 | #endif /* KERNEL */␊ |
406 | |