diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2020-07-18 08:00:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2020-07-18 08:00:00 +0000 |
commit | b8b11a1766567574cf884953e0fc69e5e2b0e7a3 (patch) | |
tree | 956a6457b714e96ac20a41408393d32d20e33338 | |
parent | 2363c4d6f2ce40f5a93df4811c77c41ca5dde50d (diff) | |
download | strace-b8b11a1766567574cf884953e0fc69e5e2b0e7a3.tar.gz |
Fix printing of syscall return value in octal mode
* defs.h (print_numeric_long_umask): Remove.
* printmode.c (print_numeric_long_umask): Likewise.
* syscall.c (syscall_exiting_trace) <case RVAL_OCTAL>: Fix printing
of tcp->u_rval when sizeof(tcp->u_rval) > sizeof(long) or when
sizeof(tcp->u_rval) > current_klongsize.
-rw-r--r-- | defs.h | 1 | ||||
-rw-r--r-- | printmode.c | 6 | ||||
-rw-r--r-- | syscall.c | 11 |
3 files changed, 9 insertions, 9 deletions
@@ -869,7 +869,6 @@ extern void print_uuid(const unsigned char *uuid); extern void print_symbolic_mode_t(unsigned int); extern void print_numeric_umode_t(unsigned short); extern void print_numeric_ll_umode_t(unsigned long long); -extern void print_numeric_long_umask(unsigned long); extern void print_dev_t(unsigned long long dev); extern void print_kernel_version(unsigned long version); extern void print_abnormal_hi(kernel_ulong_t); diff --git a/printmode.c b/printmode.c index 075142adc..a53a6ce44 100644 --- a/printmode.c +++ b/printmode.c @@ -51,9 +51,3 @@ print_numeric_ll_umode_t(const unsigned long long mode) { tprintf("%#03llo", mode); } - -void -print_numeric_long_umask(const unsigned long mode) -{ - tprintf("%#03lo", mode); -} @@ -902,10 +902,17 @@ syscall_exiting_trace(struct tcb *tcp, struct timespec *ts, int res) tprintf("= %#" PRI_klx, tcp->u_rval); } break; - case RVAL_OCTAL: + case RVAL_OCTAL: { + unsigned long long mode = + zero_extend_signed_to_ull(tcp->u_rval); tprints("= "); - print_numeric_long_umask(tcp->u_rval); +#if ANY_WORDSIZE_LESS_THAN_KERNEL_LONG + if (current_klongsize < sizeof(tcp->u_rval)) + mode = (unsigned int) mode; +#endif + print_numeric_ll_umode_t(mode); break; + } case RVAL_UDECIMAL: #if ANY_WORDSIZE_LESS_THAN_KERNEL_LONG if (current_klongsize < sizeof(tcp->u_rval)) { |