+static int
+do_wimlib_reference_resources(WIMStruct *wim, WIMStruct **resource_wims,
+ unsigned num_resource_wims, int ref_flags)
+{
+ unsigned i;
+ int ret;
+
+ 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;
+ }
+ }
+ return 0;
+
+out_rollback:
+ for_lookup_table_entry(wim->lookup_table, lte_delete_if_new,
+ wim->lookup_table);
+ return ret;
+}
+