#include "wimlib/metadata.h"
#include "wimlib/paths.h"
#include "wimlib/progress.h"
-#include "wimlib/xml.h"
+#include "wimlib/xml_windows.h"
/* Saved specification of a "primitive" update operation that was performed. */
struct update_primitive {
goto out_destroy_config;
}
+ if (WIMLIB_IS_WIM_ROOT_PATH(wim_target_path)) {
+ ret = set_windows_specific_info(wim);
+ if (ret)
+ goto out_destroy_config;
+ }
+
ret = 0;
out_destroy_config:
destroy_capture_config(&config);
inode_table = alloca(sizeof(struct wim_inode_table));
sd_set = alloca(sizeof(struct wim_sd_set));
- ret = init_inode_table(inode_table, 9001);
+ ret = init_inode_table(inode_table, 64);
if (ret)
goto out;
WIMLIB_ADD_FLAG_WINCONFIG |
WIMLIB_ADD_FLAG_WIMBOOT |
WIMLIB_ADD_FLAG_NO_REPLACE |
- WIMLIB_ADD_FLAG_TEST_FILE_EXCLUSION))
+ WIMLIB_ADD_FLAG_TEST_FILE_EXCLUSION |
+ WIMLIB_ADD_FLAG_SNAPSHOT |
+ WIMLIB_ADD_FLAG_FILE_PATHS_UNNEEDED))
return WIMLIB_ERR_INVALID_PARAM;
bool is_entire_image = WIMLIB_IS_WIM_ROOT_PATH(cmd->add.wim_target_path);
#endif
#ifdef __WIN32__
- /* Check for flags not supported on Windows */
+ /* Check for flags not supported on Windows. */
if (add_flags & WIMLIB_ADD_FLAG_UNIX_DATA) {
ERROR("Capturing UNIX-specific data is not supported on Windows");
return WIMLIB_ERR_UNSUPPORTED;
ERROR("Dereferencing symbolic links is not supported on Windows");
return WIMLIB_ERR_UNSUPPORTED;
}
+#else
+ /* Check for flags only supported on Windows. */
+
+ /* Currently, SNAPSHOT means Windows VSS. In the future, it perhaps
+ * could be implemented for other types of snapshots, such as btrfs. */
+ if (add_flags & WIMLIB_ADD_FLAG_SNAPSHOT) {
+ ERROR("Snapshot mode is only supported on Windows, where it uses VSS.");
+ return WIMLIB_ERR_UNSUPPORTED;
+ }
#endif
/* VERBOSE implies EXCLUDE_VERBOSE */
mark_image_dirty(imd);
- /* Statistics about the WIM image, such as the numbers of files and
- * directories, may have changed. Call xml_update_image_info() to
- * recalculate these statistics. */
- xml_update_image_info(wim, image);
-
for (size_t i = 0; i < num_cmds; i++)
if (cmds_copy[i].op == WIMLIB_UPDATE_OP_ADD &&
cmds_copy[i].add.add_flags & WIMLIB_ADD_FLAG_RPFIX)