]> git.saurik.com Git - apple/copyfile.git/blobdiff - copyfile.c
copyfile-166.40.1.tar.gz
[apple/copyfile.git] / copyfile.c
index 286d0ff8584649e037380c798225d5b937766bb5..443dbc5cf878a5ee0d4d044d79aba8c203a81ac1 100644 (file)
@@ -2744,6 +2744,16 @@ static int copyfile_stat(copyfile_state_t s)
                return -1;
        added_flags |= (dst_sb.st_flags & COPYFILE_PRESERVE_FLAGS);
 
+       /*
+        * The caller requested that copyfile attempts to preserve UF_TRACKED
+        * on the destination. This can be used to avoid dangling docIDs when
+        * the copy races against a process that sets the flag on newly created
+        * documents for instance.
+        */
+       if (s->flags & COPYFILE_PRESERVE_DST_TRACKED) {
+               added_flags |= (dst_sb.st_flags & UF_TRACKED);
+       }
+
        /* Copy file flags, masking out any we don't want to preserve */
        dst_flags = (s->sb.st_flags & ~COPYFILE_OMIT_FLAGS) | added_flags;
        (void)fchflags(s->dst_fd, dst_flags);