- tprints("{");
-
- if (c->decode_iov) {
- unsigned long len = iov[1];
- if (len > c->data_size)
- len = c->data_size;
- c->data_size -= len;
- printstr(tcp, iov[0], len);
- } else {
- printaddr(iov[0]);
+ tprints("{iov_base=");
+
+ len = iov[1];
+
+ switch (c->decode_iov) {
+ case IOV_DECODE_STR:
+ if (len > c->data_size)
+ len = c->data_size;
+ if (c->data_size != (kernel_ulong_t) -1)
+ c->data_size -= len;
+ printstrn(tcp, iov[0], len);
+ break;
+ case IOV_DECODE_NETLINK:
+ if (len > c->data_size)
+ len = c->data_size;
+ if (c->data_size != (kernel_ulong_t) -1)
+ c->data_size -= len;
+ /* assume that the descriptor is 1st syscall argument */
+ decode_netlink(tcp, tcp->u_arg[0], iov[0], len);
+ break;
+ default:
+ printaddr(iov[0]);
+ break;