Le 24/01/2018 à 14:01, Philippe Mathieu-Daudé a écrit : > since this argument differs between sendto()/recvfrom() > > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > linux-user/strace.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/linux-user/strace.c b/linux-user/strace.c > index e7272f4ede..9726d9b378 100644 > --- a/linux-user/strace.c > +++ b/linux-user/strace.c > @@ -335,12 +335,15 @@ static void print_siginfo(const target_siginfo_t *tinfo) > } > > static void > -print_sockaddr(abi_ulong addr, abi_long addrlen) > +print_sockaddr_ptr(abi_ulong addr, abi_long addrlen, bool addrlen_ptr) > { > struct target_sockaddr *sa; > int i; > int sa_family; > > + if (addrlen_ptr) { > + get_user_ual(addrlen, addrlen); > + } > sa = lock_user(VERIFY_READ, addr, addrlen, 1); > if (sa) { > sa_family = tswap16(sa->sa_family); > @@ -417,7 +420,17 @@ print_sockaddr(abi_ulong addr, abi_long addrlen) > } else { > print_raw_param("0x"TARGET_ABI_FMT_lx, addr, 0); > } > - gemu_log(", "TARGET_ABI_FMT_ld, addrlen); > + if (addrlen_ptr) { > + gemu_log(", ["TARGET_ABI_FMT_ld"]", addrlen); > + } else { > + gemu_log(", "TARGET_ABI_FMT_ld, addrlen); > + } > +} > + > +static void > +print_sockaddr(abi_ulong addr, abi_long addrlen) > +{ > + print_sockaddr_ptr(addr, addrlen, false); > } > > static void >
Why not only something like: static void print_sockaddr_ptr(abi_ulong addr, abi_long addrlen_ptr) { abi_ulong addrlen; get_user_ual(addrlen, addrlen_ptr); print_sockaddr(addr, addrlen); } ? You should also check addrlen_ptr != NULL (it's allowed with recvfrom()). Thanks, Laurent