X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Flookup_table.c;h=432fca4796445852b439285eec61371d5a3a8612;hb=cf373e59a7f6ff7d1fd007c1f22defe508aa67d4;hp=4fbcf7e56a3ccea040c19ffae1e466d34b2e86ff;hpb=394c5bd3292c0f3168416c0a5f25989e557b3cfc;p=wimlib diff --git a/src/lookup_table.c b/src/lookup_table.c index 4fbcf7e5..432fca47 100644 --- a/src/lookup_table.c +++ b/src/lookup_table.c @@ -90,14 +90,14 @@ clone_lookup_table_entry(const struct wim_lookup_table_entry *old) case RESOURCE_WIN32: case RESOURCE_WIN32_ENCRYPTED: #endif + case RESOURCE_IN_FILE_ON_DISK: #ifdef WITH_FUSE case RESOURCE_IN_STAGING_FILE: -#endif - case RESOURCE_IN_FILE_ON_DISK: BUILD_BUG_ON((void*)&old->file_on_disk != (void*)&old->staging_file_name); - new->staging_file_name = TSTRDUP(old->staging_file_name); - if (!new->staging_file_name) +#endif + new->file_on_disk = TSTRDUP(old->file_on_disk); + if (!new->file_on_disk) goto out_free; break; case RESOURCE_IN_ATTACHED_BUFFER: @@ -144,14 +144,17 @@ free_lookup_table_entry(struct wim_lookup_table_entry *lte) { if (lte) { switch (lte->resource_location) { - case RESOURCE_IN_STAGING_FILE: - case RESOURCE_IN_ATTACHED_BUFFER: - case RESOURCE_IN_FILE_ON_DISK: -#ifdef __WIN32__ + #ifdef __WIN32__ case RESOURCE_WIN32: -#endif + case RESOURCE_WIN32_ENCRYPTED: + #endif + #ifdef WITH_FUSE + case RESOURCE_IN_STAGING_FILE: BUILD_BUG_ON((void*)<e->file_on_disk != (void*)<e->staging_file_name); + #endif + case RESOURCE_IN_FILE_ON_DISK: + case RESOURCE_IN_ATTACHED_BUFFER: BUILD_BUG_ON((void*)<e->file_on_disk != (void*)<e->attached_buffer); FREE(lte->file_on_disk); @@ -667,15 +670,18 @@ print_lookup_table_entry(const struct wim_lookup_table_entry *lte, FILE *out) break; #ifdef __WIN32__ case RESOURCE_WIN32: + case RESOURCE_WIN32_ENCRYPTED: #endif case RESOURCE_IN_FILE_ON_DISK: tfprintf(out, T("File on Disk = `%"TS"'\n"), lte->file_on_disk); break; +#ifdef WITH_FUSE case RESOURCE_IN_STAGING_FILE: tfprintf(out, T("Staging File = `%"TS"'\n"), lte->staging_file_name); break; +#endif default: break; } @@ -914,6 +920,19 @@ retrieve_lte_pointer(struct wim_lookup_table_entry *lte) return NULL; } +/* Calculate the SHA1 message digest of a stream and move it from the list of + * unhashed streams to the stream lookup table, possibly joining it with an + * existing lookup table entry for an identical stream. + * + * @lte: An unhashed lookup table entry. + * @lookup_table: Lookup table for the WIM. + * @lte_ret: On success, write a pointer to the resulting lookup table + * entry to this location. This will be the same as @lte + * if it was inserted into the lookup table, or different if + * a duplicate stream was found. + * + * Returns 0 on success; nonzero if there is an error reading the stream. + */ int hash_unhashed_stream(struct wim_lookup_table_entry *lte, struct wim_lookup_table *lookup_table, @@ -952,9 +971,7 @@ hash_unhashed_stream(struct wim_lookup_table_entry *lte, /* No duplicate stream, so we need to insert * this stream into the lookup table and treat * it as a hashed stream. */ - list_del(<e->unhashed_list); lookup_table_insert(lookup_table, lte); - lte->out_refcnt = lte->refcnt; lte->unhashed = 0; } if (lte_ret)