}
sd->sizes = NULL;
sd->descriptors = NULL;
- sd->refcnt = 1;
p = metadata_resource;
p = get_u32(p, &sd->total_length);
free_security_data(struct wim_security_data *sd)
{
if (sd) {
- wimlib_assert(sd->refcnt != 0);
- if (--sd->refcnt == 0) {
- u8 **descriptors = sd->descriptors;
- u32 num_entries = sd->num_entries;
- if (descriptors)
- while (num_entries--)
- FREE(*descriptors++);
- FREE(sd->sizes);
- FREE(sd->descriptors);
- FREE(sd);
- }
+ u8 **descriptors = sd->descriptors;
+ u32 num_entries = sd->num_entries;
+ if (descriptors)
+ while (num_entries--)
+ FREE(*descriptors++);
+ FREE(sd->sizes);
+ FREE(sd->descriptors);
+ FREE(sd);
}
}
new->security_id = sd->num_entries;
copy_hash(new->hash, hash);
+ /* There typically are only a few dozen security descriptors in a
+ * directory tree, so expanding the array of security descriptors by
+ * only 1 extra space each time should not be a problem. */
descriptors = REALLOC(sd->descriptors,
(sd->num_entries + 1) * sizeof(sd->descriptors[0]));
if (!descriptors)