This file is indexed.

/usr/include/ntfs-3g/volume.h is in ntfs-3g-dev 1:2017.3.23-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
/*
 * volume.h - Exports for NTFS volume handling. Originated from the Linux-NTFS project.
 *
 * Copyright (c) 2000-2004 Anton Altaparmakov
 * Copyright (c) 2004-2005 Richard Russon
 * Copyright (c) 2005-2006 Yura Pakhuchiy
 * Copyright (c) 2005-2009 Szabolcs Szakacsits
 * Copyright (c) 2010      Jean-Pierre Andre
 *
 * This program/include file is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program/include file is distributed in the hope that it will be
 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program (in the main directory of the NTFS-3G
 * distribution in the file COPYING); if not, write to the Free Software
 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef _NTFS_VOLUME_H
#define _NTFS_VOLUME_H

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
	/* Do not #include <sys/mount.h> here : conflicts with <linux/fs.h> */
#ifdef HAVE_MNTENT_H
#include <mntent.h>
#endif

/* Forward declaration */
typedef struct _ntfs_volume ntfs_volume;

#include "param.h"
#include "types.h"
#include "support.h"
#include "device.h"
#include "inode.h"
#include "attrib.h"
#include "index.h"

/**
 * enum ntfs_mount_flags -
 *
 * Flags for the ntfs_mount() function.
 */
enum {
	NTFS_MNT_NONE                   = 0x00000000,
	NTFS_MNT_RDONLY                 = 0x00000001,
	NTFS_MNT_MAY_RDONLY             = 0x02000000, /* Allow fallback to ro */
	NTFS_MNT_FORENSIC               = 0x04000000, /* No modification during
	                                               * mount. */
	NTFS_MNT_EXCLUSIVE              = 0x08000000,
	NTFS_MNT_RECOVER                = 0x10000000,
	NTFS_MNT_IGNORE_HIBERFILE       = 0x20000000,
};
typedef unsigned long ntfs_mount_flags;

/**
 * enum ntfs_mounted_flags -
 *
 * Flags returned by the ntfs_check_if_mounted() function.
 */
typedef enum {
	NTFS_MF_MOUNTED		= 1,	/* Device is mounted. */
	NTFS_MF_ISROOT		= 2,	/* Device is mounted as system root. */
	NTFS_MF_READONLY	= 4,	/* Device is mounted read-only. */
} ntfs_mounted_flags;

extern int ntfs_check_if_mounted(const char *file, unsigned long *mnt_flags);

typedef enum {
	NTFS_VOLUME_OK			= 0,
	NTFS_VOLUME_SYNTAX_ERROR	= 11,
	NTFS_VOLUME_NOT_NTFS		= 12,
	NTFS_VOLUME_CORRUPT		= 13,
	NTFS_VOLUME_HIBERNATED		= 14,
	NTFS_VOLUME_UNCLEAN_UNMOUNT	= 15,
	NTFS_VOLUME_LOCKED		= 16,
	NTFS_VOLUME_RAID		= 17,
	NTFS_VOLUME_UNKNOWN_REASON	= 18,
	NTFS_VOLUME_NO_PRIVILEGE	= 19,
	NTFS_VOLUME_OUT_OF_MEMORY	= 20,
	NTFS_VOLUME_FUSE_ERROR		= 21,
	NTFS_VOLUME_INSECURE		= 22
} ntfs_volume_status;

/**
 * enum ntfs_volume_state_bits -
 *
 * Defined bits for the state field in the ntfs_volume structure.
 */
typedef enum {
	NV_ReadOnly,		/* 1: Volume is read-only. */
	NV_CaseSensitive,	/* 1: Volume is mounted case-sensitive. */
	NV_LogFileEmpty,	/* 1: $logFile journal is empty. */
	NV_ShowSysFiles,	/* 1: Show NTFS metafiles. */
	NV_ShowHidFiles,	/* 1: Show files marked hidden. */
	NV_HideDotFiles,	/* 1: Set hidden flag on dot files */
	NV_Compression,		/* 1: allow compression */
	NV_NoFixupWarn,		/* 1: Do not log fixup errors */
} ntfs_volume_state_bits;

#define  test_nvol_flag(nv, flag)	 test_bit(NV_##flag, (nv)->state)
#define   set_nvol_flag(nv, flag)	  set_bit(NV_##flag, (nv)->state)
#define clear_nvol_flag(nv, flag)	clear_bit(NV_##flag, (nv)->state)

#define NVolReadOnly(nv)		 test_nvol_flag(nv, ReadOnly)
#define NVolSetReadOnly(nv)		  set_nvol_flag(nv, ReadOnly)
#define NVolClearReadOnly(nv)		clear_nvol_flag(nv, ReadOnly)

#define NVolCaseSensitive(nv)		 test_nvol_flag(nv, CaseSensitive)
#define NVolSetCaseSensitive(nv)	  set_nvol_flag(nv, CaseSensitive)
#define NVolClearCaseSensitive(nv)	clear_nvol_flag(nv, CaseSensitive)

#define NVolLogFileEmpty(nv)		 test_nvol_flag(nv, LogFileEmpty)
#define NVolSetLogFileEmpty(nv)		  set_nvol_flag(nv, LogFileEmpty)
#define NVolClearLogFileEmpty(nv)	clear_nvol_flag(nv, LogFileEmpty)

#define NVolShowSysFiles(nv)		 test_nvol_flag(nv, ShowSysFiles)
#define NVolSetShowSysFiles(nv)		  set_nvol_flag(nv, ShowSysFiles)
#define NVolClearShowSysFiles(nv)	clear_nvol_flag(nv, ShowSysFiles)

#define NVolShowHidFiles(nv)		 test_nvol_flag(nv, ShowHidFiles)
#define NVolSetShowHidFiles(nv)		  set_nvol_flag(nv, ShowHidFiles)
#define NVolClearShowHidFiles(nv)	clear_nvol_flag(nv, ShowHidFiles)

#define NVolHideDotFiles(nv)		 test_nvol_flag(nv, HideDotFiles)
#define NVolSetHideDotFiles(nv)		  set_nvol_flag(nv, HideDotFiles)
#define NVolClearHideDotFiles(nv)	clear_nvol_flag(nv, HideDotFiles)

#define NVolCompression(nv)		 test_nvol_flag(nv, Compression)
#define NVolSetCompression(nv)		  set_nvol_flag(nv, Compression)
#define NVolClearCompression(nv)	clear_nvol_flag(nv, Compression)

#define NVolNoFixupWarn(nv)		 test_nvol_flag(nv, NoFixupWarn)
#define NVolSetNoFixupWarn(nv)		  set_nvol_flag(nv, NoFixupWarn)
#define NVolClearNoFixupWarn(nv)	clear_nvol_flag(nv, NoFixupWarn)

/*
 * NTFS version 1.1 and 1.2 are used by Windows NT4.
 * NTFS version 2.x is used by Windows 2000 Beta
 * NTFS version 3.0 is used by Windows 2000.
 * NTFS version 3.1 is used by Windows XP, 2003 and Vista.
 */

#define NTFS_V1_1(major, minor) ((major) == 1 && (minor) == 1)
#define NTFS_V1_2(major, minor) ((major) == 1 && (minor) == 2)
#define NTFS_V2_X(major, minor) ((major) == 2)
#define NTFS_V3_0(major, minor) ((major) == 3 && (minor) == 0)
#define NTFS_V3_1(major, minor) ((major) == 3 && (minor) == 1)

#define NTFS_BUF_SIZE 8192

/**
 * struct _ntfs_volume - structure describing an open volume in memory.
 */
struct _ntfs_volume {
	union {
		struct ntfs_device *dev;	/* NTFS device associated with
						   the volume. */
		void *sb;	/* For kernel porting compatibility. */
	};
	char *vol_name;		/* Name of the volume. */
	unsigned long state;	/* NTFS specific flags describing this volume.
				   See ntfs_volume_state_bits above. */

	ntfs_inode *vol_ni;	/* ntfs_inode structure for FILE_Volume. */
	u8 major_ver;		/* Ntfs major version of volume. */
	u8 minor_ver;		/* Ntfs minor version of volume. */
	le16 flags;		/* Bit array of VOLUME_* flags. */

	u16 sector_size;	/* Byte size of a sector. */
	u8 sector_size_bits;	/* Log(2) of the byte size of a sector. */
	u32 cluster_size;	/* Byte size of a cluster. */
	u32 mft_record_size;	/* Byte size of a mft record. */
	u32 indx_record_size;	/* Byte size of a INDX record. */
	u8 cluster_size_bits;	/* Log(2) of the byte size of a cluster. */
	u8 mft_record_size_bits;/* Log(2) of the byte size of a mft record. */
	u8 indx_record_size_bits;/* Log(2) of the byte size of a INDX record. */

	/* Variables used by the cluster and mft allocators. */
	u8 mft_zone_multiplier;	/* Initial mft zone multiplier. */
	u8 full_zones;		/* cluster zones which are full */
	s64 mft_data_pos;	/* Mft record number at which to allocate the
				   next mft record. */
	LCN mft_zone_start;	/* First cluster of the mft zone. */
	LCN mft_zone_end;	/* First cluster beyond the mft zone. */
	LCN mft_zone_pos;	/* Current position in the mft zone. */
	LCN data1_zone_pos;	/* Current position in the first data zone. */
	LCN data2_zone_pos;	/* Current position in the second data zone. */

	s64 nr_clusters;	/* Volume size in clusters, hence also the
				   number of bits in lcn_bitmap. */
	ntfs_inode *lcnbmp_ni;	/* ntfs_inode structure for FILE_Bitmap. */
	ntfs_attr *lcnbmp_na;	/* ntfs_attr structure for the data attribute
				   of FILE_Bitmap. Each bit represents a
				   cluster on the volume, bit 0 representing
				   lcn 0 and so on. A set bit means that the
				   cluster and vice versa. */

	LCN mft_lcn;		/* Logical cluster number of the data attribute
				   for FILE_MFT. */
	ntfs_inode *mft_ni;	/* ntfs_inode structure for FILE_MFT. */
	ntfs_attr *mft_na;	/* ntfs_attr structure for the data attribute
				   of FILE_MFT. */
	ntfs_attr *mftbmp_na;	/* ntfs_attr structure for the bitmap attribute
				   of FILE_MFT. Each bit represents an mft
				   record in the $DATA attribute, bit 0
				   representing mft record 0 and so on. A set
				   bit means that the mft record is in use and
				   vice versa. */

	ntfs_inode *secure_ni;	/* ntfs_inode structure for FILE $Secure */
	ntfs_index_context *secure_xsii; /* index for using $Secure:$SII */
	ntfs_index_context *secure_xsdh; /* index for using $Secure:$SDH */
	int secure_reentry;  /* check for non-rentries */
	unsigned int secure_flags;  /* flags, see security.h for values */

	int mftmirr_size;	/* Size of the FILE_MFTMirr in mft records. */
	LCN mftmirr_lcn;	/* Logical cluster number of the data attribute
				   for FILE_MFTMirr. */
	ntfs_inode *mftmirr_ni;	/* ntfs_inode structure for FILE_MFTMirr. */
	ntfs_attr *mftmirr_na;	/* ntfs_attr structure for the data attribute
				   of FILE_MFTMirr. */

	ntfschar *upcase;	/* Upper case equivalents of all 65536 2-byte
				   Unicode characters. Obtained from
				   FILE_UpCase. */
	u32 upcase_len;		/* Length in Unicode characters of the upcase
				   table. */
	ntfschar *locase;	/* Lower case equivalents of all 65536 2-byte
				   Unicode characters. Only if option
				   case_ignore is set. */

	ATTR_DEF *attrdef;	/* Attribute definitions. Obtained from
				   FILE_AttrDef. */
	s32 attrdef_len;	/* Size of the attribute definition table in
				   bytes. */

	s64 free_clusters; 	/* Track the number of free clusters which
				   greatly improves statfs() performance */
	s64 free_mft_records; 	/* Same for free mft records (see above) */
	BOOL efs_raw;		/* volume is mounted for raw access to
				   efs-encrypted files */
#ifdef XATTR_MAPPINGS
	struct XATTRMAPPING *xattr_mapping;
#endif /* XATTR_MAPPINGS */
#if CACHE_INODE_SIZE
	struct CACHE_HEADER *xinode_cache;
#endif
#if CACHE_NIDATA_SIZE
	struct CACHE_HEADER *nidata_cache;
#endif
#if CACHE_LOOKUP_SIZE
	struct CACHE_HEADER *lookup_cache;
#endif
#if CACHE_SECURID_SIZE
	struct CACHE_HEADER *securid_cache;
#endif
#if CACHE_LEGACY_SIZE
	struct CACHE_HEADER *legacy_cache;
#endif

};

extern const char *ntfs_home;

extern ntfs_volume *ntfs_volume_alloc(void);

extern ntfs_volume *ntfs_volume_startup(struct ntfs_device *dev,
		ntfs_mount_flags flags);

extern ntfs_volume *ntfs_device_mount(struct ntfs_device *dev,
		ntfs_mount_flags flags);

extern ntfs_volume *ntfs_mount(const char *name, ntfs_mount_flags flags);
extern int ntfs_umount(ntfs_volume *vol, const BOOL force);

extern int ntfs_version_is_supported(ntfs_volume *vol);
extern int ntfs_volume_check_hiberfile(ntfs_volume *vol, int verbose);
extern int ntfs_logfile_reset(ntfs_volume *vol);

extern int ntfs_volume_write_flags(ntfs_volume *vol, const le16 flags);

extern int ntfs_volume_error(int err);
extern void ntfs_mount_error(const char *vol, const char *mntpoint, int err);

extern int ntfs_volume_get_free_space(ntfs_volume *vol);
extern int ntfs_volume_rename(ntfs_volume *vol, const ntfschar *label,
		int label_len);

extern int ntfs_set_shown_files(ntfs_volume *vol,
		BOOL show_sys_files, BOOL show_hid_files, BOOL hide_dot_files);
extern int ntfs_set_locale(void);
extern int ntfs_set_ignore_case(ntfs_volume *vol);

#endif /* defined _NTFS_VOLUME_H */