Home | History | Annotate | Line # | Download | only in ntfs
ntfs.h revision 1.10.2.1
      1  1.10.2.1      yamt /*	$NetBSD: ntfs.h,v 1.10.2.1 2005/10/26 08:32:51 yamt Exp $	*/
      2       1.1  jdolecek 
      3       1.1  jdolecek /*-
      4       1.1  jdolecek  * Copyright (c) 1998, 1999 Semen Ustimenko
      5       1.1  jdolecek  * All rights reserved.
      6       1.1  jdolecek  *
      7       1.1  jdolecek  * Redistribution and use in source and binary forms, with or without
      8       1.1  jdolecek  * modification, are permitted provided that the following conditions
      9       1.1  jdolecek  * are met:
     10       1.1  jdolecek  * 1. Redistributions of source code must retain the above copyright
     11       1.1  jdolecek  *    notice, this list of conditions and the following disclaimer.
     12       1.1  jdolecek  * 2. Redistributions in binary form must reproduce the above copyright
     13       1.1  jdolecek  *    notice, this list of conditions and the following disclaimer in the
     14       1.1  jdolecek  *    documentation and/or other materials provided with the distribution.
     15       1.1  jdolecek  *
     16       1.1  jdolecek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17       1.1  jdolecek  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18       1.1  jdolecek  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19       1.1  jdolecek  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     20       1.1  jdolecek  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21       1.1  jdolecek  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22       1.1  jdolecek  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23       1.1  jdolecek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24       1.1  jdolecek  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25       1.1  jdolecek  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26       1.1  jdolecek  * SUCH DAMAGE.
     27       1.1  jdolecek  *
     28       1.1  jdolecek  *	Id: ntfs.h,v 1.5 1999/05/12 09:42:51 semenu Exp
     29       1.1  jdolecek  */
     30       1.1  jdolecek 
     31       1.1  jdolecek #if defined(__NetBSD__) && defined(_KERNEL_OPT)
     32       1.1  jdolecek #include "opt_ntfs.h"
     33       1.1  jdolecek #endif
     34       1.1  jdolecek 
     35       1.1  jdolecek typedef u_int64_t cn_t;
     36       1.1  jdolecek typedef u_int16_t wchar;
     37       1.1  jdolecek 
     38       1.1  jdolecek #pragma pack(1)
     39       1.1  jdolecek #define BBSIZE			1024
     40       1.1  jdolecek #define	BBOFF			((off_t)(0))
     41       1.1  jdolecek #define	BBLOCK			((daddr_t)(0))
     42       1.1  jdolecek #define	NTFS_MFTINO		0
     43       1.1  jdolecek #define	NTFS_VOLUMEINO		3
     44       1.1  jdolecek #define	NTFS_ATTRDEFINO		4
     45       1.1  jdolecek #define	NTFS_ROOTINO		5
     46       1.1  jdolecek #define	NTFS_BITMAPINO		6
     47       1.1  jdolecek #define	NTFS_BOOTINO		7
     48       1.1  jdolecek #define	NTFS_BADCLUSINO		8
     49       1.1  jdolecek #define	NTFS_UPCASEINO		10
     50       1.1  jdolecek #define NTFS_MAXFILENAME	255
     51       1.1  jdolecek 
     52       1.1  jdolecek struct fixuphdr {
     53       1.1  jdolecek 	u_int32_t       fh_magic;
     54       1.1  jdolecek 	u_int16_t       fh_foff;
     55       1.1  jdolecek 	u_int16_t       fh_fnum;
     56       1.1  jdolecek };
     57       1.1  jdolecek 
     58       1.1  jdolecek #define NTFS_AF_INRUN	0x00000001
     59       1.1  jdolecek struct attrhdr {
     60       1.1  jdolecek 	u_int32_t       a_type;
     61       1.1  jdolecek 	u_int32_t       reclen;
     62       1.1  jdolecek 	u_int8_t        a_flag;
     63       1.1  jdolecek 	u_int8_t        a_namelen;
     64       1.1  jdolecek 	u_int8_t        a_nameoff;
     65       1.1  jdolecek 	u_int8_t        reserved1;
     66       1.1  jdolecek 	u_int8_t        a_compression;
     67       1.1  jdolecek 	u_int8_t        reserved2;
     68       1.1  jdolecek 	u_int16_t       a_index;
     69       1.1  jdolecek };
     70       1.1  jdolecek #define NTFS_A_STD	0x10
     71       1.1  jdolecek #define NTFS_A_ATTRLIST	0x20
     72       1.1  jdolecek #define NTFS_A_NAME	0x30
     73       1.1  jdolecek #define NTFS_A_VOLUMENAME	0x60
     74       1.1  jdolecek #define NTFS_A_DATA	0x80
     75       1.1  jdolecek #define	NTFS_A_INDXROOT	0x90
     76       1.1  jdolecek #define	NTFS_A_INDX	0xA0
     77       1.1  jdolecek #define NTFS_A_INDXBITMAP 0xB0
     78       1.1  jdolecek 
     79       1.1  jdolecek #define NTFS_MAXATTRNAME	255
     80       1.1  jdolecek struct attr {
     81       1.1  jdolecek 	struct attrhdr  a_hdr;
     82       1.1  jdolecek 	union {
     83       1.1  jdolecek 		struct {
     84       1.1  jdolecek 			u_int16_t       a_datalen;
     85       1.1  jdolecek 			u_int16_t       reserved1;
     86       1.1  jdolecek 			u_int16_t       a_dataoff;
     87       1.1  jdolecek 			u_int16_t       a_indexed;
     88       1.1  jdolecek 		}               a_S_r;
     89       1.1  jdolecek 		struct {
     90       1.1  jdolecek 			cn_t            a_vcnstart;
     91       1.1  jdolecek 			cn_t            a_vcnend;
     92       1.1  jdolecek 			u_int16_t       a_dataoff;
     93       1.1  jdolecek 			u_int16_t       a_compressalg;
     94       1.1  jdolecek 			u_int32_t       reserved1;
     95       1.1  jdolecek 			u_int64_t       a_allocated;
     96       1.1  jdolecek 			u_int64_t       a_datalen;
     97       1.1  jdolecek 			u_int64_t       a_initialized;
     98       1.1  jdolecek 		}               a_S_nr;
     99       1.1  jdolecek 	}               a_S;
    100       1.1  jdolecek };
    101       1.1  jdolecek #define a_r	a_S.a_S_r
    102       1.1  jdolecek #define a_nr	a_S.a_S_nr
    103       1.1  jdolecek 
    104       1.1  jdolecek typedef struct {
    105       1.1  jdolecek 	u_int64_t       t_create;
    106       1.1  jdolecek 	u_int64_t       t_write;
    107       1.1  jdolecek 	u_int64_t       t_mftwrite;
    108       1.1  jdolecek 	u_int64_t       t_access;
    109       1.1  jdolecek }               ntfs_times_t;
    110       1.1  jdolecek 
    111       1.1  jdolecek #define NTFS_FFLAG_RDONLY	0x01LL
    112       1.1  jdolecek #define NTFS_FFLAG_HIDDEN	0x02LL
    113       1.1  jdolecek #define NTFS_FFLAG_SYSTEM	0x04LL
    114       1.1  jdolecek #define NTFS_FFLAG_ARCHIVE	0x20LL
    115       1.1  jdolecek #define NTFS_FFLAG_COMPRESSED	0x0800LL
    116       1.1  jdolecek #define NTFS_FFLAG_DIR		0x10000000LL
    117       1.1  jdolecek 
    118       1.1  jdolecek struct attr_name {
    119       1.1  jdolecek 	u_int32_t       n_pnumber;	/* Parent ntnode */
    120       1.1  jdolecek 	u_int32_t       reserved;
    121       1.1  jdolecek 	ntfs_times_t    n_times;
    122       1.1  jdolecek 	u_int64_t       n_size;
    123       1.1  jdolecek 	u_int64_t       n_attrsz;
    124       1.1  jdolecek 	u_int64_t       n_flag;
    125       1.1  jdolecek 	u_int8_t        n_namelen;
    126       1.1  jdolecek 	u_int8_t        n_nametype;
    127       1.1  jdolecek 	u_int16_t       n_name[1];
    128       1.1  jdolecek };
    129       1.1  jdolecek 
    130       1.1  jdolecek #define NTFS_IRFLAG_INDXALLOC	0x00000001
    131       1.1  jdolecek struct attr_indexroot {
    132       1.1  jdolecek 	u_int32_t       ir_unkn1;	/* always 0x30 */
    133       1.1  jdolecek 	u_int32_t       ir_unkn2;	/* always 0x1 */
    134       1.1  jdolecek 	u_int32_t       ir_size;/* ??? */
    135       1.1  jdolecek 	u_int32_t       ir_unkn3;	/* number of cluster */
    136       1.1  jdolecek 	u_int32_t       ir_unkn4;	/* always 0x10 */
    137       1.1  jdolecek 	u_int32_t       ir_datalen;	/* sizeof simething */
    138       1.1  jdolecek 	u_int32_t       ir_allocated;	/* same as above */
    139       1.1  jdolecek 	u_int16_t       ir_flag;/* ?? always 1 */
    140       1.1  jdolecek 	u_int16_t       ir_unkn7;
    141       1.1  jdolecek };
    142       1.1  jdolecek 
    143       1.1  jdolecek struct attr_attrlist {
    144       1.1  jdolecek 	u_int32_t       al_type;	/* Attribute type */
    145       1.1  jdolecek 	u_int16_t       reclen;		/* length of this entry */
    146       1.1  jdolecek 	u_int8_t        al_namelen;	/* Attribute name len */
    147       1.1  jdolecek 	u_int8_t        al_nameoff;	/* Name offset from entry start */
    148       1.1  jdolecek 	u_int64_t       al_vcnstart;	/* VCN number */
    149       1.1  jdolecek 	u_int32_t       al_inumber;	/* Parent ntnode */
    150       1.1  jdolecek 	u_int32_t       reserved;
    151       1.1  jdolecek 	u_int16_t       al_index;	/* Attribute index in MFT record */
    152       1.1  jdolecek 	u_int16_t       al_name[1];	/* Name */
    153       1.1  jdolecek };
    154       1.1  jdolecek 
    155       1.1  jdolecek #define	NTFS_INDXMAGIC	(u_int32_t)(0x58444E49)
    156       1.1  jdolecek struct attr_indexalloc {
    157       1.1  jdolecek 	struct fixuphdr ia_fixup;
    158       1.1  jdolecek 	u_int64_t       unknown1;
    159       1.1  jdolecek 	cn_t            ia_bufcn;
    160       1.1  jdolecek 	u_int16_t       ia_hdrsize;
    161       1.1  jdolecek 	u_int16_t       unknown2;
    162       1.1  jdolecek 	u_int32_t       ia_inuse;
    163       1.1  jdolecek 	u_int32_t       ia_allocated;
    164       1.1  jdolecek };
    165       1.1  jdolecek 
    166       1.1  jdolecek #define	NTFS_IEFLAG_SUBNODE	0x00000001
    167       1.1  jdolecek #define	NTFS_IEFLAG_LAST	0x00000002
    168       1.1  jdolecek 
    169       1.1  jdolecek struct attr_indexentry {
    170       1.1  jdolecek 	u_int32_t       ie_number;
    171       1.1  jdolecek 	u_int32_t       unknown1;
    172       1.1  jdolecek 	u_int16_t       reclen;
    173       1.1  jdolecek 	u_int16_t       ie_size;
    174       1.1  jdolecek 	u_int32_t       ie_flag;/* 1 - has subnodes, 2 - last */
    175       1.1  jdolecek 	u_int32_t       ie_fpnumber;
    176       1.1  jdolecek 	u_int32_t       unknown2;
    177       1.1  jdolecek 	ntfs_times_t    ie_ftimes;
    178       1.1  jdolecek 	u_int64_t       ie_fallocated;
    179       1.1  jdolecek 	u_int64_t       ie_fsize;
    180       1.1  jdolecek 	u_int64_t       ie_fflag;
    181       1.1  jdolecek 	u_int8_t        ie_fnamelen;
    182       1.1  jdolecek 	u_int8_t        ie_fnametype;
    183       1.1  jdolecek 	wchar           ie_fname[NTFS_MAXFILENAME];
    184       1.1  jdolecek 	/* cn_t		ie_bufcn;	 buffer with subnodes */
    185       1.1  jdolecek };
    186       1.1  jdolecek 
    187       1.1  jdolecek #define	NTFS_FILEMAGIC	(u_int32_t)(0x454C4946)
    188       1.1  jdolecek #define	NTFS_FRFLAG_DIR	0x0002
    189       1.1  jdolecek struct filerec {
    190       1.1  jdolecek 	struct fixuphdr fr_fixup;
    191       1.1  jdolecek 	u_int8_t        reserved[8];
    192       1.1  jdolecek 	u_int16_t       fr_seqnum;	/* Sequence number */
    193       1.1  jdolecek 	u_int16_t       fr_nlink;
    194       1.1  jdolecek 	u_int16_t       fr_attroff;	/* offset to attributes */
    195       1.1  jdolecek 	u_int16_t       fr_flags;	/* 1-nonresident attr, 2-directory */
    196       1.1  jdolecek 	u_int32_t       fr_size;/* hdr + attributes */
    197       1.1  jdolecek 	u_int32_t       fr_allocated;	/* allocated length of record */
    198       1.1  jdolecek 	u_int64_t       fr_mainrec;	/* main record */
    199       1.1  jdolecek 	u_int16_t       fr_attrnum;	/* maximum attr number + 1 ??? */
    200       1.1  jdolecek };
    201       1.1  jdolecek 
    202       1.1  jdolecek #define	NTFS_ATTRNAME_MAXLEN	0x40
    203       1.1  jdolecek #define	NTFS_ADFLAG_NONRES	0x0080	/* Attrib can be non resident */
    204       1.1  jdolecek #define	NTFS_ADFLAG_INDEX	0x0002	/* Attrib can be indexed */
    205       1.1  jdolecek struct attrdef {
    206       1.1  jdolecek 	wchar		ad_name[NTFS_ATTRNAME_MAXLEN];
    207       1.1  jdolecek 	u_int32_t	ad_type;
    208       1.1  jdolecek 	u_int32_t	reserved1[2];
    209       1.1  jdolecek 	u_int32_t	ad_flag;
    210       1.1  jdolecek 	u_int64_t	ad_minlen;
    211       1.1  jdolecek 	u_int64_t	ad_maxlen;	/* -1 for nonlimited */
    212       1.1  jdolecek };
    213       1.1  jdolecek 
    214       1.1  jdolecek struct ntvattrdef {
    215       1.1  jdolecek 	char		ad_name[0x40];
    216       1.1  jdolecek 	int		ad_namelen;
    217       1.1  jdolecek 	u_int32_t	ad_type;
    218       1.1  jdolecek };
    219       1.1  jdolecek 
    220       1.1  jdolecek #define	NTFS_BBID	"NTFS    "
    221       1.1  jdolecek #define	NTFS_BBIDLEN	8
    222       1.1  jdolecek struct bootfile {
    223       1.1  jdolecek 	u_int8_t        reserved1[3];	/* asm jmp near ... */
    224       1.1  jdolecek 	u_int8_t        bf_sysid[8];	/* 'NTFS    ' */
    225       1.1  jdolecek 	u_int16_t       bf_bps;		/* bytes per sector */
    226       1.1  jdolecek 	u_int8_t        bf_spc;		/* sectors per cluster */
    227       1.1  jdolecek 	u_int8_t        reserved2[7];	/* unused (zeroed) */
    228       1.1  jdolecek 	u_int8_t        bf_media;	/* media desc. (0xF8) */
    229       1.1  jdolecek 	u_int8_t        reserved3[2];
    230       1.1  jdolecek 	u_int16_t       bf_spt;		/* sectors per track */
    231       1.1  jdolecek 	u_int16_t       bf_heads;	/* number of heads */
    232       1.1  jdolecek 	u_int8_t        reserver4[12];
    233       1.1  jdolecek 	u_int64_t       bf_spv;		/* sectors per volume */
    234       1.1  jdolecek 	cn_t            bf_mftcn;	/* $MFT cluster number */
    235       1.1  jdolecek 	cn_t            bf_mftmirrcn;	/* $MFTMirr cn */
    236       1.1  jdolecek 	u_int8_t        bf_mftrecsz;	/* MFT record size (clust) */
    237       1.1  jdolecek 					/* 0xF6 inducates 1/4 */
    238       1.1  jdolecek 	u_int32_t       bf_ibsz;	/* index buffer size */
    239       1.1  jdolecek 	u_int32_t       bf_volsn;	/* volume ser. num. */
    240       1.1  jdolecek };
    241       1.1  jdolecek 
    242       1.1  jdolecek #pragma pack()
    243       1.1  jdolecek 
    244       1.9   xtraeme typedef wchar (ntfs_wget_func_t)(const char **, size_t *);
    245       1.9   xtraeme typedef int (ntfs_wput_func_t)(char *, size_t, wchar);
    246       1.9   xtraeme typedef int (ntfs_wcmp_func_t)(wchar, wchar);
    247       1.1  jdolecek 
    248       1.1  jdolecek #define	NTFS_SYSNODESNUM	0x0B
    249       1.1  jdolecek struct ntfsmount {
    250       1.1  jdolecek 	struct mount   *ntm_mountp;	/* filesystem vfs structure */
    251       1.1  jdolecek 	struct bootfile ntm_bootfile;
    252       1.1  jdolecek 	dev_t           ntm_dev;	/* device mounted */
    253       1.1  jdolecek 	struct vnode   *ntm_devvp;	/* block device mounted vnode */
    254       1.1  jdolecek 	struct vnode   *ntm_sysvn[NTFS_SYSNODESNUM];
    255       1.1  jdolecek 	u_int32_t       ntm_bpmftrec;
    256       1.1  jdolecek 	uid_t           ntm_uid;
    257       1.1  jdolecek 	gid_t           ntm_gid;
    258       1.1  jdolecek 	mode_t          ntm_mode;
    259       1.1  jdolecek 	u_long          ntm_flag;
    260       1.1  jdolecek 	cn_t		ntm_cfree;
    261       1.1  jdolecek 	struct ntvattrdef *ntm_ad;
    262       1.1  jdolecek 	int		ntm_adnum;
    263       1.1  jdolecek 	ntfs_wget_func_t *ntm_wget;	/* decode string to Unicode string */
    264       1.1  jdolecek 	ntfs_wput_func_t *ntm_wput;	/* encode Unicode string to string */
    265       1.1  jdolecek 	ntfs_wcmp_func_t *ntm_wcmp;	/* compare to wide characters */
    266       1.1  jdolecek };
    267       1.1  jdolecek 
    268       1.1  jdolecek #define ntm_mftcn	ntm_bootfile.bf_mftcn
    269       1.1  jdolecek #define ntm_mftmirrcn	ntm_bootfile.bf_mftmirrcn
    270       1.1  jdolecek #define	ntm_mftrecsz	ntm_bootfile.bf_mftrecsz
    271       1.1  jdolecek #define	ntm_spc		ntm_bootfile.bf_spc
    272       1.1  jdolecek #define	ntm_bps		ntm_bootfile.bf_bps
    273       1.1  jdolecek 
    274       1.1  jdolecek #define	NTFS_NEXTREC(s, type) ((type)(((caddr_t) s) + (s)->reclen))
    275       1.1  jdolecek 
    276       1.1  jdolecek /* Convert mount ptr to ntfsmount ptr. */
    277       1.1  jdolecek #define VFSTONTFS(mp)	((struct ntfsmount *)((mp)->mnt_data))
    278       1.1  jdolecek #define VTONT(v)	FTONT(VTOF(v))
    279       1.1  jdolecek #define	VTOF(v)		((struct fnode *)((v)->v_data))
    280       1.1  jdolecek #define	FTOV(f)		((f)->f_vp)
    281       1.1  jdolecek #define	FTONT(f)	((f)->f_ip)
    282       1.1  jdolecek #define ntfs_cntobn(cn)	(daddr_t)((cn) * (ntmp->ntm_spc))
    283       1.1  jdolecek #define ntfs_cntob(cn)	(off_t)((cn) * (ntmp)->ntm_spc * (ntmp)->ntm_bps)
    284       1.1  jdolecek #define ntfs_btocn(off)	(cn_t)((off) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
    285       1.1  jdolecek #define ntfs_btocl(off)	(cn_t)((off + ntfs_cntob(1) - 1) / ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
    286       1.1  jdolecek #define ntfs_btocnoff(off)	(off_t)((off) % ((ntmp)->ntm_spc * (ntmp)->ntm_bps))
    287       1.1  jdolecek #define ntfs_bntob(bn)	(daddr_t)((bn) * (ntmp)->ntm_bps)
    288       1.1  jdolecek 
    289       1.1  jdolecek #define	ntfs_bpbl	(daddr_t)((ntmp)->ntm_bps)
    290       1.1  jdolecek 
    291       1.2   thorpej #if __FreeBSD_version >= 300000 || defined(__NetBSD__)
    292       1.1  jdolecek MALLOC_DECLARE(M_NTFSMNT);
    293       1.1  jdolecek MALLOC_DECLARE(M_NTFSNTNODE);
    294       1.1  jdolecek MALLOC_DECLARE(M_NTFSFNODE);
    295       1.1  jdolecek MALLOC_DECLARE(M_NTFSDIR);
    296       1.1  jdolecek MALLOC_DECLARE(M_NTFSNTHASH);
    297       1.4  christos MALLOC_DECLARE(M_NTFSNTVATTR);
    298       1.5  christos MALLOC_DECLARE(M_NTFSRDATA);
    299       1.5  christos MALLOC_DECLARE(M_NTFSDECOMP);
    300       1.5  christos MALLOC_DECLARE(M_NTFSRUN);
    301       1.1  jdolecek #endif
    302       1.1  jdolecek 
    303       1.1  jdolecek #ifdef __NetBSD__
    304       1.9   xtraeme typedef int (vop_t)(void *);
    305       1.1  jdolecek #define HASHINIT(a, b, c, d)	hashinit((a), HASH_LIST, (b), (c), (d))
    306       1.1  jdolecek #define bqrelse(bp)		brelse(bp)
    307       1.3  jdolecek #if 0
    308       1.1  jdolecek #define VOP__UNLOCK(a, b, c)	VOP_UNLOCK((a), (b))
    309       1.7      fvdl #define VGET(a, b, c)		vget((a), (b))
    310       1.1  jdolecek #define VN_LOCK(a, b, c)	vn_lock((a), (b))
    311       1.3  jdolecek #endif
    312       1.1  jdolecek #else /* !NetBSD */
    313       1.1  jdolecek #define HASHINIT(a, b, c, d)	hashinit((a), (b), (d))
    314       1.1  jdolecek #define VOP__UNLOCK(a, b, c)	VOP_UNLOCK((a), (b), (c))
    315       1.1  jdolecek #define VGET(a, b, c)		vget((a), (b), (c))
    316       1.1  jdolecek #define VN_LOCK(a, b, c)	vn_lock((a), (b), (c))
    317       1.1  jdolecek 
    318       1.1  jdolecek /* PDIRUNLOCK is used by NetBSD to mark if vfs_lookup() unlocked parent dir;
    319       1.1  jdolecek  * on FreeBSD, it's not defined and nothing similar exists */
    320       1.1  jdolecek #define PDIRUNLOCK		0
    321       1.1  jdolecek #endif /* NetBSD */
    322       1.1  jdolecek 
    323  1.10.2.1      yamt #ifdef NTFS_DEBUG
    324       1.1  jdolecek extern int ntfs_debug;
    325       1.1  jdolecek #define DPRINTF(X, Y) do { if(ntfs_debug >= (X)) printf Y; } while(0)
    326       1.1  jdolecek #define dprintf(a) DPRINTF(1, a)
    327       1.1  jdolecek #define ddprintf(a) DPRINTF(2, a)
    328       1.1  jdolecek #else /* NTFS_DEBUG */
    329       1.1  jdolecek #define DPRINTF(X, Y)
    330       1.1  jdolecek #define dprintf(a)
    331       1.1  jdolecek #define ddprintf(a)
    332       1.1  jdolecek #endif
    333       1.1  jdolecek 
    334       1.1  jdolecek extern vop_t  **ntfs_vnodeop_p;
    335