Documentation
arch
block
certs
crypto
drivers
firmware
fs
9p
adfs
affs
afs
autofs4
befs
bfs
btrfs
cachefiles
ceph
cifs
coda
configfs
cramfs
crypto
debugfs
devpts
dlm
ecryptfs
efivarfs
efs
exofs
exportfs
ext2
ext4
f2fs
fat
freevxfs
fscache
fuse
gfs2
hfs
hfsplus
hostfs
hpfs
hugetlbfs
isofs
jbd2
jffs2
jfs
kernfs
lockd
logfs
minix
ncpfs
nfs
nfs_common
nfsd
nilfs2
nls
notify
ntfs
Kconfig
Makefile
aops.c
aops.h
attrib.c
attrib.h
bitmap.c
bitmap.h
collate.c
collate.h
compress.c
debug.c
debug.h
dir.c
dir.h
endian.h
file.c
index.c
index.h
inode.c
inode.h
layout.h
lcnalloc.c
lcnalloc.h
logfile.c
logfile.h
malloc.h
mft.c
mft.h
mst.c
namei.c
ntfs.h
quota.c
quota.h
runlist.c
runlist.h
super.c
sysctl.c
sysctl.h
time.h
types.h
unistr.c
upcase.c
usnjrnl.c
usnjrnl.h
volume.h
ocfs2
omfs
openpromfs
orangefs
overlayfs
proc
pstore
qnx4
qnx6
quota
ramfs
reiserfs
romfs
sdcardfs
squashfs
sysfs
sysv
tracefs
ubifs
udf
ufs
xfs
Kconfig
Kconfig.binfmt
Makefile
aio.c
anon_inodes.c
attr.c
bad_inode.c
binfmt_aout.c
binfmt_elf.c
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
block_dev.c
buffer.c
char_dev.c
compat.c
compat_binfmt_elf.c
compat_ioctl.c
coredump.c
dax.c
dcache.c
dcookies.c
direct-io.c
drop_caches.c
eventfd.c
eventpoll.c
exec.c
fcntl.c
fhandle.c
file.c
file_table.c
filesystems.c
fs-writeback.c
fs_pin.c
fs_struct.c
inode.c
internal.h
ioctl.c
iomap.c
libfs.c
locks.c
mbcache.c
mount.h
mpage.c
namei.c
namespace.c
no-block.c
nsfs.c
open.c
pipe.c
pnode.c
pnode.h
posix_acl.c
proc_namespace.c
read_write.c
readdir.c
select.c
seq_file.c
signalfd.c
splice.c
stack.c
stat.c
statfs.c
super.c
sync.c
timerfd.c
userfaultfd.c
utimes.c
xattr.c
include
init
ipc
kernel
lib
mm
ndm
net
samples
scripts
security
sound
tools
usr
virt
.cocciconfig
.gitignore
.mailmap
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
README
REPORTING-BUGS
build.config.aarch64
build.config.common
build.config.cuttlefish.aarch64
build.config.cuttlefish.x86_64
build.config.goldfish.arm
build.config.goldfish.arm64
build.config.goldfish.mips
build.config.goldfish.mips64
build.config.goldfish.x86
build.config.goldfish.x86_64
build.config.x86_64
localversion-ndm
verity_dev_keys.x509
git: https://android.googlesource.com/kernel/common branch: android-4.9 commit: 03fcc2fe71308c2d164b4e6cbfc738c63e670444
117 lines
4.2 KiB
C
117 lines
4.2 KiB
C
/*
|
|
* attrib.h - Defines for attribute handling in NTFS Linux kernel driver.
|
|
* Part of the Linux-NTFS project.
|
|
*
|
|
* Copyright (c) 2001-2005 Anton Altaparmakov
|
|
* Copyright (c) 2002 Richard Russon
|
|
*
|
|
* 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 Linux-NTFS
|
|
* 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 _LINUX_NTFS_ATTRIB_H
|
|
#define _LINUX_NTFS_ATTRIB_H
|
|
|
|
#include "endian.h"
|
|
#include "types.h"
|
|
#include "layout.h"
|
|
#include "inode.h"
|
|
#include "runlist.h"
|
|
#include "volume.h"
|
|
|
|
/**
|
|
* ntfs_attr_search_ctx - used in attribute search functions
|
|
* @mrec: buffer containing mft record to search
|
|
* @attr: attribute record in @mrec where to begin/continue search
|
|
* @is_first: if true ntfs_attr_lookup() begins search with @attr, else after
|
|
*
|
|
* Structure must be initialized to zero before the first call to one of the
|
|
* attribute search functions. Initialize @mrec to point to the mft record to
|
|
* search, and @attr to point to the first attribute within @mrec (not necessary
|
|
* if calling the _first() functions), and set @is_first to 'true' (not necessary
|
|
* if calling the _first() functions).
|
|
*
|
|
* If @is_first is 'true', the search begins with @attr. If @is_first is 'false',
|
|
* the search begins after @attr. This is so that, after the first call to one
|
|
* of the search attribute functions, we can call the function again, without
|
|
* any modification of the search context, to automagically get the next
|
|
* matching attribute.
|
|
*/
|
|
typedef struct {
|
|
MFT_RECORD *mrec;
|
|
ATTR_RECORD *attr;
|
|
bool is_first;
|
|
ntfs_inode *ntfs_ino;
|
|
ATTR_LIST_ENTRY *al_entry;
|
|
ntfs_inode *base_ntfs_ino;
|
|
MFT_RECORD *base_mrec;
|
|
ATTR_RECORD *base_attr;
|
|
} ntfs_attr_search_ctx;
|
|
|
|
extern int ntfs_map_runlist_nolock(ntfs_inode *ni, VCN vcn,
|
|
ntfs_attr_search_ctx *ctx);
|
|
extern int ntfs_map_runlist(ntfs_inode *ni, VCN vcn);
|
|
|
|
extern LCN ntfs_attr_vcn_to_lcn_nolock(ntfs_inode *ni, const VCN vcn,
|
|
const bool write_locked);
|
|
|
|
extern runlist_element *ntfs_attr_find_vcn_nolock(ntfs_inode *ni,
|
|
const VCN vcn, ntfs_attr_search_ctx *ctx);
|
|
|
|
int ntfs_attr_lookup(const ATTR_TYPE type, const ntfschar *name,
|
|
const u32 name_len, const IGNORE_CASE_BOOL ic,
|
|
const VCN lowest_vcn, const u8 *val, const u32 val_len,
|
|
ntfs_attr_search_ctx *ctx);
|
|
|
|
extern int load_attribute_list(ntfs_volume *vol, runlist *rl, u8 *al_start,
|
|
const s64 size, const s64 initialized_size);
|
|
|
|
static inline s64 ntfs_attr_size(const ATTR_RECORD *a)
|
|
{
|
|
if (!a->non_resident)
|
|
return (s64)le32_to_cpu(a->data.resident.value_length);
|
|
return sle64_to_cpu(a->data.non_resident.data_size);
|
|
}
|
|
|
|
extern void ntfs_attr_reinit_search_ctx(ntfs_attr_search_ctx *ctx);
|
|
extern ntfs_attr_search_ctx *ntfs_attr_get_search_ctx(ntfs_inode *ni,
|
|
MFT_RECORD *mrec);
|
|
extern void ntfs_attr_put_search_ctx(ntfs_attr_search_ctx *ctx);
|
|
|
|
#ifdef NTFS_RW
|
|
|
|
extern int ntfs_attr_size_bounds_check(const ntfs_volume *vol,
|
|
const ATTR_TYPE type, const s64 size);
|
|
extern int ntfs_attr_can_be_non_resident(const ntfs_volume *vol,
|
|
const ATTR_TYPE type);
|
|
extern int ntfs_attr_can_be_resident(const ntfs_volume *vol,
|
|
const ATTR_TYPE type);
|
|
|
|
extern int ntfs_attr_record_resize(MFT_RECORD *m, ATTR_RECORD *a, u32 new_size);
|
|
extern int ntfs_resident_attr_value_resize(MFT_RECORD *m, ATTR_RECORD *a,
|
|
const u32 new_size);
|
|
|
|
extern int ntfs_attr_make_non_resident(ntfs_inode *ni, const u32 data_size);
|
|
|
|
extern s64 ntfs_attr_extend_allocation(ntfs_inode *ni, s64 new_alloc_size,
|
|
const s64 new_data_size, const s64 data_start);
|
|
|
|
extern int ntfs_attr_set(ntfs_inode *ni, const s64 ofs, const s64 cnt,
|
|
const u8 val);
|
|
|
|
#endif /* NTFS_RW */
|
|
|
|
#endif /* _LINUX_NTFS_ATTRIB_H */
|