From 33d24762cd7713aa26e7911fe070692d4dca1b25 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Wed, 14 Mar 2012 16:34:32 +0000 Subject: [PATCH] Enhance *listxattr syscalls decoding * file.c (print_xattr_list): New function. (sys_listxattr, sys_flistxattr): Use it. --- file.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/file.c b/file.c index 89abb84d..850cdcf9 100644 --- a/file.c +++ b/file.c @@ -2528,14 +2528,31 @@ sys_fgetxattr(struct tcb *tcp) return 0; } +static void +print_xattr_list(struct tcb *tcp, unsigned long addr, unsigned long size) +{ + if (syserror(tcp)) { + tprintf("%#lx", addr); + } else { + if (!addr) { + tprints("NULL"); + } else { + unsigned long len = + (size < tcp->u_rval) ? size : tcp->u_rval; + printstr(tcp, addr, len); + } + } + tprintf(", %lu", size); +} + int sys_listxattr(struct tcb *tcp) { if (entering(tcp)) { printpath(tcp, tcp->u_arg[0]); + tprints(", "); } else { - /* XXX Print value in format */ - tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]); + print_xattr_list(tcp, tcp->u_arg[1], tcp->u_arg[2]); } return 0; } @@ -2545,9 +2562,9 @@ sys_flistxattr(struct tcb *tcp) { if (entering(tcp)) { printfd(tcp, tcp->u_arg[0]); + tprints(", "); } else { - /* XXX Print value in format */ - tprintf(", %p, %lu", (void *) tcp->u_arg[1], tcp->u_arg[2]); + print_xattr_list(tcp, tcp->u_arg[1], tcp->u_arg[2]); } return 0; } -- 2.50.1