*/
/*
- * Copyright (C) 2012, 2013, 2014, 2015 Eric Biggers
+ * Copyright (C) 2012-2016 Eric Biggers
*
* This file is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* details.
*
* You should have received a copy of the GNU Lesser General Public License
- * along with this file; if not, see http://www.gnu.org/licenses/.
+ * along with this file; if not, see https://www.gnu.org/licenses/.
*/
#ifdef HAVE_CONFIG_H
/* Enable rollbacks */
for_blob_in_table(dest_wim->blob_table, blob_set_not_exported, NULL);
+ /* Forbid exports where the destination WIM already contains image(s)
+ * with the requested name(s). However, allow multi-image exports where
+ * there is a duplication among the source names only. */
+ if (!(export_flags & WIMLIB_EXPORT_FLAG_NO_NAMES)) {
+ for (src_image = start_src_image;
+ src_image <= end_src_image;
+ src_image++)
+ {
+ const tchar *name = dest_name ? dest_name :
+ wimlib_get_image_name(src_wim, src_image);
+
+ if (wimlib_image_name_in_use(dest_wim, name)) {
+ ERROR("There is already an image named \"%"TS"\" "
+ "in the destination WIM", name);
+ ret = WIMLIB_ERR_IMAGE_NAME_COLLISION;
+ goto out_rollback;
+ }
+ }
+ }
+
/* Export each requested image. */
for (src_image = start_src_image;
src_image <= end_src_image;
else
next_dest_description = wimlib_get_image_description(src_wim, src_image);
- /* Check for name conflict. */
- if (wimlib_image_name_in_use(dest_wim, next_dest_name)) {
- ERROR("There is already an image named \"%"TS"\" "
- "in the destination WIM", next_dest_name);
- ret = WIMLIB_ERR_IMAGE_NAME_COLLISION;
- goto out_rollback;
- }
-
/* Load metadata for source image into memory. */
ret = select_wim_image(src_wim, src_image);
if (ret)
while (dest_wim->hdr.image_count > orig_dest_image_count)
{
put_image_metadata(dest_wim->image_metadata[
- --dest_wim->hdr.image_count], NULL);
+ --dest_wim->hdr.image_count]);
}
for_blob_in_table(dest_wim->blob_table, blob_rollback_export,
dest_wim->blob_table);