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) {
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;
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;
}
- ret = wimlib_update_image(wim, wim->hdr.image_count, add_cmds,
+
+ /* 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);
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);
}