diff options
author | Sami Kerola | 2012-11-11 23:31:21 +0100 |
---|---|---|
committer | Karel Zak | 2012-11-23 14:58:22 +0100 |
commit | 2bd2f79dde4298347c0f252603e5a1d06791f9bf (patch) | |
tree | 63e2fbfa6a033d085590c82d588e51b4863b1e90 /sys-utils | |
parent | ipcs: clean up do_msg(), and add ipc_msg_get_info() (diff) | |
download | kernel-qcow2-util-linux-2bd2f79dde4298347c0f252603e5a1d06791f9bf.tar.gz kernel-qcow2-util-linux-2bd2f79dde4298347c0f252603e5a1d06791f9bf.tar.xz kernel-qcow2-util-linux-2bd2f79dde4298347c0f252603e5a1d06791f9bf.zip |
ipcs: make individual message queue id printing to use /proc
[kzak@redhat.com: - fix msgctl() call,
move q_qbytes to ipc_msg_get_info]
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils')
-rw-r--r-- | sys-utils/ipcs.c | 47 | ||||
-rw-r--r-- | sys-utils/ipcutils.c | 11 |
2 files changed, 32 insertions, 26 deletions
diff --git a/sys-utils/ipcs.c b/sys-utils/ipcs.c index 78bec7d5f..632dd1075 100644 --- a/sys-utils/ipcs.c +++ b/sys-utils/ipcs.c @@ -572,33 +572,32 @@ static void print_shm(int shmid) } -void print_msg (int msqid) +void print_msg(int msgid) { - struct msqid_ds buf; - struct ipc_perm *ipcp = &buf.msg_perm; + struct msg_data *msgdata; - if (msgctl (msqid, IPC_STAT, &buf) == -1) - err(EXIT_FAILURE, _("msgctl failed")); + if (ipc_msg_get_info(msgid, &msgdata) < 1) { + warnx(_("id %d not found"), msgid); + return; + } - printf (_("\nMessage Queue msqid=%d\n"), msqid); - printf (_("uid=%u\tgid=%u\tcuid=%u\tcgid=%u\tmode=%#o\n"), - ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, ipcp->mode); - printf (_("cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n"), - /* - * glibc-2.1.3 and earlier has unsigned short. glibc-2.1.91 - * has variation between unsigned short, unsigned long. - * Austin has msgqnum_t (for msg_qbytes) - */ - (long) buf.msg_cbytes, (long) buf.msg_qbytes, - (long) buf.msg_qnum, buf.msg_lspid, buf.msg_lrpid); - printf (_("send_time=%-26.24s\n"), - buf.msg_stime ? ctime (&buf.msg_stime) : _("Not set")); - printf (_("rcv_time=%-26.24s\n"), - buf.msg_rtime ? ctime (&buf.msg_rtime) : _("Not set")); - printf (_("change_time=%-26.24s\n"), - buf.msg_ctime ? ctime (&buf.msg_ctime) : _("Not set")); - printf ("\n"); - return; + printf(_("\nMessage Queue msqid=%d\n"), msgid); + printf(_("uid=%u\tgid=%u\tcuid=%u\tcgid=%u\tmode=%#o\n"), + msgdata->msg_perm.uid, msgdata->msg_perm.uid, + msgdata->msg_perm.cuid, msgdata->msg_perm.cgid, + msgdata->msg_perm.mode); + printf(_("cbytes=%jd\tqbytes=%jd\tqnum=%jd\tlspid=%d\tlrpid=%d\n"), + msgdata->q_cbytes, msgdata->q_qbytes, msgdata->q_qnum, + msgdata->q_lspid, msgdata->q_lrpid); + printf(_("send_time=%-26.24s\n"), + msgdata->q_stime ? ctime(&msgdata->q_stime) : _("Not set")); + printf(_("rcv_time=%-26.24s\n"), + msgdata->q_rtime ? ctime(&msgdata->q_rtime) : _("Not set")); + printf(_("change_time=%-26.24s\n"), + msgdata->q_ctime ? ctime(&msgdata->q_ctime) : _("Not set")); + printf("\n"); + + ipc_msg_free_info(msgdata); } static void print_sem(int semid) diff --git a/sys-utils/ipcutils.c b/sys-utils/ipcutils.c index 772863c54..7d1f0d1ef 100644 --- a/sys-utils/ipcutils.c +++ b/sys-utils/ipcutils.c @@ -362,6 +362,7 @@ int ipc_msg_get_info(int id, struct msg_data **msgds) int i, maxid; struct msg_data *p; struct msqid_ds dummy; + struct msqid_ds msgseg; p = *msgds = xcalloc(1, sizeof(struct msg_data)); p->next = NULL; @@ -394,6 +395,12 @@ int ipc_msg_get_info(int id, struct msg_data **msgds) if (id > -1) { /* ID specified */ if (id == p->msg_perm.id) { + /* + * FIXME: q_qbytes are not in /proc + * + */ + if (msgctl(id, IPC_STAT, &msgseg) != -1) + p->q_qbytes = msgseg.msg_qbytes; i = 1; break; } else @@ -421,10 +428,9 @@ int ipc_msg_get_info(int id, struct msg_data **msgds) while (i <= maxid) { int msgid; - struct msqid_ds msgseg; struct ipc_perm *ipcp = &msgseg.msg_perm; - msgid = msgctl(id, MSG_STAT, &msgseg); + msgid = msgctl(i, MSG_STAT, &msgseg); if (msgid < 0) { if (-1 < id) { free(*msgds); @@ -448,6 +454,7 @@ int ipc_msg_get_info(int id, struct msg_data **msgds) p->q_stime = msgseg.msg_stime; p->q_rtime = msgseg.msg_rtime; p->q_ctime = msgseg.msg_ctime; + p->q_qbytes = msgseg.msg_qbytes; if (id < 0) { p->next = xcalloc(1, sizeof(struct msg_data)); |