X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fjoin.c;h=2c459d30aa1d4826a80835cf3ee16021d823eabe;hp=6c2b0cdcc3f3a47271684c20d0d982400e76c725;hb=c9482ee98e12fa3f1073e4fc3c56f5eef3c40f32;hpb=e8c3ca2d1d0cac3d64985b45a9f654d2029a7518 diff --git a/src/join.c b/src/join.c index 6c2b0cdc..2c459d30 100644 --- a/src/join.c +++ b/src/join.c @@ -32,66 +32,11 @@ #include "wimlib/metadata.h" #include "wimlib/resource.h" #include "wimlib/swm.h" -#include "wimlib/wim.h" #include "wimlib/write.h" #include "wimlib/xml.h" #include /* for qsort() */ -static int -move_lte_to_table(struct wim_lookup_table_entry *lte, void *combined_table) -{ - hlist_del(<e->hash_list); - lookup_table_insert((struct wim_lookup_table*)combined_table, lte); - return 0; -} - -static void -lookup_table_join(struct wim_lookup_table *combined_table, - struct wim_lookup_table *part_table) -{ - for_lookup_table_entry(part_table, move_lte_to_table, combined_table); - part_table->num_entries = 0; -} - -/* - * merge_lookup_tables() - Merge lookup tables from the parts of a split WIM. - * - * @w specifies the first part, while @additional_swms and @num_additional_swms - * specify an array of pointers to the WIMStruct's for additional split WIM parts. - * - * The reason we join the lookup tables is so we only have to search one lookup - * table to find the location of a resource in the entire WIM. - */ -void -merge_lookup_tables(WIMStruct *w, - WIMStruct **additional_swms, - unsigned num_additional_swms) -{ - for (unsigned i = 0; i < num_additional_swms; i++) - lookup_table_join(w->lookup_table, additional_swms[i]->lookup_table); -} - -static int -move_lte_to_orig_table(struct wim_lookup_table_entry *lte, void *_wim) -{ - WIMStruct *wim = _wim; - if (lte->wim != wim) { - move_lte_to_table(lte, lte->wim->lookup_table); - wim->lookup_table->num_entries--; - } - return 0; -} - -/* Undo merge_lookup_tables(), given the first WIM part that contains the merged - * lookup table. */ -void -unmerge_lookup_table(WIMStruct *wim) -{ - for_lookup_table_entry(wim->lookup_table, move_lte_to_orig_table, wim); -} - - static int join_wims(WIMStruct **swms, unsigned num_swms, WIMStruct *joined_wim, int write_flags, @@ -154,9 +99,7 @@ join_wims(WIMStruct **swms, unsigned num_swms, } /* Write lookup table, XML data, and optional integrity table */ - for (i = 0; i < num_swms; i++) - lookup_table_join(joined_wim->lookup_table, swms[i]->lookup_table); - + merge_lookup_tables(joined_wim, swms, num_swms); free_wim_info(joined_wim->wim_info); joined_wim->wim_info = swms[0]->wim_info; joined_wim->image_metadata = swms[0]->image_metadata; @@ -215,8 +158,7 @@ wimlib_join(const tchar * const *swm_names, if (ret) goto out_free_wims; - ret = wimlib_create_new_wim(wimlib_get_compression_type(swms[0]), - &joined_wim); + ret = wimlib_create_new_wim(swms[0]->compression_type, &joined_wim); if (ret) goto out_free_wims;