return result;
}
+static int crossrename_renameat(vfs_handle_struct *handle,
+ files_struct *srcfsp,
+ const struct smb_filename *smb_fname_src,
+ files_struct *dstfsp,
+ const struct smb_filename *smb_fname_dst)
+{
+ int result = -1;
+
+ START_PROFILE(syscall_renameat);
+
+ if (smb_fname_src->stream_name || smb_fname_dst->stream_name) {
+ errno = ENOENT;
+ goto out;
+ }
+
+ result = rename(smb_fname_src->base_name, smb_fname_dst->base_name);
+ if ((result == -1) && (errno == EXDEV)) {
+ /* Rename across filesystems needed. */
+ result = copy_reg(smb_fname_src->base_name,
+ smb_fname_dst->base_name);
+ }
+
+ out:
+ END_PROFILE(syscall_renameat);
+ return result;
+}
+
+
static struct vfs_fn_pointers vfs_crossrename_fns = {
.connect_fn = crossrename_connect,
- .rename_fn = crossrename_rename
+ .rename_fn = crossrename_rename,
+ .renameat_fn = crossrename_renameat
};
static_decl_vfs;