FREE(windows_info->product_name);
FREE(windows_info->edition_id);
FREE(windows_info->installation_type);
+ FREE(windows_info->hal);
FREE(windows_info->product_type);
+ FREE(windows_info->product_suite);
for (i = 0; i < windows_info->num_languages; i++)
FREE(windows_info->languages[i]);
FREE(windows_info->languages);
+ FREE(windows_info->default_language);
FREE(windows_info->system_root);
}
return WIMLIB_ERR_NOMEM;
if (old->system_root && !(new->system_root = STRDUP(old->system_root)))
return WIMLIB_ERR_NOMEM;
+ if (old->windows_version_exists) {
+ new->windows_version_exists = true;
+ memcpy(&new->windows_version, &old->windows_version,
+ sizeof(old->windows_version));
+ }
return 0;
}
*
* @dest_image_name and @dest_image_description are ignored if they are NULL;
* otherwise, they are used to override the image name and/or image description
- * from the XML data in the source WIM file. */
+ * from the XML data in the source WIM file.
+ *
+ * On failure, WIMLIB_ERR_NOMEM is returned and no changes are made. Otherwise,
+ * 0 is returned and the WIM information at *new_wim_info_p is modified.
+ */
int xml_export_image(const struct wim_info *old_wim_info,
int image,
struct wim_info **new_wim_info_p,
wimlib_assert(image >= 1 && image <= old_wim_info->num_images);
-
if (*new_wim_info_p) {
new_wim_info = *new_wim_info_p;
} else {
}
#endif
-/* Parameters for calculate_dentry_statistics(). */
-struct image_statistics {
- struct lookup_table *lookup_table;
- u64 *dir_count;
- u64 *file_count;
- u64 *total_bytes;
- u64 *hard_link_bytes;
-};
-
static int calculate_dentry_statistics(struct dentry *dentry, void *arg)
{
struct image_info *info = arg;
/* Update directory count and file count.
*
* Each dentry counts as either a file or a directory, but not both.
- * The root directory is an exception: it is not counted.
+ * The root directory is an exception: it is not counted at all.
*
* Symbolic links and junction points (and presumably other reparse
* points) count as regular files. This is despite the fact that
out_destroy_image_info:
destroy_image_info(image_info);
+ wim_info->num_images--;
out_free_wim_info:
- if (w->wim_info)
- wim_info->num_images--;
- else
+ if (wim_info != w->wim_info)
FREE(wim_info);
ERROR("Out of memory");
return WIMLIB_ERR_NOMEM;