linux: add trivial renameat2 implementation
Just return EINVAL if flags != 0. The Linux man page documents one case of EINVAL as "The filesystem does not support one of the flags in flags." After r351723 userland binaries will try using new system calls. Reported by: mjg Reviewed by: mjg, trasz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21590
This commit is contained in:
parent
65ab1fdd21
commit
2eb6ef203a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=352210
@ -130,8 +130,6 @@ DUMMY(kcmp);
|
||||
DUMMY(finit_module);
|
||||
DUMMY(sched_setattr);
|
||||
DUMMY(sched_getattr);
|
||||
/* Linux 3.14: */
|
||||
DUMMY(renameat2);
|
||||
/* Linux 3.15: */
|
||||
DUMMY(seccomp);
|
||||
DUMMY(memfd_create);
|
||||
|
@ -137,8 +137,6 @@ DUMMY(kcmp);
|
||||
DUMMY(finit_module);
|
||||
DUMMY(sched_setattr);
|
||||
DUMMY(sched_getattr);
|
||||
/* Linux 3.14: */
|
||||
DUMMY(renameat2);
|
||||
/* Linux 3.15: */
|
||||
DUMMY(seccomp);
|
||||
DUMMY(memfd_create);
|
||||
|
@ -130,8 +130,6 @@ DUMMY(kcmp);
|
||||
DUMMY(finit_module);
|
||||
DUMMY(sched_setattr);
|
||||
DUMMY(sched_getattr);
|
||||
/* Linux 3.14: */
|
||||
DUMMY(renameat2);
|
||||
/* Linux 3.15: */
|
||||
DUMMY(seccomp);
|
||||
DUMMY(memfd_create);
|
||||
|
@ -685,10 +685,30 @@ linux_rename(struct thread *td, struct linux_rename_args *args)
|
||||
|
||||
int
|
||||
linux_renameat(struct thread *td, struct linux_renameat_args *args)
|
||||
{
|
||||
struct linux_renameat2_args renameat2_args = {
|
||||
.olddfd = args->olddfd,
|
||||
.oldname = args->oldname,
|
||||
.newdfd = args->newdfd,
|
||||
.newname = args->newname,
|
||||
.flags = 0
|
||||
};
|
||||
|
||||
return (linux_renameat2(td, &renameat2_args));
|
||||
}
|
||||
|
||||
int
|
||||
linux_renameat2(struct thread *td, struct linux_renameat2_args *args)
|
||||
{
|
||||
char *from, *to;
|
||||
int error, olddfd, newdfd;
|
||||
|
||||
if (args->flags != 0) {
|
||||
linux_msg(td, "renameat2 unsupported flags 0x%x\n",
|
||||
args->flags);
|
||||
return (EINVAL);
|
||||
}
|
||||
|
||||
olddfd = (args->olddfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->olddfd;
|
||||
newdfd = (args->newdfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->newdfd;
|
||||
LCONVPATHEXIST_AT(td, args->oldname, &from, olddfd);
|
||||
|
@ -134,8 +134,6 @@ DUMMY(finit_module);
|
||||
DUMMY(sched_setattr);
|
||||
DUMMY(sched_getattr);
|
||||
/* Linux 3.14: */
|
||||
DUMMY(renameat2);
|
||||
/* Linux 3.15: */
|
||||
DUMMY(seccomp);
|
||||
DUMMY(memfd_create);
|
||||
/* Linux 3.18: */
|
||||
|
Loading…
Reference in New Issue
Block a user