u64 dentry_total_length(const struct dentry *dentry)
{
u64 length = (dentry->length + 7) & ~7;
- for (u16 i = 0 ; i < dentry->num_ads; i++)
+ for (u16 i = 0; i < dentry->num_ads; i++)
length += ads_entry_length(&dentry->ads_entries[i]);
return length;
}
struct ads_entry *dentry_get_ads_entry(struct dentry *dentry,
const char *stream_name)
{
- size_t stream_name_len = strlen(stream_name);
+ size_t stream_name_len;
if (!stream_name)
return NULL;
- for (u16 i = 0; i < dentry->num_ads; i++)
- if (ads_entry_has_name(&dentry->ads_entries[i],
- stream_name, stream_name_len))
- return &dentry->ads_entries[i];
+ if (dentry->num_ads) {
+ u16 i = 0;
+ stream_name_len = strlen(stream_name);
+ do {
+ if (ads_entry_has_name(&dentry->ads_entries[i],
+ stream_name, stream_name_len))
+ return &dentry->ads_entries[i];
+ } while (++i != dentry->num_ads);
+ }
return NULL;
}
struct ads_entry *ads_entries;
struct ads_entry *new_entry;
+ DEBUG("Add alternate data stream %s:%s",
+ dentry->file_name_utf8, stream_name);
+
if (dentry->num_ads == 0xffff)
return NULL;
num_ads = dentry->num_ads + 1;
cur->next->prev = cur;
}
}
- dentry->ads_entries = ads_entries;
new_entry = &ads_entries[num_ads - 1];
+ ads_entry_init(new_entry);
if (change_ads_name(new_entry, stream_name) != 0)
return NULL;
+ dentry->ads_entries = ads_entries;
dentry->num_ads = num_ads;
- ads_entry_init(new_entry);
return new_entry;
}
printf("Hash = 0x");
print_hash(hash);
putchar('\n');
+ putchar('\n');
}
}
for (u16 i = 0; i < dentry->num_ads; i++) {
return get_names(&entry->stream_name, &entry->stream_name_utf8,
&entry->stream_name_len,
&entry->stream_name_utf8_len,
- new_name);
+ new_name);
}
/* Parameters for calculate_dentry_statistics(). */
if (p - orig_p < dentry->length)
p = put_zeroes(p, dentry->length - (p - orig_p));
- p = put_zeroes(p, (8 - (p - orig_p) % 8) % 8);
+ p = put_zeroes(p, (8 - dentry->length % 8) % 8);
for (u16 i = 0; i < dentry->num_ads; i++) {
p = put_u64(p, ads_entry_length(&dentry->ads_entries[i]));
p = put_u16(p, dentry->ads_entries[i].stream_name_len);
p = put_bytes(p, dentry->ads_entries[i].stream_name_len,
(u8*)dentry->ads_entries[i].stream_name);
+ p = put_u16(p, 0);
p = put_zeroes(p, (8 - (p - orig_p) % 8) % 8);
}
return p;