From: Roland McGrath Date: Thu, 2 Aug 2007 02:13:05 +0000 (+0000) Subject: 2007-08-01 Roland McGrath X-Git-Tag: v4.5.18~155 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85a3bc4a0473de8d770d5543fc3c22c53b3e958e;p=strace 2007-08-01 Roland McGrath * process.c (printargv): Handle boundary cases correctly. Handle biarch fetching correctly. --- diff --git a/process.c b/process.c index 12d643bb..65381546 100644 --- a/process.c +++ b/process.c @@ -1677,25 +1677,31 @@ printargv(tcp, addr) struct tcb *tcp; long addr; { - char *cp; + union { + int p32; + long p64; + char data[sizeof(long)]; + } cp; char *sep; - int max = max_strlen / 2; + int n = 0; - for (sep = ""; --max >= 0; sep = ", ") { - if (!abbrev(tcp)) - max++; - if (umove(tcp, addr, &cp) < 0) { + cp.p64 = 1; + for (sep = ""; !abbrev(tcp) || n < max_strlen / 2; sep = ", ", ++n) { + if (umoven(tcp, addr, personality_wordsize[current_personality], + cp.data) < 0) { tprintf("%#lx", addr); return; } - if (cp == 0) + if (personality_wordsize[current_personality] == 4) + cp.p64 = cp.p32; + if (cp.p64 == 0) break; tprintf(sep); - printstr(tcp, (long) cp, -1); - addr += sizeof(char *); + printstr(tcp, cp.p64, -1); + addr += personality_wordsize[current_personality]; } - if (cp) - tprintf(", ..."); + if (cp.p64) + tprintf("%s...", sep); } static void