aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/truss
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2015-08-17 17:57:01 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2015-08-17 17:57:01 +0000
commitc9c2e2dc06a2b6ecd644b102c2b79cd113b0bc85 (patch)
treea24d1c68c3db387bb01b437fc70add54591a9ed4 /usr.bin/truss
parentb289a8d78a144cd20b82e28a3ae2859f1c25b799 (diff)
downloadsrc-c9c2e2dc06a2b6ecd644b102c2b79cd113b0bc85.tar.gz
src-c9c2e2dc06a2b6ecd644b102c2b79cd113b0bc85.zip
Decode the optional SOCK_NONBLOCK and SOCK_CLOEXEC flags passed in a
socket type.
Notes
Notes: svn path=/head/; revision=286849
Diffstat (limited to 'usr.bin/truss')
-rw-r--r--usr.bin/truss/syscalls.c17
1 files 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;