X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fupdate_image.c;h=eb848e361b96fe2203712ce1e686b98b869806ac;hb=cbd31ea4e13a4e7479b2a19dc59efd9f2dd86e5e;hp=10093a0cec7241db63c37862edc2b57108deaf1d;hpb=0ab938cc9554f3d5c6835c14b9177823e0e9b7bb;p=wimlib diff --git a/src/update_image.c b/src/update_image.c index 10093a0c..eb848e36 100644 --- a/src/update_image.c +++ b/src/update_image.c @@ -88,13 +88,13 @@ do_overlay(struct wim_dentry *target, struct wim_dentry *branch) /* Attach or overlay a branch onto the WIM image. * * @root_p: - * Pointer to the root of the WIM image, or pointer to NULL if it has not - * been created yet. + * Pointer to the root of the WIM image, or pointer to NULL if it has not + * been created yet. * @branch - * Branch to add. + * Branch to add. * @target_path: - * Path in the WIM image to add the branch, with leading and trailing - * slashes stripped. + * Path in the WIM image to add the branch, with leading and trailing + * slashes stripped. */ static int attach_branch(struct wim_dentry **root_p, struct wim_dentry *branch, @@ -252,11 +252,9 @@ execute_add_command(WIMStruct *wim, if (wim_target_path[0] == T('\0')) params.add_flags |= WIMLIB_ADD_FLAG_ROOT; ret = (*capture_tree)(&branch, fs_source_path, ¶ms); - if (ret) { - ERROR("Failed to build dentry tree for \"%"TS"\"", - fs_source_path); + if (ret) goto out_destroy_sd_set; - } + if (branch) { /* Use the target name, not the source name, for * the root of each branch from a capture @@ -307,8 +305,8 @@ execute_delete_command(WIMStruct *wim, bool is_root; wimlib_assert(delete_cmd->op == WIMLIB_UPDATE_OP_DELETE); - flags = delete_cmd->delete.delete_flags; - wim_path = delete_cmd->delete.wim_path; + flags = delete_cmd->delete_.delete_flags; + wim_path = delete_cmd->delete_.wim_path; DEBUG("Deleting WIM path \"%"TS"\" (flags=%#x)", wim_path, flags); @@ -384,7 +382,7 @@ rename_wim_path(WIMStruct *wim, const tchar *from, const tchar *to) * directory */ if (!dentry_is_directory(dst)) return -ENOTDIR; - if (inode_has_children(dst->d_inode)) + if (dentry_has_children(dst)) return -ENOTEMPTY; } parent_of_dst = dst->parent; @@ -514,6 +512,23 @@ execute_update_commands(WIMStruct *wim, return ret; } + +tchar *winpats[] = { + T("/$ntfs.log"), + T("/hiberfil.sys"), + T("/pagefile.sys"), + T("/System Volume Information"), + T("/RECYCLER"), + T("/Windows/CSC"), +}; + +static const struct wimlib_capture_config winconfig = { + .exclusion_pats = { + .num_pats = ARRAY_LEN(winpats), + .pats = winpats, + }, +}; + static int check_add_command(struct wimlib_update_command *cmd, const struct wim_header *hdr) @@ -629,7 +644,7 @@ free_update_commands(struct wimlib_update_command *cmds, size_t num_cmds) free_capture_config(cmds[i].add.config); break; case WIMLIB_UPDATE_OP_DELETE: - FREE(cmds[i].delete.wim_path); + FREE(cmds[i].delete_.wim_path); break; case WIMLIB_UPDATE_OP_RENAME: FREE(cmds[i].rename.wim_source_path); @@ -648,6 +663,7 @@ copy_update_commands(const struct wimlib_update_command *cmds, { int ret; struct wimlib_update_command *cmds_copy; + const struct wimlib_capture_config *config; cmds_copy = CALLOC(num_cmds, sizeof(cmds[0])); if (!cmds_copy) @@ -664,8 +680,11 @@ copy_update_commands(const struct wimlib_update_command *cmds, if (!cmds_copy[i].add.fs_source_path || !cmds_copy[i].add.wim_target_path) goto oom; - if (cmds[i].add.config) { - ret = copy_and_canonicalize_capture_config(cmds[i].add.config, + config = cmds[i].add.config; + if (cmds[i].add.add_flags & WIMLIB_ADD_FLAG_WINCONFIG) + config = &winconfig; + if (config) { + ret = copy_and_canonicalize_capture_config(config, &cmds_copy[i].add.config); if (ret) goto err; @@ -673,11 +692,11 @@ copy_update_commands(const struct wimlib_update_command *cmds, cmds_copy[i].add.add_flags = cmds[i].add.add_flags; break; case WIMLIB_UPDATE_OP_DELETE: - cmds_copy[i].delete.wim_path = - canonicalize_wim_path(cmds[i].delete.wim_path); - if (!cmds_copy[i].delete.wim_path) + cmds_copy[i].delete_.wim_path = + canonicalize_wim_path(cmds[i].delete_.wim_path); + if (!cmds_copy[i].delete_.wim_path) goto oom; - cmds_copy[i].delete.delete_flags = cmds[i].delete.delete_flags; + cmds_copy[i].delete_.delete_flags = cmds[i].delete_.delete_flags; break; case WIMLIB_UPDATE_OP_RENAME: cmds_copy[i].rename.wim_source_path =