xref: /haiku/src/add-ons/kernel/file_systems/ntfs/ntfs.h (revision 4e3137c085bae361922078f123dceb92da700640)
1 /*
2  * Copyright (c) 2006-2007 Troeglazov Gerasim (3dEyes**)
3  *
4  * This program/include file is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as published
6  * by the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program/include file is distributed in the hope that it will be
10  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program (in the main directory of the Linux-NTFS
16  * distribution in the file COPYING); if not, write to the Free Software
17  * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19 #ifndef _NTFS_H
20 #define _NTFS_H
21 
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 
28 #include <fs_attr.h>
29 #include <fs_cache.h>
30 #include <fs_info.h>
31 #include <fs_interface.h>
32 #include <fs_info.h>
33 #include <fs_index.h>
34 #include <fs_query.h>
35 #include <fs_volume.h>
36 #include <lock.h>
37 #include <NodeMonitor.h>
38 #include <util/kernel_cpp.h>
39 
40 #include "config.h"
41 #include "attrib.h"
42 #include "inode.h"
43 #include "volume.h"
44 #include "dir.h"
45 #include "unistr.h"
46 #include "layout.h"
47 #include "index.h"
48 #include "utils.h"
49 #include "ntfstime.h"
50 #include "misc.h"
51 #include "utils.h"
52 #include "bootsect.h"
53 
54 #include "lock.h"
55 #include "ntfsdir.h"
56 
57 #define  	TRACE(...) ;
58 //#define		TRACE dprintf
59 #define 	ERROR dprintf
60 
61 #define 	DEV_FD(dev)	(*(int *)dev->d_private)
62 
63 #define 	LOCK_VOL(vol) \
64 { \
65 if (vol == NULL) { \
66 	return EINVAL; \
67 } \
68 \
69 LOCK((vol)->vlock); \
70 }
71 
72 #define 	UNLOCK_VOL(vol) \
73 { \
74 UNLOCK((vol)->vlock); \
75 }
76 
77 typedef enum {
78 	// Information about amount of free clusters is outdated.
79 	NF_FreeClustersOutdate = (1 << 0),
80 	// Information about amount of	free MFT records is outdated.
81 	NF_FreeMFTOutdate = (1 << 1),
82 } ntfs_state_bits;
83 
84 
85 typedef struct vnode {
86 	u64			vnid;
87 	u64			parent_vnid;
88 	char 		*mime;
89 } vnode;
90 
91 typedef struct filecookie {
92 	int			omode;
93 	off_t 		last_size;
94 } filecookie;
95 
96 typedef struct attrcookie {
97 	int			omode;
98 	ino_t		vnid;
99 	ntfschar*	uname;
100 	int			uname_len;
101 	uint32		type;
102 } attrcookie;
103 
104 typedef struct attrdircookie {
105 	ntfs_inode*	inode;
106 	ntfs_attr_search_ctx *ctx;
107 } attrdircookie;
108 
109 #define ntfs_mark_free_space_outdated(ns) \
110 (ns->state |= (NF_FreeClustersOutdate | NF_FreeMFTOutdate));
111 
112 
113 typedef struct nspace {
114 	ntfs_volume	*ntvol;
115 	char		devicePath[MAX_PATH];
116 	dev_t		id;
117 	int			free_cluster_count;
118 	char		volumeLabel[MAX_PATH];
119 	ulong 		flags;
120 	int 		state;
121 	s64 		free_clusters;
122 	long 		free_mft;
123 	BOOL 		ro;
124 	BOOL 		show_sys_files;
125 	BOOL		fake_attrib;
126 	BOOL 		silent;
127 	BOOL 		force;
128 	BOOL 		debug;
129 	BOOL 		noatime;
130 	BOOL 		no_detach;
131 	lock		vlock;
132 } nspace;
133 
134 
135 #ifdef __cplusplus
136 }
137 #endif
138 
139 
140 #endif
141 
142