]> wimlib.net Git - wimlib/blobdiff - src/extract.c
Improve helper functions for setting blob locations
[wimlib] / src / extract.c
index 5b1c1cc609de5edf5fbc565d6ed808a1a791603e..5945a4d804cddde3aa90865ab3354d9e8cc32d56 100644 (file)
@@ -181,10 +181,8 @@ read_pwm_blob_header(WIMStruct *pwm, struct blob_descriptor *blob,
        reshdr.offset_in_wim = pwm->in_fd.offset;
        reshdr.uncompressed_size = le64_to_cpu(buf.blob_hdr.uncompressed_size);
        wim_res_hdr_to_desc(&reshdr, pwm, rdesc);
-       blob_set_is_located_in_wim_resource(blob, rdesc);
-       blob->flags = rdesc->flags;
-       blob->size = rdesc->uncompressed_size;
-       blob->offset_in_res = 0;
+       blob_set_is_located_in_nonsolid_wim_resource(blob, rdesc);
+       blob->is_metadata = (rdesc->flags & WIM_RESHDR_FLAG_METADATA) != 0;
        return 0;
 
 read_error:
@@ -230,16 +228,12 @@ read_blobs_from_pipe(struct apply_ctx *ctx,
                        goto out;
 
                if ((found_blob->blob_location != BLOB_NONEXISTENT)
-                   && !(found_blob->flags & WIM_RESHDR_FLAG_METADATA)
+                   && !found_blob->is_metadata
                    && (needed_blob = lookup_blob(blob_table, found_blob->hash))
                    && (needed_blob->out_refcnt))
                {
-                       needed_blob->offset_in_res = found_blob->offset_in_res;
-                       needed_blob->flags = found_blob->flags;
-                       needed_blob->size = found_blob->size;
-
                        blob_unset_is_located_in_wim_resource(found_blob);
-                       blob_set_is_located_in_wim_resource(needed_blob, rdesc);
+                       blob_set_is_located_in_nonsolid_wim_resource(needed_blob, rdesc);
 
                        ret = (*cbs->begin_blob)(needed_blob,
                                                 cbs->begin_blob_ctx);
@@ -877,8 +871,7 @@ out_replace:
 
                utf16le_put_tstr(tchar_name);
 
-               dentry->d_extraction_name = memdup(fixed_name,
-                                                  2 * fixed_name_num_chars + 2);
+               dentry->d_extraction_name = TSTRDUP(fixed_name);
                if (!dentry->d_extraction_name)
                        return WIMLIB_ERR_NOMEM;
                dentry->d_extraction_name_nchars = fixed_name_num_chars;
@@ -1927,8 +1920,7 @@ wimlib_extract_image_from_pipe_with_progress(int pipe_fd,
                if (ret)
                        goto out_wimlib_free;
 
-               if (!(xml_blob.flags & WIM_RESHDR_FLAG_METADATA))
-               {
+               if (!xml_blob.is_metadata) {
                        ERROR("Expected XML data, but found non-metadata resource.");
                        ret = WIMLIB_ERR_INVALID_PIPABLE_WIM;
                        goto out_wimlib_free;
@@ -1997,7 +1989,7 @@ wimlib_extract_image_from_pipe_with_progress(int pipe_fd,
                        goto out_wimlib_free;
                }
 
-               if (!(metadata_blob->flags & WIM_RESHDR_FLAG_METADATA)) {
+               if (!metadata_blob->is_metadata) {
                        ERROR("Expected metadata resource, but found "
                              "non-metadata resource.");
                        ret = WIMLIB_ERR_INVALID_PIPABLE_WIM;