Chameleon

Chameleon Svn Source Tree

Root/branches/Bungo/i386/libsaio/ntfs_private.h

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
73typedef u_int64_t cn_t;
74typedef u_int16_t wchar;
75
76#pragma pack(1)
77
78#define BBSIZE 1024
79#defineBBOFF ((off_t)(0))
80#defineBBLOCK ((daddr_t)(0))
81#defineNTFS_MFTINO 0
82#defineNTFS_VOLUMEINO3
83#defineNTFS_ATTRDEFINO4
84#defineNTFS_ROOTINO5
85#defineNTFS_BITMAPINO6
86#defineNTFS_BOOTINO7
87#defineNTFS_BADCLUSINO8
88#defineNTFS_UPCASEINO10
89#define NTFS_MAXFILENAME255
90
91struct fixuphdr {
92u_int32_t fh_magic;
93u_int16_t fh_foff;
94u_int16_t fh_fnum;
95};
96
97#define NTFS_AF_INRUN0x00000001
98
99struct attrhdr {
100u_int32_t a_type;
101u_int32_t reclen;
102u_int8_t a_flag;
103u_int8_t a_namelen;
104u_int8_t a_nameoff;
105u_int8_t reserved1;
106u_int8_t a_compression;
107u_int8_t reserved2;
108u_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_VOLUMENAME0x60
115#define NTFS_A_DATA 0x80
116#defineNTFS_A_INDXROOT 0x90
117#defineNTFS_A_INDX 0xA0
118#define NTFS_A_INDXBITMAP 0xB0
119
120#define NTFS_MAXATTRNAME255
121
122struct attr {
123struct attrhdr a_hdr;
124union {
125struct {
126u_int16_t a_datalen;
127u_int16_t reserved1;
128u_int16_t a_dataoff;
129u_int16_t a_indexed;
130} a_S_r;
131struct {
132cn_t a_vcnstart;
133cn_t a_vcnend;
134u_int16_t a_dataoff;
135u_int16_t a_compressalg;
136u_int32_t reserved1;
137u_int64_t a_allocated;
138u_int64_t a_datalen;
139u_int64_t a_initialized;
140} a_S_nr;
141} a_S;
142};
143#define a_r a_S.a_S_r
144#define a_nra_S.a_S_nr
145
146typedef struct {
147u_int64_t t_create;
148u_int64_t t_write;
149u_int64_t t_mftwrite;
150u_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_COMPRESSED0x0800LL
158#define NTFS_FFLAG_DIR 0x10000000LL
159
160struct attr_name {
161u_int32_t n_pnumber;/* Parent ntnode */
162u_int32_t reserved;
163ntfs_times_t n_times;
164u_int64_t n_size;
165u_int64_t n_attrsz;
166u_int64_t n_flag;
167u_int8_t n_namelen;
168u_int8_t n_nametype;
169u_int16_t n_name[1];
170};
171
172#define NTFS_IRFLAG_INDXALLOC0x00000001
173struct attr_indexroot {
174u_int32_t ir_unkn1;/* attribute type (0x30 for $FILE_NAME) */
175u_int32_t ir_unkn2;/* collation rule (0x01 for file names) */
176u_int32_t ir_size;/* size of index allocation entry */
177u_int32_t ir_unkn3;/* clusters per index record, and 3 bytes padding */
178u_int32_t ir_unkn4;/* (offset to first index entry?) always 0x10 */
179u_int32_t ir_datalen;/* (total size of index enties?) sizeof something */
180u_int32_t ir_allocated;/* (allocated size of index entries?) */
181u_int8_t ir_flag;/* 1=index allocation needed (large index) */
182 u_int8_t ir_pad1;/* padding */
183u_int16_t ir_pad2;/* padding */
184};
185
186struct attr_attrlist {
187u_int32_t al_type;/* Attribute type */
188u_int16_t reclen;/* length of this entry */
189u_int8_t al_namelen;/* Attribute name len */
190u_int8_t al_nameoff;/* Name offset from entry start */
191u_int64_t al_vcnstart;/* VCN number */
192u_int32_t al_inumber;/* Parent ntnode */
193u_int32_t reserved;
194u_int16_t al_index;/* Attribute index in MFT record */
195u_int16_t al_name[1];/* Name */
196};
197
198#defineNTFS_INDXMAGIC(u_int32_t)(0x58444E49)
199struct attr_indexalloc {
200struct fixuphdr ia_fixup;
201u_int64_t unknown1;
202cn_t ia_bufcn;
203u_int16_t ia_hdrsize;
204u_int16_t unknown2;
205u_int32_t ia_inuse;
206u_int32_t ia_allocated;
207};
208
209#defineNTFS_IEFLAG_SUBNODE0x00000001
210#defineNTFS_IEFLAG_LAST0x00000002
211
212struct attr_indexentry {
213u_int32_t ie_number;
214u_int32_t unknown1;
215u_int16_t reclen;
216u_int16_t ie_size;
217u_int32_t ie_flag;/* 1 - has subnodes, 2 - last */
218u_int32_t ie_fpnumber;
219u_int32_t unknown2;
220ntfs_times_t ie_ftimes;
221u_int64_t ie_fallocated;
222u_int64_t ie_fsize;
223u_int32_t ie_fflag;
224 u_int32_t unknown3;/* used by reparse points and external attributes? */
225u_int8_t ie_fnamelen;
226u_int8_t ie_fnametype;
227wchar ie_fname[NTFS_MAXFILENAME];
228/* cn_tie_bufcn; buffer with subnodes */
229};
230
231#defineNTFS_FILEMAGIC(u_int32_t)(0x454C4946)
232#defineNTFS_FRFLAG_DIR0x0002
233struct filerec {
234struct fixuphdr fr_fixup;
235u_int8_t reserved[8];
236u_int16_t fr_seqnum;/* Sequence number */
237u_int16_t fr_nlink;
238u_int16_t fr_attroff;/* offset to attributes */
239u_int16_t fr_flags;/* 1-nonresident attr, 2-directory */
240u_int32_t fr_size;/* hdr + attributes */
241u_int32_t fr_allocated;/* allocated length of record */
242u_int64_t fr_mainrec;/* main record */
243u_int16_t fr_attrnum;/* maximum attr number + 1 ??? */
244};
245
246#defineNTFS_ATTRNAME_MAXLEN0x40
247#defineNTFS_ADFLAG_NONRES 0x0080/* Attrib can be non resident */
248#defineNTFS_ADFLAG_INDEX 0x0002/* Attrib can be indexed */
249struct attrdef {
250wcharad_name[NTFS_ATTRNAME_MAXLEN];
251u_int32_tad_type;
252u_int32_treserved1[2];
253u_int32_tad_flag;
254u_int64_tad_minlen;
255u_int64_tad_maxlen;/* -1 for nonlimited */
256};
257
258struct ntvattrdef {
259charad_name[0x40];
260int ad_namelen;
261u_int32_tad_type;
262};
263
264#defineNTFS_BBID"NTFS "
265#defineNTFS_BBIDLEN8
266struct bootfile {
267u_int8_t reserved1[3];/* asm jmp near ... */
268u_int8_t bf_sysid[8];/* 'NTFS ' */
269u_int16_t bf_bps;/* bytes per sector */
270u_int8_t bf_spc;/* sectors per cluster */
271u_int8_t reserved2[7];/* unused (zeroed) */
272u_int8_t bf_media;/* media desc. (0xF8) */
273u_int8_t reserved3[2]; /* always 0 */
274u_int16_t bf_spt;/* sectors per track */
275u_int16_t bf_heads;/* number of heads */
276 u_int32_t bf_hidsecs; /* hidden sectors */
277u_int8_t reserver4[8]; /* not used by NTFS (0x00000000) */
278u_int64_t bf_spv;/* sectors per volume (total) */
279cn_t bf_mftcn;/* $MFT cluster number */
280cn_t bf_mftmirrcn;/* $MFTMirr cn */
281u_int8_t bf_mftrecsz;/* MFT record size (clust) */
282 /* 0xF6 inducates 1/4 */
283 u_int8_t reserved5[3];
284u_int8_t bf_ibsz;/* index buffer size */
285 u_int8_t reserved6[3]; /* not used by NTFS (0x000000) */
286u_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#defineNTFS_SYSNODESNUM0x0B
305struct ntfsmount {
306struct mount *ntm_mountp;/* filesystem vfs structure */
307struct bootfile ntm_bootfile;
308dev_t ntm_dev;/* device mounted */
309struct vnode *ntm_devvp;/* block device mounted vnode */
310struct vnode *ntm_sysvn[NTFS_SYSNODESNUM];
311u_int32_t ntm_bpmftrec;
312uid_t ntm_uid;
313gid_t ntm_gid;
314mode_t ntm_mode;
315u_long ntm_flag;
316cn_t ntm_cfree;
317struct ntvattrdef *ntm_ad;/* attribute names are stored in native byte order */
318int ntm_adnum;
319 wchar * ntm_82u;/* 8bit to Unicode */
320 char ** ntm_u28;/* Unicode to 8 bit */
321#ifdef APPLE
322struct netexport ntm_export;/* NFS export information */
323#endif
324};
325
326#define ntm_mftcn ntm_bootfile.bf_mftcn
327#define ntm_mftmirrcnntm_bootfile.bf_mftmirrcn
328#definentm_mftrecszntm_bootfile.bf_mftrecsz
329#definentm_spc ntm_bootfile.bf_spc
330#definentm_bps ntm_bootfile.bf_bps
331
332#pragma pack()
333
334#defineNTFS_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#defineVTOF(v) ((struct fnode *)((v)->v_data))
340#defineFTOV(f) ((f)->f_vp)
341#defineFTONT(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#definentfs_bpbl (daddr_t)((ntmp)->ntm_bps)
350
351#ifdef MALLOC_DECLARE
352MALLOC_DECLARE(M_NTFSMNT);
353MALLOC_DECLARE(M_NTFSNTNODE);
354MALLOC_DECLARE(M_NTFSFNODE);
355MALLOC_DECLARE(M_NTFSDIR);
356MALLOC_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
401typedef int vop_t(void *);
402#else
403#endif
404extern vop_t **ntfs_vnodeop_p;
405#endif /* KERNEL */
406

Archive Download this file

Revision: 2531