mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
s3: VFS: vfs_crossrename. Implement renameat().
Currently identical to rename(). Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
parent
4a415f63e6
commit
c36ba3aff8
@ -193,9 +193,38 @@ static int crossrename_rename(vfs_handle_struct *handle,
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user