handle return values for ssisys on NSC
diff --git a/ChangeLog b/ChangeLog
index f0bf4b3..45460f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2001-10-18 John Hughes <john@Calva.COM>
+ * system.c(sys_ssisys): handle return values for ssisys
+
+2001-10-18 John Hughes <john@Calva.COM>
+
* signal.c: handle sigwait
* svr4/dummy.c: Move sigwait to done
* svr4/syscall.h: handle sigwait
diff --git a/system.c b/system.c
index ef4e0e4..f56f423 100644
--- a/system.c
+++ b/system.c
@@ -2064,10 +2064,11 @@
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 @@
}
}
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;