-
-#ifdef WITH_FUSE
-/* Remove an alternate data stream from a dentry.
- *
- * The corresponding lookup table entry for the stream is NOT changed.
- *
- * @dentry: The dentry
- * @ads_entry: The alternate data stream entry (it MUST be one of the
- * ads_entry's in the array dentry->ads_entries).
- */
-void dentry_remove_ads(struct dentry *dentry, struct ads_entry *ads_entry)
-{
- u16 idx;
- u16 following;
-
- wimlib_assert(dentry->num_ads);
- idx = ads_entry - dentry->ads_entries;
- wimlib_assert(idx < dentry->num_ads);
- following = dentry->num_ads - idx - 1;
-
- destroy_ads_entry(ads_entry);
- memcpy(ads_entry, ads_entry + 1, following * sizeof(struct ads_entry));
-
- /* We moved the ADS entries. Adjust the stream lists. */
- for (u16 i = 0; i < following; i++) {
- struct list_head *cur = &ads_entry[i].lte_group_list.list;
- struct list_head *prev = cur->prev;
- struct list_head *next;
- if ((u8*)prev >= (u8*)(ads_entry + 1)
- && (u8*)prev < (u8*)(ads_entry + following + 1)) {
- cur->prev = (struct list_head*)((u8*)prev - sizeof(struct ads_entry));
- } else {
- prev->next = cur;
- }
- next = cur->next;
- if ((u8*)next >= (u8*)(ads_entry + 1)
- && (u8*)next < (u8*)(ads_entry + following + 1)) {
- cur->next = (struct list_head*)((u8*)next - sizeof(struct ads_entry));
- } else {
- next->prev = cur;
- }
- }
- dentry->num_ads--;
-}
-#endif
-
-static void inode_free_ads_entries(struct inode *inode)