fixes for attribute list handling

(Logical change 1.578)
edge.strict_endians
(none)!yura 2004-09-22 19:22:40 +00:00
parent 528dcd3401
commit bff0f300ff
2 changed files with 23 additions and 8 deletions

View File

@ -2453,10 +2453,13 @@ int ntfs_attr_record_rm(ntfs_attr_search_ctx *ctx) {
}
ntfs_inode_mark_dirty(ni);
if (type == AT_ATTRIBUTE_LIST) {
if (NInoAttrList(base_ni) && base_ni->attr_list)
free(base_ni->attr_list);
if (NInoAttrListNonResident(base_ni) && base_ni->attr_list_rl)
free(base_ni->attr_list_rl);
NInoClearAttrList(base_ni);
NInoClearAttrListNonResident(base_ni);
NInoAttrListClearDirty(base_ni);
free(base_ni->attr_list);
free(base_ni->attr_list_rl);
}
if (le32_to_cpu(ctx->mrec->bytes_in_use) -
le16_to_cpu(ctx->mrec->attrs_offset) == 8) {

View File

@ -179,13 +179,20 @@ int ntfs_attrlist_entry_add(ntfs_inode *ni, ATTR_RECORD *attr)
goto err_out;
}
memcpy(rl, na->rl, rl_size);
free(ni->attr_list_rl);
if (NInoAttrListNonResident(ni) && ni->attr_list_rl)
free(ni->attr_list_rl);
ni->attr_list_rl = rl;
NInoSetAttrListNonResident(ni);
} else
NInoClearAttrListNonResident(ni);
} else {
if (NInoAttrListNonResident(ni)) {
if (ni->attr_list_rl)
free(ni->attr_list_rl);
NInoClearAttrListNonResident(ni);
}
}
free(ni->attr_list);
if (ni->attr_list)
free(ni->attr_list);
ni->attr_list = new_al;
ni->attr_list_size = new_al_len;
NInoAttrListSetDirty(ni);
@ -278,8 +285,13 @@ int ntfs_attrlist_entry_rm(ntfs_attr_search_ctx *ctx)
break;
}
NInoSetAttrListNonResident(base_ni);
} else
NInoClearAttrListNonResident(base_ni);
} else {
if (NInoAttrListNonResident(base_ni)) {
if (base_ni->attr_list_rl)
free(base_ni->attr_list_rl);
NInoClearAttrListNonResident(base_ni);
}
}
free(base_ni->attr_list);
base_ni->attr_list = new_al;