]> wimlib.net Git - wimlib/blobdiff - src/resource.c
WIMBoot: Update WimOverlay.dat directly when WOF not running
[wimlib] / src / resource.c
index bbf929a3b311ca1130bbcb8c6ce91c620f5d79f6..b45db5973a9e261dfb316e0c355dbee04ce5f130 100644 (file)
@@ -878,6 +878,34 @@ wim_reshdr_to_data(const struct wim_reshdr *reshdr, WIMStruct *wim, void **buf_r
        return wim_resource_spec_to_data(&rspec, buf_ret);
 }
 
+int
+wim_reshdr_to_hash(const struct wim_reshdr *reshdr, WIMStruct *wim,
+                  u8 hash[SHA1_HASH_SIZE])
+{
+       struct wim_resource_spec rspec;
+       int ret;
+       struct wim_lookup_table_entry *lte;
+
+       wim_res_hdr_to_spec(reshdr, wim, &rspec);
+
+       lte = new_lookup_table_entry();
+       if (lte == NULL)
+               return WIMLIB_ERR_NOMEM;
+
+       lte_bind_wim_resource_spec(lte, &rspec);
+       lte->flags = rspec.flags;
+       lte->size = rspec.uncompressed_size;
+       lte->offset_in_res = 0;
+       lte->unhashed = 1;
+
+       ret = sha1_stream(lte);
+
+       lte_unbind_wim_resource_spec(lte);
+       copy_hash(hash, lte->hash);
+       free_lookup_table_entry(lte);
+       return ret;
+}
+
 struct streamifier_context {
        struct read_stream_list_callbacks cbs;
        struct wim_lookup_table_entry *cur_stream;
@@ -1035,8 +1063,8 @@ hasher_end_stream(struct wim_lookup_table_entry *lte, int status, void *_ctx)
                                        get_sha1_string(lte->hash, expected_hashstr);
                                        get_sha1_string(hash, actual_hashstr);
                                        ERROR("The stream is corrupted!\n"
-                                             "        (Expected SHA1=%s,\n"
-                                             "              got SHA1=%s)",
+                                             "        (Expected SHA1=%"TS",\n"
+                                             "              got SHA1=%"TS")",
                                              expected_hashstr, actual_hashstr);
                                }
                                ret = WIMLIB_ERR_INVALID_RESOURCE_HASH;