コード例 #1
0
ファイル: export_image.c プロジェクト: APBaltic/wimlib
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;
}
コード例 #2
0
ファイル: add_image.c プロジェクト: ChloeTigre/wimlib
/* 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;
}