From 883453c65d4cf1e635f79e7c1e10a7620d12dd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Mon, 25 Jun 2012 15:49:10 +0200 Subject: [PATCH] Noux: fix sendto(), set args before each syscall Set addrlen and dest_addr explicitly before each system call. Fixes #287. --- ports/src/lib/libc_noux/plugin.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ports/src/lib/libc_noux/plugin.cc b/ports/src/lib/libc_noux/plugin.cc index 2d12de69c1..b17dda7cee 100644 --- a/ports/src/lib/libc_noux/plugin.cc +++ b/ports/src/lib/libc_noux/plugin.cc @@ -1376,9 +1376,6 @@ namespace { return -1; } - sysio()->sendto_in.addrlen = addrlen; - Genode::memcpy(&sysio()->sendto_in.dest_addr, dest_addr, addrlen); - /* wipe-out sendto buffer */ Genode::memset(sysio()->sendto_in.buf, 0, sizeof (sysio()->sendto_in.buf)); @@ -1390,6 +1387,15 @@ namespace { sysio()->sendto_in.len = curr_len; Genode::memcpy(sysio()->sendto_in.buf, src, curr_len); + if (addrlen == 0) { + sysio()->sendto_in.addrlen = 0; + Genode::memset(&sysio()->sendto_in.dest_addr, 0, sizeof (struct sockaddr)); + } + else { + sysio()->sendto_in.addrlen = addrlen; + Genode::memcpy(&sysio()->sendto_in.dest_addr, dest_addr, addrlen); + } + if (!noux()->syscall(Noux::Session::SYSCALL_SENDTO)) { return -1; }