Root/
Source at commit 2381 created 10 years 21 days ago. By ifabio, Apply patch: (Credits to Thomas Jansen aka tja) - Reading options from all devices during boot. The options for the boot menu are only read from the devices rd(0,0) or bt(0,0). Consequently, boot menu options (e.g. "Quiet Boot", "Timeout", etc.) in plists on other devices (like most users have) are ignored. This patch extends the list of paths to search for the options plist on all devices that can be found. | |
---|---|
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 | #define BBSIZE␉␉␉1024␊ |
78 | #define␉BBOFF␉␉␉((off_t)(0))␊ |
79 | #define␉BBLOCK␉␉␉((daddr_t)(0))␊ |
80 | #define␉NTFS_MFTINO␉␉0␊ |
81 | #define␉NTFS_VOLUMEINO␉␉3␊ |
82 | #define␉NTFS_ATTRDEFINO␉␉4␊ |
83 | #define␉NTFS_ROOTINO␉␉5␊ |
84 | #define␉NTFS_BITMAPINO␉␉6␊ |
85 | #define␉NTFS_BOOTINO␉␉7␊ |
86 | #define␉NTFS_BADCLUSINO␉␉8␊ |
87 | #define␉NTFS_UPCASEINO␉␉10␊ |
88 | #define NTFS_MAXFILENAME␉255␊ |
89 | ␊ |
90 | struct fixuphdr {␊ |
91 | ␉u_int32_t fh_magic;␊ |
92 | ␉u_int16_t fh_foff;␊ |
93 | ␉u_int16_t fh_fnum;␊ |
94 | };␊ |
95 | ␊ |
96 | #define NTFS_AF_INRUN␉0x00000001␊ |
97 | struct attrhdr {␊ |
98 | ␉u_int32_t a_type;␊ |
99 | ␉u_int32_t reclen;␊ |
100 | ␉u_int8_t a_flag;␊ |
101 | ␉u_int8_t a_namelen;␊ |
102 | ␉u_int8_t a_nameoff;␊ |
103 | ␉u_int8_t reserved1;␊ |
104 | ␉u_int8_t a_compression;␊ |
105 | ␉u_int8_t reserved2;␊ |
106 | ␉u_int16_t a_index;␊ |
107 | };␊ |
108 | #define NTFS_A_STD␉0x10␊ |
109 | #define NTFS_A_ATTRLIST␉0x20␊ |
110 | #define NTFS_A_NAME␉0x30␊ |
111 | #define NTFS_A_VOLUMENAME␉0x60␊ |
112 | #define NTFS_A_DATA␉0x80␊ |
113 | #define␉NTFS_A_INDXROOT␉0x90␊ |
114 | #define␉NTFS_A_INDX␉0xA0␊ |
115 | #define NTFS_A_INDXBITMAP 0xB0␊ |
116 | ␊ |
117 | #define NTFS_MAXATTRNAME␉255␊ |
118 | struct attr {␊ |
119 | ␉struct attrhdr a_hdr;␊ |
120 | ␉union {␊ |
121 | ␉␉struct {␊ |
122 | ␉␉␉u_int16_t a_datalen;␊ |
123 | ␉␉␉u_int16_t reserved1;␊ |
124 | ␉␉␉u_int16_t a_dataoff;␊ |
125 | ␉␉␉u_int16_t a_indexed;␊ |
126 | ␉␉} a_S_r;␊ |
127 | ␉␉struct {␊ |
128 | ␉␉␉cn_t a_vcnstart;␊ |
129 | ␉␉␉cn_t a_vcnend;␊ |
130 | ␉␉␉u_int16_t a_dataoff;␊ |
131 | ␉␉␉u_int16_t a_compressalg;␊ |
132 | ␉␉␉u_int32_t reserved1;␊ |
133 | ␉␉␉u_int64_t a_allocated;␊ |
134 | ␉␉␉u_int64_t a_datalen;␊ |
135 | ␉␉␉u_int64_t a_initialized;␊ |
136 | ␉␉} a_S_nr;␊ |
137 | ␉} a_S;␊ |
138 | };␊ |
139 | #define a_r␉a_S.a_S_r␊ |
140 | #define a_nr␉a_S.a_S_nr␊ |
141 | ␊ |
142 | typedef struct {␊ |
143 | ␉u_int64_t t_create;␊ |
144 | ␉u_int64_t t_write;␊ |
145 | ␉u_int64_t t_mftwrite;␊ |
146 | ␉u_int64_t t_access;␊ |
147 | } ntfs_times_t;␊ |
148 | ␊ |
149 | #define NTFS_FFLAG_RDONLY␉0x01LL␊ |
150 | #define NTFS_FFLAG_HIDDEN␉0x02LL␊ |
151 | #define NTFS_FFLAG_SYSTEM␉0x04LL␊ |
152 | #define NTFS_FFLAG_ARCHIVE␉0x20LL␊ |
153 | #define NTFS_FFLAG_COMPRESSED␉0x0800LL␊ |
154 | #define NTFS_FFLAG_DIR␉␉0x10000000LL␊ |
155 | ␊ |
156 | struct attr_name {␊ |
157 | ␉u_int32_t␉n_pnumber;␉/* Parent ntnode */␊ |
158 | ␉u_int32_t reserved;␊ |
159 | ␉ntfs_times_t n_times;␊ |
160 | ␉u_int64_t n_size;␊ |
161 | ␉u_int64_t n_attrsz;␊ |
162 | ␉u_int64_t n_flag;␊ |
163 | ␉u_int8_t n_namelen;␊ |
164 | ␉u_int8_t n_nametype;␊ |
165 | ␉u_int16_t n_name[1];␊ |
166 | };␊ |
167 | ␊ |
168 | #define NTFS_IRFLAG_INDXALLOC␉0x00000001␊ |
169 | struct attr_indexroot {␊ |
170 | ␉u_int32_t ir_unkn1;␉/* attribute type (0x30 for $FILE_NAME) */␊ |
171 | ␉u_int32_t ir_unkn2;␉/* collation rule (0x01 for file names) */␊ |
172 | ␉u_int32_t ir_size;␉/* size of index allocation entry */␊ |
173 | ␉u_int32_t ir_unkn3;␉/* clusters per index record, and 3 bytes padding */␊ |
174 | ␉u_int32_t ir_unkn4;␉/* (offset to first index entry?) always 0x10 */␊ |
175 | ␉u_int32_t ir_datalen;␉/* (total size of index enties?) sizeof something */␊ |
176 | ␉u_int32_t ir_allocated;␉/* (allocated size of index entries?) */␊ |
177 | ␉u_int8_t ␉ir_flag;␉/* 1=index allocation needed (large index) */␊ |
178 | u_int8_t␉ir_pad1;␉/* padding */␊ |
179 | ␉u_int16_t ir_pad2;␉/* padding */␊ |
180 | };␊ |
181 | ␊ |
182 | struct attr_attrlist {␊ |
183 | ␉u_int32_t al_type;␉/* Attribute type */␊ |
184 | ␉u_int16_t reclen;␉␉/* length of this entry */␊ |
185 | ␉u_int8_t al_namelen;␉/* Attribute name len */␊ |
186 | ␉u_int8_t al_nameoff;␉/* Name offset from entry start */␊ |
187 | ␉u_int64_t al_vcnstart;␉/* VCN number */␊ |
188 | ␉u_int32_t al_inumber;␉/* Parent ntnode */␊ |
189 | ␉u_int32_t reserved;␊ |
190 | ␉u_int16_t al_index;␉/* Attribute index in MFT record */␊ |
191 | ␉u_int16_t al_name[1];␉/* Name */␊ |
192 | };␊ |
193 | ␊ |
194 | #define␉NTFS_INDXMAGIC␉(u_int32_t)(0x58444E49)␊ |
195 | struct attr_indexalloc {␊ |
196 | ␉struct fixuphdr ia_fixup;␊ |
197 | ␉u_int64_t unknown1;␊ |
198 | ␉cn_t ia_bufcn;␊ |
199 | ␉u_int16_t ia_hdrsize;␊ |
200 | ␉u_int16_t unknown2;␊ |
201 | ␉u_int32_t ia_inuse;␊ |
202 | ␉u_int32_t ia_allocated;␊ |
203 | };␊ |
204 | ␊ |
205 | #define␉NTFS_IEFLAG_SUBNODE␉0x00000001␊ |
206 | #define␉NTFS_IEFLAG_LAST␉0x00000002␊ |
207 | ␊ |
208 | struct attr_indexentry {␊ |
209 | ␉u_int32_t ie_number;␊ |
210 | ␉u_int32_t unknown1;␊ |
211 | ␉u_int16_t reclen;␊ |
212 | ␉u_int16_t ie_size;␊ |
213 | ␉u_int32_t ie_flag;/* 1 - has subnodes, 2 - last */␊ |
214 | ␉u_int32_t ie_fpnumber;␊ |
215 | ␉u_int32_t unknown2;␊ |
216 | ␉ntfs_times_t ie_ftimes;␊ |
217 | ␉u_int64_t ie_fallocated;␊ |
218 | ␉u_int64_t ie_fsize;␊ |
219 | ␉u_int32_t ie_fflag;␊ |
220 | u_int32_t␉unknown3;␉/* used by reparse points and external attributes? */␊ |
221 | ␉u_int8_t ie_fnamelen;␊ |
222 | ␉u_int8_t ie_fnametype;␊ |
223 | ␉wchar ie_fname[NTFS_MAXFILENAME];␊ |
224 | ␉/* cn_t␉␉ie_bufcn;␉ buffer with subnodes */␊ |
225 | };␊ |
226 | ␊ |
227 | #define␉NTFS_FILEMAGIC␉(u_int32_t)(0x454C4946)␊ |
228 | #define␉NTFS_FRFLAG_DIR␉0x0002␊ |
229 | struct filerec {␊ |
230 | ␉struct fixuphdr fr_fixup;␊ |
231 | ␉u_int8_t reserved[8];␊ |
232 | ␉u_int16_t fr_seqnum;␉/* Sequence number */␊ |
233 | ␉u_int16_t fr_nlink;␊ |
234 | ␉u_int16_t fr_attroff;␉/* offset to attributes */␊ |
235 | ␉u_int16_t fr_flags;␉/* 1-nonresident attr, 2-directory */␊ |
236 | ␉u_int32_t fr_size;/* hdr + attributes */␊ |
237 | ␉u_int32_t fr_allocated;␉/* allocated length of record */␊ |
238 | ␉u_int64_t fr_mainrec;␉/* main record */␊ |
239 | ␉u_int16_t fr_attrnum;␉/* maximum attr number + 1 ??? */␊ |
240 | };␊ |
241 | ␊ |
242 | #define␉NTFS_ATTRNAME_MAXLEN␉0x40␊ |
243 | #define␉NTFS_ADFLAG_NONRES␉0x0080␉/* Attrib can be non resident */␊ |
244 | #define␉NTFS_ADFLAG_INDEX␉0x0002␉/* Attrib can be indexed */␊ |
245 | struct attrdef {␊ |
246 | ␉wchar␉␉ad_name[NTFS_ATTRNAME_MAXLEN];␊ |
247 | ␉u_int32_t␉ad_type;␊ |
248 | ␉u_int32_t␉reserved1[2];␊ |
249 | ␉u_int32_t␉ad_flag;␊ |
250 | ␉u_int64_t␉ad_minlen;␊ |
251 | ␉u_int64_t␉ad_maxlen;␉/* -1 for nonlimited */␊ |
252 | };␊ |
253 | ␊ |
254 | struct ntvattrdef {␊ |
255 | ␉char␉␉ad_name[0x40];␊ |
256 | ␉int␉␉ad_namelen;␊ |
257 | ␉u_int32_t␉ad_type;␊ |
258 | };␊ |
259 | ␊ |
260 | #define␉NTFS_BBID␉"NTFS "␊ |
261 | #define␉NTFS_BBIDLEN␉8␊ |
262 | struct bootfile {␊ |
263 | ␉u_int8_t reserved1[3];␉/* asm jmp near ... */␊ |
264 | ␉u_int8_t bf_sysid[8];␉/* 'NTFS ' */␊ |
265 | ␉u_int16_t bf_bps;␉␉/* bytes per sector */␊ |
266 | ␉u_int8_t bf_spc;␉␉/* sectors per cluster */␊ |
267 | ␉u_int8_t reserved2[7];␉/* unused (zeroed) */␊ |
268 | ␉u_int8_t bf_media;␉/* media desc. (0xF8) */␊ |
269 | ␉u_int8_t reserved3[2];␊ |
270 | ␉u_int16_t bf_spt;␉␉/* sectors per track */␊ |
271 | ␉u_int16_t bf_heads;␉/* number of heads */␊ |
272 | ␉u_int8_t reserver4[12];␊ |
273 | ␉u_int64_t bf_spv;␉␉/* sectors per volume */␊ |
274 | ␉cn_t bf_mftcn;␉/* $MFT cluster number */␊ |
275 | ␉cn_t bf_mftmirrcn;␉/* $MFTMirr cn */␊ |
276 | ␉u_int8_t bf_mftrecsz;␉/* MFT record size (clust) */␊ |
277 | ␉␉␉␉␉/* 0xF6 inducates 1/4 */␊ |
278 | u_int8_t reserved5[3];␊ |
279 | ␉u_int8_t bf_ibsz;␉/* index buffer size */␊ |
280 | u_int8_t reserved6[3];␊ |
281 | ␉u_int64_t bf_volsn;␉/* volume ser. num. */␊ |
282 | };␊ |
283 | ␊ |
284 | /*␊ |
285 | * Darwin's ntfs.util needs to include this file to get definitions␊ |
286 | * for the on-disk structures. It doesn't need the ntfsmount structure.␊ |
287 | * In fact, since it doesn't #define KERNEL, the struct netexport below␊ |
288 | * won't be defined.␊ |
289 | *␊ |
290 | * So, I'm using #ifdef KERNEL around the things that are only relevant␊ |
291 | * to the in-kernel implementation.␊ |
292 | *␊ |
293 | |
294 | * invent a different conditional here.␊ |
295 | */␊ |
296 | #ifdef KERNEL␊ |
297 | ␊ |
298 | #define␉NTFS_SYSNODESNUM␉0x0B␊ |
299 | struct ntfsmount {␊ |
300 | ␉struct mount *ntm_mountp;␉/* filesystem vfs structure */␊ |
301 | ␉struct bootfile ntm_bootfile;␊ |
302 | ␉dev_t ntm_dev;␉/* device mounted */␊ |
303 | ␉struct vnode *ntm_devvp;␉/* block device mounted vnode */␊ |
304 | ␉struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];␊ |
305 | ␉u_int32_t ntm_bpmftrec;␊ |
306 | ␉uid_t ntm_uid;␊ |
307 | ␉gid_t ntm_gid;␊ |
308 | ␉mode_t ntm_mode;␊ |
309 | ␉u_long ntm_flag;␊ |
310 | ␉cn_t␉␉ntm_cfree;␊ |
311 | ␉struct ntvattrdef *ntm_ad;␉/* attribute names are stored in native byte order */␊ |
312 | ␉int␉␉ntm_adnum;␊ |
313 | ␉wchar *␉␉ntm_82u;␉/* 8bit to Unicode */␊ |
314 | ␉char **␉␉ntm_u28;␉/* Unicode to 8 bit */␊ |
315 | #ifdef APPLE␊ |
316 | ␉struct netexport ntm_export;␉/* NFS export information */␊ |
317 | #endif␊ |
318 | };␊ |
319 | ␊ |
320 | #define ntm_mftcn␉ntm_bootfile.bf_mftcn␊ |
321 | #define ntm_mftmirrcn␉ntm_bootfile.bf_mftmirrcn␊ |
322 | #define␉ntm_mftrecsz␉ntm_bootfile.bf_mftrecsz␊ |
323 | #define␉ntm_spc␉␉ntm_bootfile.bf_spc␊ |
324 | #define␉ntm_bps␉␉ntm_bootfile.bf_bps␊ |
325 | ␊ |
326 | #pragma pack()␊ |
327 | ␊ |
328 | #define␉NTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + le16toh((s)->reclen)))␊ |
329 | ␊ |
330 | /* Convert mount ptr to ntfsmount ptr. */␊ |
331 | #define VFSTONTFS(mp)␉((struct ntfsmount *)((mp)->mnt_data))␊ |
332 | #define VTONT(v)␉FTONT(VTOF(v))␊ |
333 | #define␉VTOF(v)␉␉((struct fnode *)((v)->v_data))␊ |
334 | #define␉FTOV(f)␉␉((f)->f_vp)␊ |
335 | #define␉FTONT(f)␉((f)->f_ip)␊ |
336 | #define ntfs_cntobn(cn)␉((daddr_t)(cn) * (ntmp->ntm_spc))␊ |
337 | #define ntfs_cntob(cn)␉((off_t)(cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)␊ |
338 | #define ntfs_btocn(off)␉(cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
339 | #define ntfs_btocl(off)␉(cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
340 | #define ntfs_btocnoff(off)␉(off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))␊ |
341 | #define ntfs_bntob(bn)␉(daddr_t)((bn) * (ntmp)->ntm_bps)␊ |
342 | ␊ |
343 | #define␉ntfs_bpbl␉(daddr_t)((ntmp)->ntm_bps)␊ |
344 | ␊ |
345 | #ifdef MALLOC_DECLARE␊ |
346 | MALLOC_DECLARE(M_NTFSMNT);␊ |
347 | MALLOC_DECLARE(M_NTFSNTNODE);␊ |
348 | MALLOC_DECLARE(M_NTFSFNODE);␊ |
349 | MALLOC_DECLARE(M_NTFSDIR);␊ |
350 | MALLOC_DECLARE(M_NTFSNTHASH);␊ |
351 | #endif␊ |
352 | ␊ |
353 | #ifndef M_NTFSMNT␊ |
354 | #define M_NTFSMNT M_TEMP␊ |
355 | #endif␊ |
356 | #ifndef M_NTFSNTNODE␊ |
357 | #define M_NTFSNTNODE M_TEMP␊ |
358 | #endif␊ |
359 | #ifndef M_NTFSFNODE␊ |
360 | #define M_NTFSFNODE M_TEMP␊ |
361 | #endif␊ |
362 | #ifndef M_NTFSDIR␊ |
363 | #define M_NTFSDIR M_TEMP␊ |
364 | #endif␊ |
365 | #ifndef M_NTFSNTHASH␊ |
366 | #define M_NTFSNTHASH M_TEMP␊ |
367 | #endif␊ |
368 | #ifndef M_NTFSRUN␊ |
369 | #define M_NTFSRUN M_TEMP␊ |
370 | #endif␊ |
371 | #ifndef M_NTFSRDATA␊ |
372 | #define M_NTFSRDATA M_TEMP␊ |
373 | #endif␊ |
374 | #ifndef M_NTFSNTVATTR␊ |
375 | #define M_NTFSNTVATTR M_TEMP␊ |
376 | #endif␊ |
377 | #ifndef M_NTFSDECOMP␊ |
378 | #define M_NTFSDECOMP M_TEMP␊ |
379 | #endif␊ |
380 | #define VT_NTFS VT_OTHER␊ |
381 | ␊ |
382 | #if defined(NTFS_DEBUG)␊ |
383 | #define dprintf(a) printf a␊ |
384 | #if NTFS_DEBUG > 1␊ |
385 | #define ddprintf(a) printf a␊ |
386 | #else␊ |
387 | #define ddprintf(a)␊ |
388 | #endif␊ |
389 | #else␊ |
390 | #define dprintf(a)␊ |
391 | #define ddprintf(a)␊ |
392 | #endif␊ |
393 | ␊ |
394 | #ifdef APPLE␊ |
395 | typedef int vop_t(void *);␊ |
396 | #else␊ |
397 | #endif␊ |
398 | extern vop_t **ntfs_vnodeop_p;␊ |
399 | #endif /* KERNEL */␊ |
400 |