summaryrefslogtreecommitdiffstats
path: root/sys-utils/ipcs.c
diff options
context:
space:
mode:
authorSami Kerola2012-11-11 22:12:20 +0100
committerKarel Zak2012-11-23 14:58:22 +0100
commitb5504a3d4b318ef30600749b490c06b89f99349e (patch)
tree721695cdc4a6445cff4f7f27c350d42f71483004 /sys-utils/ipcs.c
parentipcs: clean up do_sem(), and add ipc_sem_get_info() (diff)
downloadkernel-qcow2-util-linux-b5504a3d4b318ef30600749b490c06b89f99349e.tar.gz
kernel-qcow2-util-linux-b5504a3d4b318ef30600749b490c06b89f99349e.tar.xz
kernel-qcow2-util-linux-b5504a3d4b318ef30600749b490c06b89f99349e.zip
ipcs: make individual semaphore id printing to use /proc
And reindent the print_shm() function. [kzak@redhat.com: move semctl(GET*...) calls to ipcutils.c] Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'sys-utils/ipcs.c')
-rw-r--r--sys-utils/ipcs.c63
1 files changed, 28 insertions, 35 deletions
diff --git a/sys-utils/ipcs.c b/sys-utils/ipcs.c
index 1180299eb..7f44aaf6f 100644
--- a/sys-utils/ipcs.c
+++ b/sys-utils/ipcs.c
@@ -34,10 +34,10 @@
static void do_shm (char format);
static void print_shm (int id);
static void do_sem (char format);
+static void print_sem (int id);
void do_msg (char format);
void print_msg (int id);
-void print_sem (int id);
static void __attribute__ ((__noreturn__)) usage(FILE * out)
{
@@ -602,42 +602,35 @@ void print_msg (int msqid)
return;
}
-void print_sem (int semid)
+static void print_sem(int semid)
{
- struct semid_ds semds;
- struct ipc_perm *ipcp = &semds.sem_perm;
- union semun arg;
+ struct sem_data *semdata;
size_t i;
- arg.buf = &semds;
- if (semctl (semid, 0, IPC_STAT, arg) < 0)
- err(EXIT_FAILURE, _("semctl failed"));
-
- printf (_("\nSemaphore Array semid=%d\n"), semid);
- printf (_("uid=%u\t gid=%u\t cuid=%u\t cgid=%u\n"),
- ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid);
- printf (_("mode=%#o, access_perms=%#o\n"),
- ipcp->mode, ipcp->mode & 0777);
- printf (_("nsems = %ld\n"), (long) semds.sem_nsems);
- printf (_("otime = %-26.24s\n"),
- semds.sem_otime ? ctime (&semds.sem_otime) : _("Not set"));
- printf (_("ctime = %-26.24s\n"), ctime (&semds.sem_ctime));
-
- printf ("%-10s %-10s %-10s %-10s %-10s\n",
- _("semnum"),_("value"),_("ncount"),_("zcount"),_("pid"));
- arg.val = 0;
- for (i=0; i< semds.sem_nsems; i++) {
- int val, ncnt, zcnt, pid;
- val = semctl (semid, i, GETVAL, arg);
- ncnt = semctl (semid, i, GETNCNT, arg);
- zcnt = semctl (semid, i, GETZCNT, arg);
- pid = semctl (semid, i, GETPID, arg);
- if (val < 0 || ncnt < 0 || zcnt < 0 || pid < 0)
- err(EXIT_FAILURE, _("semctl failed"));
-
- printf ("%-10zd %-10d %-10d %-10d %-10d\n",
- i, val, ncnt, zcnt, pid);
+ if (ipc_sem_get_info(semid, &semdata) < 1) {
+ warnx(_("id %d not found"), semid);
+ return;
}
- printf ("\n");
- return;
+
+ printf(_("\nSemaphore Array semid=%d\n"), semid);
+ printf(_("uid=%u\t gid=%u\t cuid=%u\t cgid=%u\n"),
+ semdata->sem_perm.uid, semdata->sem_perm.uid,
+ semdata->sem_perm.cuid, semdata->sem_perm.cgid);
+ printf(_("mode=%#o, access_perms=%#o\n"),
+ semdata->sem_perm.mode, semdata->sem_perm.mode & 0777);
+ printf(_("nsems = %ld\n"), semdata->sem_nsems);
+ printf(_("otime = %-26.24s\n"),
+ semdata->sem_otime ? ctime(&semdata->sem_otime) : _("Not set"));
+ printf(_("ctime = %-26.24s\n"), ctime(&semdata->sem_ctime));
+
+ printf("%-10s %-10s %-10s %-10s %-10s\n",
+ _("semnum"), _("value"), _("ncount"), _("zcount"), _("pid"));
+
+ for (i = 0; i < semdata->sem_nsems; i++) {
+ struct sem_elem *e = &semdata->elements[i];
+ printf("%-10zd %-10d %-10d %-10d %-10d\n",
+ i, e->semval, e->ncount, e->zcount, e->pid);
+ }
+ printf("\n");
+ ipc_sem_free_info(semdata);
}