static int lte_rollback_export(struct wim_lookup_table_entry *lte, void *_lookup_table) { struct wim_lookup_table *lookup_table = _lookup_table; lte->refcnt -= lte->out_refcnt; if (lte->was_exported) { lookup_table_unlink(lookup_table, lte); free_lookup_table_entry(lte); } return 0; }
/* Creates and appends a 'struct wim_image_metadata' for an empty image. * * The resulting image will be the last in the WIM, so its index will be * the new value of wim->hdr.image_count. */ static int add_empty_image_metadata(WIMStruct *wim) { int ret; struct wim_lookup_table_entry *metadata_lte; struct wim_security_data *sd; struct wim_image_metadata *imd; /* Create lookup table entry for this metadata resource (for now really * just a dummy entry). */ ret = WIMLIB_ERR_NOMEM; metadata_lte = new_lookup_table_entry(); if (!metadata_lte) goto out; metadata_lte->flags = WIM_RESHDR_FLAG_METADATA; metadata_lte->unhashed = 1; /* Create empty security data (no security descriptors). */ sd = new_wim_security_data(); if (!sd) goto out_free_metadata_lte; imd = new_image_metadata(); if (!imd) goto out_free_security_data; /* A NULL root_dentry indicates a completely empty image, without even a * root directory. */ imd->root_dentry = NULL; imd->metadata_lte = metadata_lte; imd->security_data = sd; imd->modified = 1; /* Append as next image index. */ ret = append_image_metadata(wim, imd); if (ret) put_image_metadata(imd, NULL); goto out; out_free_security_data: free_wim_security_data(sd); out_free_metadata_lte: free_lookup_table_entry(metadata_lte); out: return ret; }