Split linux_accept() syscall onto linux_accept_common() which should
be used by linuxulator and linux_accept() itself. Approved by: kib (mentor) MFC after: 1 month
This commit is contained in:
parent
e45af7ed87
commit
0cc88e7ca3
@ -763,14 +763,9 @@ linux_listen(struct thread *td, struct linux_listen_args *args)
|
|||||||
return (listen(td, &bsd_args));
|
return (listen(td, &bsd_args));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct linux_accept_args {
|
|
||||||
int s;
|
|
||||||
l_uintptr_t addr;
|
|
||||||
l_uintptr_t namelen;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
linux_accept(struct thread *td, struct linux_accept_args *args)
|
linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
|
||||||
|
l_uintptr_t namelen)
|
||||||
{
|
{
|
||||||
struct accept_args /* {
|
struct accept_args /* {
|
||||||
int s;
|
int s;
|
||||||
@ -779,19 +774,19 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
|
|||||||
} */ bsd_args;
|
} */ bsd_args;
|
||||||
int error, fd;
|
int error, fd;
|
||||||
|
|
||||||
bsd_args.s = args->s;
|
bsd_args.s = s;
|
||||||
/* XXX: */
|
/* XXX: */
|
||||||
bsd_args.name = (struct sockaddr * __restrict)PTRIN(args->addr);
|
bsd_args.name = (struct sockaddr * __restrict)PTRIN(addr);
|
||||||
bsd_args.anamelen = PTRIN(args->namelen);/* XXX */
|
bsd_args.anamelen = PTRIN(namelen);/* XXX */
|
||||||
error = accept(td, &bsd_args);
|
error = accept(td, &bsd_args);
|
||||||
bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name);
|
bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (error == EFAULT && args->namelen != sizeof(struct sockaddr_in))
|
if (error == EFAULT && namelen != sizeof(struct sockaddr_in))
|
||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
if (args->addr) {
|
if (addr) {
|
||||||
error = linux_sa_put(PTRIN(args->addr));
|
error = linux_sa_put(PTRIN(addr));
|
||||||
if (error) {
|
if (error) {
|
||||||
(void)kern_close(td, td->td_retval[0]);
|
(void)kern_close(td, td->td_retval[0]);
|
||||||
return (error);
|
return (error);
|
||||||
@ -809,6 +804,20 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct linux_accept_args {
|
||||||
|
int s;
|
||||||
|
l_uintptr_t addr;
|
||||||
|
l_uintptr_t namelen;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
linux_accept(struct thread *td, struct linux_accept_args *args)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (linux_accept_common(td, args->s, args->addr,
|
||||||
|
args->namelen));
|
||||||
|
}
|
||||||
|
|
||||||
struct linux_getsockname_args {
|
struct linux_getsockname_args {
|
||||||
int s;
|
int s;
|
||||||
l_uintptr_t addr;
|
l_uintptr_t addr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user