From c9c2e2dc06a2b6ecd644b102c2b79cd113b0bc85 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Mon, 17 Aug 2015 17:57:01 +0000 Subject: [PATCH] Decode the optional SOCK_NONBLOCK and SOCK_CLOEXEC flags passed in a socket type. --- usr.bin/truss/syscalls.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c index e1f166c15255..26c90b899264 100644 --- a/usr.bin/truss/syscalls.c +++ b/usr.bin/truss/syscalls.c @@ -1228,9 +1228,22 @@ print_arg(struct syscall_args *sc, unsigned long *args, long retval, case Sockdomain: tmp = strdup(xlookup(sockdomain_arg, args[sc->offset])); break; - case Socktype: - tmp = strdup(xlookup(socktype_arg, args[sc->offset])); + case Socktype: { + FILE *fp; + size_t len; + int type, flags; + + flags = args[sc->offset] & (SOCK_CLOEXEC | SOCK_NONBLOCK); + type = args[sc->offset] & ~flags; + fp = open_memstream(&tmp, &len); + fputs(xlookup(socktype_arg, type), fp); + if (flags & SOCK_CLOEXEC) + fprintf(fp, "|SOCK_CLOEXEC"); + if (flags & SOCK_NONBLOCK) + fprintf(fp, "|SOCK_NONBLOCK"); + fclose(fp); break; + } case Shutdown: tmp = strdup(xlookup(shutdown_arg, args[sc->offset])); break;