]> wimlib.net Git - wimlib/blobdiff - src/write.c
Add calls to wimlib_global_init()
[wimlib] / src / write.c
index 3b2aa18e0477b405288403ebed0b337c7aafa799..75193dfc78b3365529ab9f135b1dd13ba3e5cc88 100644 (file)
@@ -377,7 +377,7 @@ write_wim_resource(struct wim_lookup_table_entry *lte,
        if (!(flags & WIMLIB_RESOURCE_FLAG_RECOMPRESS) &&
            lte->resource_location == RESOURCE_IN_WIM &&
            out_ctype != WIMLIB_COMPRESSION_TYPE_NONE &&
-           wimlib_get_compression_type(lte->wim) == out_ctype)
+           lte->wim->compression_type == out_ctype)
        {
                flags |= WIMLIB_RESOURCE_FLAG_RAW;
                write_ctx.doing_sha = false;
@@ -1207,7 +1207,7 @@ main_thread_process_next_stream(struct wim_lookup_table_entry *lte, void *_ctx)
            ctx->out_ctype == WIMLIB_COMPRESSION_TYPE_NONE ||
            (lte->resource_location == RESOURCE_IN_WIM &&
             !(ctx->write_resource_flags & WIMLIB_RESOURCE_FLAG_RECOMPRESS) &&
-            wimlib_get_compression_type(lte->wim) == ctx->out_ctype))
+            lte->wim->compression_type == ctx->out_ctype))
        {
                /* Stream is too small or isn't being compressed.  Process it by
                 * the main thread when we have a chance.  We can't necessarily
@@ -1713,7 +1713,7 @@ write_wim_streams(WIMStruct *wim, int image, int write_flags,
        return write_stream_list(&stream_list,
                                 wim->lookup_table,
                                 wim->out_fd,
-                                wimlib_get_compression_type(wim),
+                                wim->compression_type,
                                 write_flags,
                                 num_threads,
                                 progress_func);
@@ -1798,6 +1798,7 @@ finish_write(WIMStruct *w, int image, int write_flags,
                        struct wim_header checkpoint_hdr;
                        memcpy(&checkpoint_hdr, &hdr, sizeof(struct wim_header));
                        zero_resource_entry(&checkpoint_hdr.integrity);
+                       checkpoint_hdr.flags |= WIM_HDR_FLAG_WRITE_IN_PROGRESS;
                        ret = write_header(&checkpoint_hdr, w->out_fd);
                        if (ret)
                                goto out_close_wim;
@@ -2112,11 +2113,11 @@ overwrite_wim_inplace(WIMStruct *w, int write_flags,
                return ret;
        }
 
-       /* Write header with write in progress flag set. */
-       w->hdr.flags |= WIM_HDR_FLAG_WRITE_IN_PROGRESS;
-       ret = write_header(&w->hdr, w->out_fd);
-       w->hdr.flags &= ~WIM_HDR_FLAG_WRITE_IN_PROGRESS;
+       /* Set WIM_HDR_FLAG_WRITE_IN_PROGRESS flag in header. */
+       ret = write_header_flags(w->hdr.flags | WIM_HDR_FLAG_WRITE_IN_PROGRESS,
+                                w->out_fd);
        if (ret) {
+               ERROR_WITH_ERRNO("Error updating WIM header flags");
                close_wim_writable(w);
                goto out_unlock_wim;
        }
@@ -2133,7 +2134,7 @@ overwrite_wim_inplace(WIMStruct *w, int write_flags,
        ret = write_stream_list(&stream_list,
                                w->lookup_table,
                                w->out_fd,
-                               wimlib_get_compression_type(w),
+                               w->compression_type,
                                write_flags,
                                num_threads,
                                progress_func);
@@ -2226,13 +2227,18 @@ wimlib_overwrite(WIMStruct *w, int write_flags,
                 wimlib_progress_func_t progress_func)
 {
        int ret;
+       u32 orig_hdr_flags;
 
        write_flags &= WIMLIB_WRITE_MASK_PUBLIC;
 
        if (!w->filename)
                return WIMLIB_ERR_NO_FILENAME;
 
+       orig_hdr_flags = w->hdr.flags;
+       if (write_flags & WIMLIB_WRITE_FLAG_IGNORE_READONLY_FLAG)
+               w->hdr.flags &= ~WIM_HDR_FLAG_READONLY;
        ret = can_modify_wim(w);
+       w->hdr.flags = orig_hdr_flags;
        if (ret)
                return ret;