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