summaryrefslogtreecommitdiff
path: root/system.c
diff options
context:
space:
mode:
authorJohn Hughes <john@Calva.COM>2001-10-18 14:52:24 +0000
committerJohn Hughes <john@Calva.COM>2001-10-18 14:52:24 +0000
commit2d8b2c587152bfa3408d4920f07cbb865fd36dff (patch)
tree53355ea170e4b91ab39bfd86c171e76fb029516b /system.c
parent421620897008f94f44475286d92c8723dcaf4368 (diff)
downloadstrace-2d8b2c587152bfa3408d4920f07cbb865fd36dff.tar.gz
strace-2d8b2c587152bfa3408d4920f07cbb865fd36dff.tar.bz2
strace-2d8b2c587152bfa3408d4920f07cbb865fd36dff.tar.xz
handle return values for ssisys on NSC
Diffstat (limited to 'system.c')
-rw-r--r--system.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/system.c b/system.c
index ef4e0e4..f56f423 100644
--- a/system.c
+++ b/system.c
@@ -2064,10 +2064,11 @@ int sys_ssisys (tcp)
struct tcb *tcp;
{
struct ssisys_iovec iov;
-
+ cls_nodeinfo_args_t cni;
+ clusternode_info_t info;
+
if (entering (tcp)) {
ts_reclaim_child_inargs_t trc;
- cls_nodeinfo_args_t cni;
if (tcp->u_arg[1] != sizeof iov ||
umove (tcp, tcp->u_arg[0], &iov) < 0)
{
@@ -2101,13 +2102,31 @@ struct tcb *tcp;
}
}
else {
+ if (tcp->u_arg[1] != sizeof iov ||
+ umove (tcp, tcp->u_arg[0], &iov) < 0)
+ goto done;
switch (iov.tio_id.id_cmd) {
+ case SSISYS_CLUSTERNODE_INFO:
+ if (iov.tio_udatainlen != sizeof cni ||
+ umove (tcp, (long) iov.tio_udatain, &cni) < 0)
+ goto bad_out;
+ if (cni.info_len != sizeof info ||
+ iov.tio_udataoutlen != sizeof &info ||
+ umove (tcp, (long) iov.tio_udataout, &info) < 0)
+ goto bad_out;
+ tprintf (", out={node=%ld, cpus=%d, online=%d}",
+ info.node_num, info.node_totalcpus,
+ info.node_onlinecpus);
+ break;
+
default:
+ bad_out:
if (iov.tio_udataoutlen) {
tprintf (", out=[/* %d bytes */]",
iov.tio_udataoutlen);
}
}
+ done:
tprintf ("}, %ld", tcp->u_arg[1]);
}
return 0;