- if (ref_flags & WIMLIB_REF_FLAG_GIFT) {
- struct lookup_tables tables;
-
- tables.dest_table = wim->lookup_table;
-
- for (i = 0; i < num_resource_wims; i++) {
-
- tables.src_table = resource_wims[i]->lookup_table;
-
- ret = for_lookup_table_entry(resource_wims[i]->lookup_table,
- lte_gift, &tables);
- if (ret)
- goto out_rollback;
- }
- } else {
- for (i = 0; i < num_resource_wims; i++) {
- ret = for_lookup_table_entry(resource_wims[i]->lookup_table,
- lte_clone_if_new, wim->lookup_table);
- if (ret)
- goto out_rollback;
- }
+ if (need_blob(info, blob)) {
+ blob = clone_blob_descriptor(blob);
+ if (unlikely(!blob))
+ return WIMLIB_ERR_NOMEM;
+ reference_blob(info, blob);