fs/ntfs3: Refactor ni_parse_reparse
Change argument from void* to struct REPARSE_DATA_BUFFER* We copy data to buffer, so we can read it later in ntfs_read_mft. Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
14a981193e
commit
cd4c76ff80
@ -1710,18 +1710,16 @@ out:
|
|||||||
/*
|
/*
|
||||||
* ni_parse_reparse
|
* ni_parse_reparse
|
||||||
*
|
*
|
||||||
* Buffer is at least 24 bytes.
|
* buffer - memory for reparse buffer header
|
||||||
*/
|
*/
|
||||||
enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
|
enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
|
||||||
void *buffer)
|
struct REPARSE_DATA_BUFFER *buffer)
|
||||||
{
|
{
|
||||||
const struct REPARSE_DATA_BUFFER *rp = NULL;
|
const struct REPARSE_DATA_BUFFER *rp = NULL;
|
||||||
u8 bits;
|
u8 bits;
|
||||||
u16 len;
|
u16 len;
|
||||||
typeof(rp->CompressReparseBuffer) *cmpr;
|
typeof(rp->CompressReparseBuffer) *cmpr;
|
||||||
|
|
||||||
static_assert(sizeof(struct REPARSE_DATA_BUFFER) <= 24);
|
|
||||||
|
|
||||||
/* Try to estimate reparse point. */
|
/* Try to estimate reparse point. */
|
||||||
if (!attr->non_res) {
|
if (!attr->non_res) {
|
||||||
rp = resident_data_ex(attr, sizeof(struct REPARSE_DATA_BUFFER));
|
rp = resident_data_ex(attr, sizeof(struct REPARSE_DATA_BUFFER));
|
||||||
@ -1807,6 +1805,9 @@ enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
|
|||||||
return REPARSE_NONE;
|
return REPARSE_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buffer != rp)
|
||||||
|
memcpy(buffer, rp, sizeof(struct REPARSE_DATA_BUFFER));
|
||||||
|
|
||||||
/* Looks like normal symlink. */
|
/* Looks like normal symlink. */
|
||||||
return REPARSE_LINK;
|
return REPARSE_LINK;
|
||||||
}
|
}
|
||||||
|
@ -547,7 +547,7 @@ struct ATTR_FILE_NAME *ni_fname_type(struct ntfs_inode *ni, u8 name_type,
|
|||||||
struct ATTR_LIST_ENTRY **entry);
|
struct ATTR_LIST_ENTRY **entry);
|
||||||
int ni_new_attr_flags(struct ntfs_inode *ni, enum FILE_ATTRIBUTE new_fa);
|
int ni_new_attr_flags(struct ntfs_inode *ni, enum FILE_ATTRIBUTE new_fa);
|
||||||
enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
|
enum REPARSE_SIGN ni_parse_reparse(struct ntfs_inode *ni, struct ATTRIB *attr,
|
||||||
void *buffer);
|
struct REPARSE_DATA_BUFFER *buffer);
|
||||||
int ni_write_inode(struct inode *inode, int sync, const char *hint);
|
int ni_write_inode(struct inode *inode, int sync, const char *hint);
|
||||||
#define _ni_write_inode(i, w) ni_write_inode(i, w, __func__)
|
#define _ni_write_inode(i, w) ni_write_inode(i, w, __func__)
|
||||||
int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
|
int ni_fiemap(struct ntfs_inode *ni, struct fiemap_extent_info *fieinfo,
|
||||||
|
Loading…
Reference in New Issue
Block a user