]> wimlib.net Git - wimlib/blobdiff - src/write.c
Implement wimlib_iterate_dir_tree()
[wimlib] / src / write.c
index 54257e046f2effae9916681cfe4f60ff3be427a5..75193dfc78b3365529ab9f135b1dd13ba3e5cc88 100644 (file)
@@ -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;
        }
@@ -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;