From df0177485b975d32a02bc8ccc6d19a7148906b2b Mon Sep 17 00:00:00 2001 From: szaka Date: Sat, 8 Mar 2008 12:04:25 +0000 Subject: [PATCH] fix incorrect data and allocation sizes in index and inode FILE_NAME attributes for some resident unnamed $DATA attributes and for which CHKDSK reported minor inconsistencies. --- libntfs-3g/attrib.c | 4 ++++ libntfs-3g/dir.c | 2 ++ 2 files changed, 6 insertions(+) diff --git a/libntfs-3g/attrib.c b/libntfs-3g/attrib.c index 19b1b69f..e2c6790d 100644 --- a/libntfs-3g/attrib.c +++ b/libntfs-3g/attrib.c @@ -2726,6 +2726,10 @@ int ntfs_resident_attr_record_add(ntfs_inode *ni, ATTR_TYPES type, goto put_err_out; } } + if (type == AT_DATA && name == AT_UNNAMED) { + ni->data_size = size; + ni->allocated_size = (size + 7) & ~7; + } ntfs_inode_mark_dirty(ni); ntfs_attr_put_search_ctx(ctx); return offset; diff --git a/libntfs-3g/dir.c b/libntfs-3g/dir.c index bed0d181..5e7b3131 100644 --- a/libntfs-3g/dir.c +++ b/libntfs-3g/dir.c @@ -1203,6 +1203,8 @@ static ntfs_inode *__ntfs_create(ntfs_inode *dir_ni, fn->last_data_change_time = utc2ntfs(ni->last_data_change_time); fn->last_mft_change_time = utc2ntfs(ni->last_mft_change_time); fn->last_access_time = utc2ntfs(ni->last_access_time); + fn->data_size = cpu_to_sle64(ni->data_size); + fn->allocated_size = cpu_to_sle64(ni->allocated_size); memcpy(fn->file_name, name, name_len * sizeof(ntfschar)); /* Add FILE_NAME attribute to inode. */ if (ntfs_attr_add(ni, AT_FILE_NAME, AT_UNNAMED, 0, (u8*)fn, fn_len)) {