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:
dchagin 2009-06-01 20:42:27 +00:00
parent e45af7ed87
commit 0cc88e7ca3

View File

@ -763,14 +763,9 @@ linux_listen(struct thread *td, struct linux_listen_args *args)
return (listen(td, &bsd_args));
}
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)
linux_accept_common(struct thread *td, int s, l_uintptr_t addr,
l_uintptr_t namelen)
{
struct accept_args /* {
int s;
@ -779,19 +774,19 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
} */ bsd_args;
int error, fd;
bsd_args.s = args->s;
bsd_args.s = s;
/* XXX: */
bsd_args.name = (struct sockaddr * __restrict)PTRIN(args->addr);
bsd_args.anamelen = PTRIN(args->namelen);/* XXX */
bsd_args.name = (struct sockaddr * __restrict)PTRIN(addr);
bsd_args.anamelen = PTRIN(namelen);/* XXX */
error = accept(td, &bsd_args);
bsd_to_linux_sockaddr((struct sockaddr *)bsd_args.name);
if (error) {
if (error == EFAULT && args->namelen != sizeof(struct sockaddr_in))
if (error == EFAULT && namelen != sizeof(struct sockaddr_in))
return (EINVAL);
return (error);
}
if (args->addr) {
error = linux_sa_put(PTRIN(args->addr));
if (addr) {
error = linux_sa_put(PTRIN(addr));
if (error) {
(void)kern_close(td, td->td_retval[0]);
return (error);
@ -809,6 +804,20 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
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 {
int s;
l_uintptr_t addr;