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)) {