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
24extern "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{ \
65if (vol == NULL) { \
66	return EINVAL; \
67} \
68\
69LOCK((vol)->vlock); \
70}
71
72#define 	UNLOCK_VOL(vol) \
73{ \
74UNLOCK((vol)->vlock); \
75}
76
77typedef enum {
78	NF_FreeClustersOutdate	= (1 << 0),  		// Information about amount of free clusters is outdated.
79	NF_FreeMFTOutdate	= (1 << 1),  			//	Information about amount of	free MFT records is outdated.
80} ntfs_state_bits;
81
82
83typedef struct vnode {
84	u64			vnid;
85	u64			parent_vnid;
86	char 		*mime;
87} vnode;
88
89typedef struct filecookie {
90	int			omode;
91	off_t 		last_size;
92} filecookie;
93
94typedef struct attrcookie {
95	int			omode;
96	ino_t		vnid;
97	ntfschar*	uname;
98	int			uname_len;
99	uint32		type;
100} attrcookie;
101
102typedef struct attrdircookie {
103	ntfs_inode*	inode;
104	ntfs_attr_search_ctx *ctx;
105} attrdircookie;
106
107#define ntfs_mark_free_space_outdated(ns) (ns->state |= (NF_FreeClustersOutdate | NF_FreeMFTOutdate));
108
109
110
111typedef struct nspace {
112	ntfs_volume	*ntvol;
113	char		devicePath[MAX_PATH];
114	dev_t		id;
115	int			free_cluster_count;
116	char		volumeLabel[MAX_PATH];
117	ulong 		flags;
118	int 		state;
119	s64 		free_clusters;
120	long 		free_mft;
121	BOOL 		ro;
122	BOOL 		show_sys_files;
123	BOOL		fake_attrib;
124	BOOL 		silent;
125	BOOL 		force;
126	BOOL 		debug;
127	BOOL 		noatime;
128	BOOL 		no_detach;
129	lock		vlock;
130} nspace;
131
132
133#ifdef __cplusplus
134}
135#endif
136
137
138#endif
139
140