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