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;
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;
}
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;