X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fupdate_image.c;h=763f4dc410948e95251537cf6c8cf6705980df3d;hp=9453f2e02cf9d23bee7ae83861c18089e9974131;hb=2200ddb2ab85b390daa140de5338ac9f023d3683;hpb=7b36eb8076864060c623f1e39bdf26b363eaa2e5 diff --git a/src/update_image.c b/src/update_image.c index 9453f2e0..763f4dc4 100644 --- a/src/update_image.c +++ b/src/update_image.c @@ -21,16 +21,22 @@ * along with wimlib; if not, see http://www.gnu.org/licenses/. */ -#include "wimlib_internal.h" -#include "dentry.h" -#include "lookup_table.h" -#include "security.h" -#include "xml.h" -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif -#ifdef __WIN32__ -# include "win32.h" +#include "wimlib/capture.h" +#include "wimlib/dentry.h" +#include "wimlib/error.h" +#include "wimlib/lookup_table.h" +#include "wimlib/metadata.h" +#ifdef WITH_NTFS_3G +# include "wimlib/ntfs_3g.h" /* for do_ntfs_umount() */ #endif +#include "wimlib/paths.h" +#include "wimlib/xml.h" + +#include /* Overlays @branch onto @target, both of which must be directories. */ static int @@ -128,7 +134,7 @@ attach_branch(struct wim_dentry **root_p, struct wim_dentry *branch, /* Walk the path to the branch, creating filler directories as needed. * */ parent = *root_p; - while ((slash = tstrchr(target_path, T('/')))) { + while ((slash = tstrchr(target_path, WIM_PATH_SEPARATOR))) { *slash = T('\0'); dentry = get_dentry_child_with_name(parent, target_path); if (!dentry) { @@ -144,7 +150,7 @@ attach_branch(struct wim_dentry **root_p, struct wim_dentry *branch, * trailing slashes were tripped. */ do { ++target_path; - } while (*target_path == T('/')); + } while (*target_path == WIM_PATH_SEPARATOR); } /* If the target path already existed, overlay the branch onto it. @@ -168,8 +174,6 @@ execute_add_command(WIMStruct *wim, int add_flags; tchar *fs_source_path; tchar *wim_target_path; - struct wim_inode_table inode_table; - struct sd_set sd_set; struct wim_image_metadata *imd; struct list_head unhashed_streams; struct add_image_params params; @@ -217,19 +221,17 @@ execute_add_command(WIMStruct *wim, extra_arg = NULL; } - ret = init_inode_table(&inode_table, 9001); + ret = init_inode_table(¶ms.inode_table, 9001); if (ret) goto out; - ret = init_sd_set(&sd_set, imd->security_data); + ret = init_sd_set(¶ms.sd_set, imd->security_data); if (ret) goto out_destroy_inode_table; INIT_LIST_HEAD(&unhashed_streams); wim->lookup_table->unhashed_streams = &unhashed_streams; params.lookup_table = wim->lookup_table; - params.inode_table = &inode_table; - params.sd_set = &sd_set; params.config = config; params.add_flags = add_flags; params.progress_func = progress_func; @@ -241,11 +243,13 @@ execute_add_command(WIMStruct *wim, progress.scan.wim_target_path = wim_target_path; progress_func(WIMLIB_PROGRESS_MSG_SCAN_BEGIN, &progress); } - config->_prefix = fs_source_path; - config->_prefix_num_tchars = tstrlen(fs_source_path); + if (config) { + config->_prefix = fs_source_path; + config->_prefix_num_tchars = tstrlen(fs_source_path); + } if (wim_target_path[0] == T('\0')) - add_flags |= WIMLIB_ADD_FLAG_ROOT; + 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"\"", @@ -272,7 +276,7 @@ execute_add_command(WIMStruct *wim, #ifdef WITH_NTFS_3G imd->ntfs_vol = ntfs_vol; #endif - inode_table_prepare_inode_list(&inode_table, &imd->inode_list); + inode_table_prepare_inode_list(¶ms.inode_table, &imd->inode_list); ret = 0; rollback_sd = false; if (add_flags & WIMLIB_ADD_FLAG_RPFIX) @@ -285,9 +289,9 @@ out_ntfs_umount: #endif free_dentry_tree(branch, wim->lookup_table); out_destroy_sd_set: - destroy_sd_set(&sd_set, rollback_sd); + destroy_sd_set(¶ms.sd_set, rollback_sd); out_destroy_inode_table: - destroy_inode_table(&inode_table); + destroy_inode_table(¶ms.inode_table); out: return ret; } @@ -458,6 +462,7 @@ update_op_to_str(int op) return T("rename"); default: wimlib_assert(0); + return NULL; } } @@ -593,7 +598,7 @@ check_update_commands(struct wimlib_update_command *cmds, size_t num_cmds, } -extern void +static void free_update_commands(struct wimlib_update_command *cmds, size_t num_cmds) { if (cmds) {