X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fadd_image.c;h=263c2e757330ecb5931a19a98763a1d21cf5d79b;hp=74d93f9f208d87c6c31e05df4d1bd028375d6867;hb=143db75c035e6ecaca451ce70a4ed58a01102b43;hpb=bb40342796df9c677f6903b596abf4e9e5769845 diff --git a/src/add_image.c b/src/add_image.c index 74d93f9f..263c2e75 100644 --- a/src/add_image.c +++ b/src/add_image.c @@ -121,12 +121,12 @@ out: static struct wimlib_update_command * capture_sources_to_add_cmds(const struct wimlib_capture_source *sources, size_t num_sources, - int add_image_flags, + int add_flags, const struct wimlib_capture_config *config) { struct wimlib_update_command *add_cmds; - DEBUG("Translating %zu capture sources to wimlib_update_command's", + DEBUG("Translating %zu capture sources to `struct wimlib_update_command's", num_sources); add_cmds = CALLOC(num_sources, sizeof(add_cmds[0])); if (add_cmds) { @@ -137,7 +137,7 @@ capture_sources_to_add_cmds(const struct wimlib_capture_source *sources, sources[i].fs_source_path, sources[i].wim_target_path); add_cmds[i].op = WIMLIB_UPDATE_OP_ADD; - add_cmds[i].add.add_flags = add_image_flags; + add_cmds[i].add.add_flags = add_flags; add_cmds[i].add.config = (struct wimlib_capture_config*)config; add_cmds[i].add.fs_source_path = sources[i].fs_source_path; add_cmds[i].add.wim_target_path = sources[i].wim_target_path; @@ -146,41 +146,50 @@ capture_sources_to_add_cmds(const struct wimlib_capture_source *sources, return add_cmds; } +/* Adds an image to the WIMStruct from multiple on-disk directory trees, or a + * NTFS volume. */ WIMLIBAPI int wimlib_add_image_multisource(WIMStruct *wim, const struct wimlib_capture_source *sources, size_t num_sources, const tchar *name, const struct wimlib_capture_config *config, - int add_image_flags, + int add_flags, wimlib_progress_func_t progress_func) { int ret; struct wimlib_update_command *add_cmds; - DEBUG("Adding image \"%"TS"\" from %zu sources (add_image_flags=%x)", - name, num_sources, add_image_flags); + DEBUG("Adding image \"%"TS"\" from %zu sources (add_flags=%#x)", + name, num_sources, add_flags); + /* Add the new image (initially empty) */ ret = wimlib_add_empty_image(wim, name, NULL); if (ret) goto out; + /* Translate the "capture sources" into generic update commands. */ add_cmds = capture_sources_to_add_cmds(sources, num_sources, - add_image_flags, config); + add_flags, config); if (!add_cmds) { ret = WIMLIB_ERR_NOMEM; goto out_delete_image; } + + /* Delegate the work to wimlib_update_image(). */ ret = wimlib_update_image(wim, wim->hdr.image_count, add_cmds, num_sources, 0, progress_func); FREE(add_cmds); if (ret) goto out_delete_image; - if (add_image_flags & WIMLIB_ADD_IMAGE_FLAG_BOOT) + + /* Success; set boot index if requested. */ + if (add_flags & WIMLIB_ADD_FLAG_BOOT) wim->hdr.boot_idx = wim->hdr.image_count; ret = 0; goto out; out_delete_image: + /* Roll back the image we added */ put_image_metadata(wim->image_metadata[wim->hdr.image_count - 1], wim->lookup_table); xml_delete_image(&wim->wim_info, wim->hdr.image_count); @@ -189,20 +198,23 @@ out: return ret; } +/* Adds an image to the WIMStruct from an on-disk directory tree or NTFS volume. */ WIMLIBAPI int wimlib_add_image(WIMStruct *wim, const tchar *source, const tchar *name, const struct wimlib_capture_config *config, - int add_image_flags, + int add_flags, wimlib_progress_func_t progress_func) { + /* Delegate the work to the more general wimlib_add_image_multisource(). + * */ const struct wimlib_capture_source capture_src = { .fs_source_path = (tchar*)source, - .wim_target_path = NULL, + .wim_target_path = T(""), .reserved = 0, }; return wimlib_add_image_multisource(wim, &capture_src, 1, name, - config, add_image_flags, + config, add_flags, progress_func); }