]> wimlib.net Git - wimlib/blobdiff - src/update_image.c
update_image.c: Don't set RP_FIX until all commands have finished
[wimlib] / src / update_image.c
index 27f921dcccb99b6d4dbec2bc9e5f8f75251faa25..9a797ec1accd5c232722839d32a809d59aee9272 100644 (file)
@@ -28,6 +28,7 @@
 #include "wimlib/capture.h"
 #include "wimlib/dentry.h"
 #include "wimlib/encoding.h"
+#include "wimlib/endianness.h"
 #include "wimlib/error.h"
 #include "wimlib/lookup_table.h"
 #include "wimlib/metadata.h"
@@ -868,8 +869,6 @@ execute_add_command(struct update_command_journal *j,
 #ifdef WITH_NTFS_3G
        wim_get_current_image_metadata(wim)->ntfs_vol = ntfs_vol;
 #endif
-       if (add_flags & WIMLIB_ADD_FLAG_RPFIX)
-               wim->hdr.flags |= WIM_HDR_FLAG_RP_FIX;
        ret = 0;
        goto out_destroy_config;
 out_cleanup_after_capture:
@@ -1152,7 +1151,6 @@ execute_update_commands(WIMStruct *wim,
                                goto rollback;
                }
 
-               ret = WIMLIB_ERR_INVALID_PARAM;
                switch (cmds[i].op) {
                case WIMLIB_UPDATE_OP_ADD:
                        ret = execute_add_command(j, wim, &cmds[i], inode_table,
@@ -1224,7 +1222,8 @@ check_add_command(struct wimlib_update_command *cmd,
                          WIMLIB_ADD_FLAG_NO_UNSUPPORTED_EXCLUDE |
                          WIMLIB_ADD_FLAG_WINCONFIG |
                          WIMLIB_ADD_FLAG_WIMBOOT |
-                         WIMLIB_ADD_FLAG_NO_REPLACE))
+                         WIMLIB_ADD_FLAG_NO_REPLACE |
+                         WIMLIB_ADD_FLAG_TEST_FILE_EXCLUSION))
                return WIMLIB_ERR_INVALID_PARAM;
 
        bool is_entire_image = WIMLIB_IS_WIM_ROOT_PATH(cmd->add.wim_target_path);
@@ -1477,18 +1476,17 @@ wimlib_update_image(WIMStruct *wim,
         * 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)
+                       wim->hdr.flags |= WIM_HDR_FLAG_RP_FIX;
 out_free_cmds_copy:
        free_update_commands(cmds_copy, num_cmds);
 out:
        return ret;
 }
 
-static int
-update1(WIMStruct *wim, int image, const struct wimlib_update_command *cmd)
-{
-       return wimlib_update_image(wim, image, cmd, 1, 0);
-}
-
 WIMLIBAPI int
 wimlib_delete_path(WIMStruct *wim, int image,
                   const tchar *path, int delete_flags)
@@ -1499,7 +1497,7 @@ wimlib_delete_path(WIMStruct *wim, int image,
        cmd.delete_.wim_path = (tchar *)path;
        cmd.delete_.delete_flags = delete_flags;
 
-       return update1(wim, image, &cmd);
+       return wimlib_update_image(wim, image, &cmd, 1, 0);
 }
 
 WIMLIBAPI int
@@ -1513,7 +1511,7 @@ wimlib_rename_path(WIMStruct *wim, int image,
        cmd.rename.wim_target_path = (tchar *)dest_path;
        cmd.rename.rename_flags = 0;
 
-       return update1(wim, image, &cmd);
+       return wimlib_update_image(wim, image, &cmd, 1, 0);
 }
 
 WIMLIBAPI int
@@ -1529,5 +1527,5 @@ wimlib_add_tree(WIMStruct *wim, int image,
        cmd.add.add_flags = add_flags;
        cmd.add.config_file = NULL;
 
-       return update1(wim, image, &cmd);
+       return wimlib_update_image(wim, image, &cmd, 1, 0);
 }