Fix libc_noux's Plugin::getpeername() method

The argument's order was wrong in the memcpy() call. In addition
the wrong sysio struct was used for the addrlen argument.

Fixes #238.
This commit is contained in:
Josef Söntgen 2012-06-07 16:19:05 +02:00 committed by Norman Feske
parent ed867817b6
commit f325f314b5
1 changed files with 5 additions and 3 deletions

View File

@ -1278,14 +1278,16 @@ namespace {
socklen_t *addrlen)
{
sysio()->getpeername_in.fd = noux_fd(fd->context);
sysio()->getpeername_in.addrlen = *addrlen;
if (!noux()->syscall(Noux::Session::SYSCALL_GETPEERNAME)) {
/* errno */
return -1;
}
Genode::memcpy(&sysio()->getpeername_in.addr, addr,
sizeof (struct sockaddr));
sysio()->bind_in.addrlen = *addrlen;
Genode::memcpy(addr, &sysio()->getpeername_in.addr,
sizeof (struct sockaddr));
*addrlen = sysio()->getpeername_in.addrlen;
return 0;
}