2 * updatewim.c - A program to add a file or directory tree to the first image of
5 * The following copying information applies to this specific source code file:
7 * Written in 2014 by Eric Biggers <ebiggers3@gmail.com>
9 * To the extent possible under law, the author(s) have dedicated all copyright
10 * and related and neighboring rights to this software to the public domain
11 * worldwide via the Creative Commons Zero 1.0 Universal Public Domain
12 * Dedication (the "CC0").
14 * This software is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the CC0 for more details.
18 * You should have received a copy of the CC0 along with this software; if not
19 * see <http://creativecommons.org/publicdomain/zero/1.0/>.
25 int main(int argc, char **argv)
29 char *wim_target_path;
31 WIMStruct *wim = NULL;
33 /* Check for the correct number of arguments. */
35 fprintf(stderr, "Usage: updatewim WIMFILE WIM_PATH EXTERNAL_PATH\n");
40 wim_target_path = argv[2];
41 fs_source_path = argv[3];
43 /* Open the WIM file. */
44 ret = wimlib_open_wim(wimfile, 0, &wim);
45 if (ret != 0) /* Always should check the error codes. */
48 /* Update the WIM image. In this simple example, we add a single file
49 * or directory tree to the specified location in the first image of the
50 * WIM file, using the default options.
52 * wimlib_add_tree() is actually sufficient for this case, but for the
53 * sake of demonstration we will use the more general function
54 * wimlib_update_image(). */
56 struct wimlib_update_command cmds[1];
58 memset(cmds, 0, sizeof(cmds));
60 /* Set up an "add" operation.
62 * Other available operations include WIMLIB_UPDATE_OP_RENAME and
63 * WIMLIB_UPDATE_OP_DELETE. */
64 cmds[0].op = WIMLIB_UPDATE_OP_ADD;
66 /* Set the arguments to the operation.
68 * Make sure to fill in 'rename' or 'delete_' instead of 'add' if doing
69 * a rename or delete operation instead! */
70 cmds[0].add.wim_target_path = wim_target_path;
71 cmds[0].add.fs_source_path = fs_source_path;
73 /* Note: we don't need to explicitly set 'cmds[0].add.config_file' and
74 * 'cmds[0].add.add_flags' because we zeroed the 'struct
75 * wimlib_update_command', and zero means use the defaults. */
77 ret = wimlib_update_image(wim, /* WIMStruct to update */
78 1, /* 1-based index of the image to update */
79 cmds, /* Array of command structures */
80 1, /* Number of command structures in array */
81 0); /* WIMLIB_UPDATE_FLAG_* flags (0 for defaults) */
85 /* Overwrite the WIM file.
87 * Normally, this will append new data to the file, rather than
88 * rebuilding the entire file.
90 * Changes do not take effect on-disk until this is done. */
92 ret = wimlib_overwrite(wim, /* WIMStruct to commit to the underlying file */
93 0, /* WIMLIB_WRITE_FLAG_* flags (0 for defaults) */
94 0); /* Number of compressor threads (0 means default) */
97 /* Free the WIMStruct. Has no effect if the pointer to it is NULL. */
100 /* Check for error status. */
102 fprintf(stderr, "wimlib error %d: %s\n",
103 ret, wimlib_get_error_string(ret));
106 /* Free global memory (optional). */
107 wimlib_global_cleanup();