+#ifdef XNU_KERNEL_PRIVATE
+extern errno_t VNOP_RENAMEX(vnode_t, vnode_t, struct componentname *, vnode_t, vnode_t, struct componentname *, vfs_rename_flags_t, vfs_context_t);
+#endif /* XNU_KERNEL_PRIVATE */
+
+#ifdef KERNEL_PRIVATE
+struct vnop_compound_rename_args {
+ struct vnodeop_desc *a_desc;
+
+ vnode_t a_fdvp; /* Directory from which to rename */
+ vnode_t *a_fvpp; /* Vnode to rename (can point to a NULL pointer) */
+ struct componentname *a_fcnp; /* Source name */
+ struct vnode_attr *a_fvap;
+
+ vnode_t a_tdvp; /* Directory to which to rename */
+ vnode_t *a_tvpp; /* Vnode to rename over (can point to a NULL pointer) */
+ struct componentname *a_tcnp; /* Destination name */
+ struct vnode_attr *a_tvap;
+
+ uint32_t a_flags; /* Control flags: currently unused */
+ vfs_context_t a_context; /* Authorization context */
+ int (*a_rename_authorizer)( /* Authorization callback */
+ vnode_t fdvp, /* As passed to VNOP */
+ vnode_t fvp, /* Vnode to rename */
+ struct componentname *fcnp, /* As passed to VNOP */
+ vnode_t tdvp, /* As passed to VNOP */
+ vnode_t tvp, /* Vnode to rename over (can be NULL) */
+ struct componentname *tcnp, /* As passed to VNOP */
+ vfs_context_t ctx, /* As passed to VNOP */
+ void *reserved); /* Always NULL */
+ void *a_reserved; /* Currently unused */
+};
+#endif /* KERNEL_PRIVATE */
+
+#ifdef XNU_KERNEL_PRIVATE
+errno_t
+VNOP_COMPOUND_RENAME(
+ struct vnode *fdvp, struct vnode **fvpp, struct componentname *fcnp, struct vnode_attr *fvap,
+ struct vnode *tdvp, struct vnode **tvpp, struct componentname *tcnp, struct vnode_attr *tvap,
+ uint32_t flags, vfs_context_t ctx);
+#endif /* XNU_KERNEL_PRIVATE */
+