Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F133019043
D21590.id61900.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D21590.id61900.diff
View Options
Index: sys/amd64/linux/linux_dummy.c
===================================================================
--- sys/amd64/linux/linux_dummy.c
+++ sys/amd64/linux/linux_dummy.c
@@ -130,8 +130,6 @@
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
-/* Linux 3.14: */
-DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);
Index: sys/amd64/linux/linux_proto.h
===================================================================
--- sys/amd64/linux/linux_proto.h
+++ sys/amd64/linux/linux_proto.h
@@ -1125,9 +1125,9 @@
char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
struct linux_renameat2_args {
- char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+ char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
- char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+ char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
};
Index: sys/amd64/linux/linux_systrace_args.c
===================================================================
--- sys/amd64/linux/linux_systrace_args.c
+++ sys/amd64/linux/linux_systrace_args.c
@@ -2297,9 +2297,9 @@
/* linux_renameat2 */
case 316: {
struct linux_renameat2_args *p = params;
- iarg[0] = p->oldfd; /* l_int */
+ iarg[0] = p->olddfd; /* l_int */
uarg[1] = (intptr_t) p->oldname; /* const char * */
- iarg[2] = p->newfd; /* l_int */
+ iarg[2] = p->newdfd; /* l_int */
uarg[3] = (intptr_t) p->newname; /* const char * */
uarg[4] = p->flags; /* unsigned int */
*n_args = 5;
Index: sys/amd64/linux/syscalls.master
===================================================================
--- sys/amd64/linux/syscalls.master
+++ sys/amd64/linux/syscalls.master
@@ -550,8 +550,8 @@
315 AUE_NULL STD { int linux_sched_getattr(l_pid_t pid, \
void *attr, l_uint size, l_uint flags); }
; Linux 3.15:
-316 AUE_NULL STD { int linux_renameat2(l_int oldfd, \
- const char *oldname, l_int newfd, \
+316 AUE_NULL STD { int linux_renameat2(l_int olddfd, \
+ const char *oldname, l_int newdfd, \
const char *newname, unsigned int flags); }
; Linux 3.17:
317 AUE_NULL STD { int linux_seccomp(l_uint op, l_uint flags, \
Index: sys/amd64/linux32/linux32_dummy.c
===================================================================
--- sys/amd64/linux32/linux32_dummy.c
+++ sys/amd64/linux32/linux32_dummy.c
@@ -137,8 +137,6 @@
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
-/* Linux 3.14: */
-DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);
Index: sys/amd64/linux32/linux32_proto.h
===================================================================
--- sys/amd64/linux32/linux32_proto.h
+++ sys/amd64/linux32/linux32_proto.h
@@ -1199,9 +1199,9 @@
char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
struct linux_renameat2_args {
- char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+ char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
- char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+ char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
};
Index: sys/amd64/linux32/linux32_systrace_args.c
===================================================================
--- sys/amd64/linux32/linux32_systrace_args.c
+++ sys/amd64/linux32/linux32_systrace_args.c
@@ -2424,9 +2424,9 @@
/* linux_renameat2 */
case 353: {
struct linux_renameat2_args *p = params;
- iarg[0] = p->oldfd; /* l_int */
+ iarg[0] = p->olddfd; /* l_int */
uarg[1] = (intptr_t) p->oldname; /* const char * */
- iarg[2] = p->newfd; /* l_int */
+ iarg[2] = p->newdfd; /* l_int */
uarg[3] = (intptr_t) p->newname; /* const char * */
uarg[4] = p->flags; /* unsigned int */
*n_args = 5;
Index: sys/amd64/linux32/syscalls.master
===================================================================
--- sys/amd64/linux32/syscalls.master
+++ sys/amd64/linux32/syscalls.master
@@ -610,8 +610,8 @@
352 AUE_NULL STD { int linux_sched_getattr(l_pid_t pid, \
void *attr, l_uint size, l_uint flags); }
; Linux 3.15:
-353 AUE_NULL STD { int linux_renameat2(l_int oldfd, \
- const char *oldname, l_int newfd, \
+353 AUE_NULL STD { int linux_renameat2(l_int olddfd, \
+ const char *oldname, l_int newdfd, \
const char *newname, unsigned int flags); }
; Linux 3.17:
354 AUE_NULL STD { int linux_seccomp(l_uint op, l_uint flags, \
Index: sys/arm64/linux/linux_dummy.c
===================================================================
--- sys/arm64/linux/linux_dummy.c
+++ sys/arm64/linux/linux_dummy.c
@@ -130,8 +130,6 @@
DUMMY(finit_module);
DUMMY(sched_setattr);
DUMMY(sched_getattr);
-/* Linux 3.14: */
-DUMMY(renameat2);
/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);
Index: sys/arm64/linux/linux_proto.h
===================================================================
--- sys/arm64/linux/linux_proto.h
+++ sys/arm64/linux/linux_proto.h
@@ -971,9 +971,9 @@
char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
struct linux_renameat2_args {
- char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+ char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
- char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+ char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
};
Index: sys/arm64/linux/linux_systrace_args.c
===================================================================
--- sys/arm64/linux/linux_systrace_args.c
+++ sys/arm64/linux/linux_systrace_args.c
@@ -1972,9 +1972,9 @@
/* linux_renameat2 */
case 276: {
struct linux_renameat2_args *p = params;
- iarg[0] = p->oldfd; /* l_int */
+ iarg[0] = p->olddfd; /* l_int */
uarg[1] = (intptr_t) p->oldname; /* const char * */
- iarg[2] = p->newfd; /* l_int */
+ iarg[2] = p->newdfd; /* l_int */
uarg[3] = (intptr_t) p->newname; /* const char * */
uarg[4] = p->flags; /* unsigned int */
*n_args = 5;
Index: sys/arm64/linux/syscalls.master
===================================================================
--- sys/arm64/linux/syscalls.master
+++ sys/arm64/linux/syscalls.master
@@ -1459,9 +1459,9 @@
}
276 AUE_NULL STD {
int linux_renameat2(
- l_int oldfd,
+ l_int olddfd,
const char *oldname,
- l_int newfd,
+ l_int newdfd,
const char *newname,
unsigned int flags
);
Index: sys/compat/linux/linux_file.c
===================================================================
--- sys/compat/linux/linux_file.c
+++ sys/compat/linux/linux_file.c
@@ -685,10 +685,30 @@
int
linux_renameat(struct thread *td, struct linux_renameat_args *args)
+{
+ struct linux_renameat2_args renameat2_args;
+
+ renameat2_args.olddfd = args->olddfd;
+ renameat2_args.oldname = args->oldname;
+ renameat2_args.newdfd = args->newdfd;
+ renameat2_args.newname = args->newname;
+ renameat2_args.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);
Index: sys/i386/linux/linux_dummy.c
===================================================================
--- sys/i386/linux/linux_dummy.c
+++ sys/i386/linux/linux_dummy.c
@@ -134,8 +134,6 @@
DUMMY(sched_setattr);
DUMMY(sched_getattr);
/* Linux 3.14: */
-DUMMY(renameat2);
-/* Linux 3.15: */
DUMMY(seccomp);
DUMMY(memfd_create);
/* Linux 3.18: */
Index: sys/i386/linux/linux_proto.h
===================================================================
--- sys/i386/linux/linux_proto.h
+++ sys/i386/linux/linux_proto.h
@@ -1217,9 +1217,9 @@
char flags_l_[PADL_(l_uint)]; l_uint flags; char flags_r_[PADR_(l_uint)];
};
struct linux_renameat2_args {
- char oldfd_l_[PADL_(l_int)]; l_int oldfd; char oldfd_r_[PADR_(l_int)];
+ char olddfd_l_[PADL_(l_int)]; l_int olddfd; char olddfd_r_[PADR_(l_int)];
char oldname_l_[PADL_(const char *)]; const char * oldname; char oldname_r_[PADR_(const char *)];
- char newfd_l_[PADL_(l_int)]; l_int newfd; char newfd_r_[PADR_(l_int)];
+ char newdfd_l_[PADL_(l_int)]; l_int newdfd; char newdfd_r_[PADR_(l_int)];
char newname_l_[PADL_(const char *)]; const char * newname; char newname_r_[PADR_(const char *)];
char flags_l_[PADL_(unsigned int)]; unsigned int flags; char flags_r_[PADR_(unsigned int)];
};
Index: sys/i386/linux/linux_systrace_args.c
===================================================================
--- sys/i386/linux/linux_systrace_args.c
+++ sys/i386/linux/linux_systrace_args.c
@@ -2500,9 +2500,9 @@
/* linux_renameat2 */
case 353: {
struct linux_renameat2_args *p = params;
- iarg[0] = p->oldfd; /* l_int */
+ iarg[0] = p->olddfd; /* l_int */
uarg[1] = (intptr_t) p->oldname; /* const char * */
- iarg[2] = p->newfd; /* l_int */
+ iarg[2] = p->newdfd; /* l_int */
uarg[3] = (intptr_t) p->newname; /* const char * */
uarg[4] = p->flags; /* unsigned int */
*n_args = 5;
Index: sys/i386/linux/syscalls.master
===================================================================
--- sys/i386/linux/syscalls.master
+++ sys/i386/linux/syscalls.master
@@ -619,8 +619,8 @@
352 AUE_NULL STD { int linux_sched_getattr(l_pid_t pid, \
void *attr, l_uint size, l_uint flags); }
; Linux 3.15:
-353 AUE_NULL STD { int linux_renameat2(l_int oldfd, \
- const char *oldname, l_int newfd, \
+353 AUE_NULL STD { int linux_renameat2(l_int olddfd, \
+ const char *oldname, l_int newdfd, \
const char *newname, unsigned int flags); }
; Linux 3.17:
354 AUE_NULL STD { int linux_seccomp(l_uint op, l_uint flags, \
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Oct 23, 3:13 AM (6 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24079965
Default Alt Text
D21590.id61900.diff (10 KB)
Attached To
Mode
D21590: linux: add trivial renameat2 implementation
Attached
Detach File
Event Timeline
Log In to Comment