diff options
Diffstat (limited to 'util-linux/ipcs.c')
-rw-r--r-- | util-linux/ipcs.c | 584 |
1 files changed, 283 insertions, 301 deletions
diff --git a/util-linux/ipcs.c b/util-linux/ipcs.c index fbc75cb..c7c8376 100644 --- a/util-linux/ipcs.c +++ b/util-linux/ipcs.c @@ -8,9 +8,7 @@ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ -#include <stdio.h> -#include <stdlib.h> -#include <getopt.h> +#include "busybox.h" #include <errno.h> #include <time.h> #include <pwd.h> @@ -25,15 +23,15 @@ #include <sys/msg.h> #include <sys/shm.h> -#include "busybox.h" + /*-------------------------------------------------------------------*/ /* SHM_DEST and SHM_LOCKED are defined in kernel headers, but inside #ifdef __KERNEL__ ... #endif */ #ifndef SHM_DEST /* shm_mode upper byte flags */ -#define SHM_DEST 01000 /* segment will be destroyed on last detach */ -#define SHM_LOCKED 02000 /* segment will not be swapped */ +#define SHM_DEST 01000 /* segment will be destroyed on last detach */ +#define SHM_LOCKED 02000 /* segment will not be swapped */ #endif /* For older kernels the same holds for the defines below */ @@ -46,12 +44,12 @@ #define SHM_STAT 13 #define SHM_INFO 14 struct shm_info { - int used_ids; - ulong shm_tot; /* total allocated shm */ - ulong shm_rss; /* total resident shm */ - ulong shm_swp; /* total swapped shm */ - ulong swap_attempts; - ulong swap_successes; + int used_ids; + ulong shm_tot; /* total allocated shm */ + ulong shm_rss; /* total resident shm */ + ulong shm_swp; /* total swapped shm */ + ulong swap_attempts; + ulong swap_successes; }; #endif @@ -98,12 +96,14 @@ union semun { #define TIME 4 #define PID 5 +static char format; -static void print_perms (int id, struct ipc_perm *ipcp) { +static void print_perms(int id, struct ipc_perm *ipcp) +{ struct passwd *pw; struct group *gr; - bb_printf ("%-10d %-10o", id, ipcp->mode & 0777); + bb_printf("%-10d %-10o", id, ipcp->mode & 0777); if ((pw = getpwuid(ipcp->cuid))) bb_printf(" %-10s", pw->pw_name); @@ -125,7 +125,7 @@ static void print_perms (int id, struct ipc_perm *ipcp) { } -static void do_shm (char format) +static void do_shm(void) { int maxid, shmid, id; struct shmid_ds shmseg; @@ -134,127 +134,125 @@ static void do_shm (char format) struct ipc_perm *ipcp = &shmseg.shm_perm; struct passwd *pw; - maxid = shmctl (0, SHM_INFO, (struct shmid_ds *) (void *) &shm_info); + maxid = shmctl(0, SHM_INFO, (struct shmid_ds *) (void *) &shm_info); if (maxid < 0) { - bb_printf ("kernel not configured for shared memory\n"); + bb_printf("kernel not configured for shared memory\n"); return; } switch (format) { case LIMITS: - bb_printf ("------ Shared Memory Limits --------\n"); - if ((shmctl (0, IPC_INFO, (struct shmid_ds *) (void *) &shminfo)) < 0 ) + bb_printf("------ Shared Memory Limits --------\n"); + if ((shmctl(0, IPC_INFO, (struct shmid_ds *) (void *) &shminfo)) < 0) return; /* glibc 2.1.3 and all earlier libc's have ints as fields of struct shminfo; glibc 2.1.91 has unsigned long; ach */ - bb_printf ("max number of segments = %lu\n" - "max seg size (kbytes) = %lu\n" - "max total shared memory (pages) = %lu\n" - "min seg size (bytes) = %lu\n", - (unsigned long) shminfo.shmmni, - (unsigned long) (shminfo.shmmax >> 10), - (unsigned long) shminfo.shmall, - (unsigned long) shminfo.shmmin); + bb_printf("max number of segments = %lu\n" + "max seg size (kbytes) = %lu\n" + "max total shared memory (pages) = %lu\n" + "min seg size (bytes) = %lu\n", + (unsigned long) shminfo.shmmni, + (unsigned long) (shminfo.shmmax >> 10), + (unsigned long) shminfo.shmall, + (unsigned long) shminfo.shmmin); return; case STATUS: - bb_printf ("------ Shared Memory Status --------\n" - "segments allocated %d\n" - "pages allocated %ld\n" - "pages resident %ld\n" - "pages swapped %ld\n" - "Swap performance: %ld attempts\t %ld successes\n", - shm_info.used_ids, - shm_info.shm_tot, - shm_info.shm_rss, - shm_info.shm_swp, - shm_info.swap_attempts, shm_info.swap_successes); + bb_printf("------ Shared Memory Status --------\n" + "segments allocated %d\n" + "pages allocated %ld\n" + "pages resident %ld\n" + "pages swapped %ld\n" + "Swap performance: %ld attempts\t %ld successes\n", + shm_info.used_ids, + shm_info.shm_tot, + shm_info.shm_rss, + shm_info.shm_swp, + shm_info.swap_attempts, shm_info.swap_successes); return; case CREATOR: - bb_printf ("------ Shared Memory Segment Creators/Owners --------\n" - "%-10s %-10s %-10s %-10s %-10s %-10s\n", - "shmid","perms","cuid","cgid","uid","gid"); + bb_printf("------ Shared Memory Segment Creators/Owners --------\n" + "%-10s %-10s %-10s %-10s %-10s %-10s\n", + "shmid", "perms", "cuid", "cgid", "uid", "gid"); break; case TIME: - bb_printf ("------ Shared Memory Attach/Detach/Change Times --------\n" - "%-10s %-10s %-20s %-20s %-20s\n", - "shmid","owner","attached","detached","changed"); + bb_printf("------ Shared Memory Attach/Detach/Change Times --------\n" + "%-10s %-10s %-20s %-20s %-20s\n", + "shmid", "owner", "attached", "detached", "changed"); break; case PID: - bb_printf ("------ Shared Memory Creator/Last-op --------\n" - "%-10s %-10s %-10s %-10s\n", - "shmid","owner","cpid","lpid"); + bb_printf("------ Shared Memory Creator/Last-op --------\n" + "%-10s %-10s %-10s %-10s\n", + "shmid", "owner", "cpid", "lpid"); break; default: - bb_printf ("------ Shared Memory Segments --------\n" - "%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", - "key","shmid","owner","perms","bytes","nattch","status"); + bb_printf("------ Shared Memory Segments --------\n" + "%-10s %-10s %-10s %-10s %-10s %-10s %-12s\n", + "key", "shmid", "owner", "perms", "bytes", "nattch", + "status"); break; } for (id = 0; id <= maxid; id++) { - shmid = shmctl (id, SHM_STAT, &shmseg); + shmid = shmctl(id, SHM_STAT, &shmseg); if (shmid < 0) continue; - if (format == CREATOR) { - print_perms (shmid, ipcp); + if (format == CREATOR) { + print_perms(shmid, ipcp); continue; } pw = getpwuid(ipcp->uid); switch (format) { case TIME: if (pw) - bb_printf ("%-10d %-10.10s", shmid, pw->pw_name); + bb_printf("%-10d %-10.10s", shmid, pw->pw_name); else - bb_printf ("%-10d %-10d", shmid, ipcp->uid); + bb_printf("%-10d %-10d", shmid, ipcp->uid); /* ctime uses static buffer: use separate calls */ - bb_printf(" %-20.16s", shmseg.shm_atime - ? ctime(&shmseg.shm_atime) + 4 : "Not set"); + bb_printf(" %-20.16s", shmseg.shm_atime + ? ctime(&shmseg.shm_atime) + 4 : "Not set"); bb_printf(" %-20.16s", shmseg.shm_dtime - ? ctime(&shmseg.shm_dtime) + 4 : "Not set"); + ? ctime(&shmseg.shm_dtime) + 4 : "Not set"); bb_printf(" %-20.16s\n", shmseg.shm_ctime - ? ctime(&shmseg.shm_ctime) + 4 : "Not set"); + ? ctime(&shmseg.shm_ctime) + 4 : "Not set"); break; case PID: if (pw) - bb_printf ("%-10d %-10.10s", shmid, pw->pw_name); + bb_printf("%-10d %-10.10s", shmid, pw->pw_name); else - bb_printf ("%-10d %-10d", shmid, ipcp->uid); - bb_printf (" %-10d %-10d\n", - shmseg.shm_cpid, shmseg.shm_lpid); + bb_printf("%-10d %-10d", shmid, ipcp->uid); + bb_printf(" %-10d %-10d\n", shmseg.shm_cpid, shmseg.shm_lpid); break; default: - bb_printf("0x%08x ",ipcp->KEY ); + bb_printf("0x%08x ", ipcp->KEY); if (pw) - bb_printf ("%-10d %-10.10s", shmid, pw->pw_name); + bb_printf("%-10d %-10.10s", shmid, pw->pw_name); else - bb_printf ("%-10d %-10d", shmid, ipcp->uid); - bb_printf ("%-10o %-10lu %-10ld %-6s %-6s\n", - ipcp->mode & 0777, - /* - * earlier: int, Austin has size_t - */ - (unsigned long) shmseg.shm_segsz, - /* - * glibc-2.1.3 and earlier has unsigned short; - * Austin has shmatt_t - */ - (long) shmseg.shm_nattch, - ipcp->mode & SHM_DEST ? "dest" : " ", - ipcp->mode & SHM_LOCKED ? "locked" : " "); + bb_printf("%-10d %-10d", shmid, ipcp->uid); + bb_printf("%-10o %-10lu %-10ld %-6s %-6s\n", ipcp->mode & 0777, + /* + * earlier: int, Austin has size_t + */ + (unsigned long) shmseg.shm_segsz, + /* + * glibc-2.1.3 and earlier has unsigned short; + * Austin has shmatt_t + */ + (long) shmseg.shm_nattch, + ipcp->mode & SHM_DEST ? "dest" : " ", + ipcp->mode & SHM_LOCKED ? "locked" : " "); break; } } - return; } -static void do_sem (char format) +static void do_sem(void) { int maxid, semid, id; struct semid_ds semary; @@ -263,107 +261,104 @@ static void do_sem (char format) struct passwd *pw; union semun arg; - arg.array = (ushort *) (void *) &seminfo; - maxid = semctl (0, 0, SEM_INFO, arg); + arg.array = (ushort *) (void *) &seminfo; + maxid = semctl(0, 0, SEM_INFO, arg); if (maxid < 0) { - bb_printf ("kernel not configured for semaphores\n"); + bb_printf("kernel not configured for semaphores\n"); return; } switch (format) { case LIMITS: - bb_printf ("------ Semaphore Limits --------\n"); - arg.array = (ushort *) (void *) &seminfo; /* damn union */ - if ((semctl (0, 0, IPC_INFO, arg)) < 0 ) + bb_printf("------ Semaphore Limits --------\n"); + arg.array = (ushort *) (void *) &seminfo; /* damn union */ + if ((semctl(0, 0, IPC_INFO, arg)) < 0) return; - bb_printf ("max number of arrays = %d\n" - "max semaphores per array = %d\n" - "max semaphores system wide = %d\n" - "max ops per semop call = %d\n" - "semaphore max value = %d\n", - seminfo.semmni, - seminfo.semmsl, - seminfo.semmns, - seminfo.semopm, - seminfo.semvmx); + bb_printf("max number of arrays = %d\n" + "max semaphores per array = %d\n" + "max semaphores system wide = %d\n" + "max ops per semop call = %d\n" + "semaphore max value = %d\n", + seminfo.semmni, + seminfo.semmsl, + seminfo.semmns, seminfo.semopm, seminfo.semvmx); return; case STATUS: - bb_printf ("------ Semaphore Status --------\n" - "used arrays = %d\n" - "allocated semaphores = %d\n", - seminfo.semusz, - seminfo.semaem); + bb_printf("------ Semaphore Status --------\n" + "used arrays = %d\n" + "allocated semaphores = %d\n", + seminfo.semusz, seminfo.semaem); return; case CREATOR: - bb_printf ("------ Semaphore Arrays Creators/Owners --------\n" - "%-10s %-10s %-10s %-10s %-10s %-10s\n", - "semid","perms","cuid","cgid","uid","gid"); + bb_printf("------ Semaphore Arrays Creators/Owners --------\n" + "%-10s %-10s %-10s %-10s %-10s %-10s\n", + "semid", "perms", "cuid", "cgid", "uid", "gid"); break; case TIME: - bb_printf ("------ Shared Memory Operation/Change Times --------\n" - "%-8s %-10s %-26.24s %-26.24s\n", - "shmid","owner","last-op","last-changed"); + bb_printf("------ Shared Memory Operation/Change Times --------\n" + "%-8s %-10s %-26.24s %-26.24s\n", + "shmid", "owner", "last-op", "last-changed"); break; case PID: break; default: - bb_printf ("------ Semaphore Arrays --------\n" - "%-10s %-10s %-10s %-10s %-10s\n", - "key","semid","owner","perms","nsems"); + bb_printf("------ Semaphore Arrays --------\n" + "%-10s %-10s %-10s %-10s %-10s\n", + "key", "semid", "owner", "perms", "nsems"); break; } for (id = 0; id <= maxid; id++) { arg.buf = (struct semid_ds *) &semary; - semid = semctl (id, 0, SEM_STAT, arg); + semid = semctl(id, 0, SEM_STAT, arg); if (semid < 0) continue; - if (format == CREATOR) { - print_perms (semid, ipcp); + if (format == CREATOR) { + print_perms(semid, ipcp); continue; } pw = getpwuid(ipcp->uid); switch (format) { case TIME: if (pw) - bb_printf ("%-8d %-10.10s", semid, pw->pw_name); + bb_printf("%-8d %-10.10s", semid, pw->pw_name); else - bb_printf ("%-8d %-10d", semid, ipcp->uid); - bb_printf (" %-26.24s", semary.sem_otime - ? ctime(&semary.sem_otime) : "Not set"); - bb_printf (" %-26.24s\n", semary.sem_ctime - ? ctime(&semary.sem_ctime) : "Not set"); + bb_printf("%-8d %-10d", semid, ipcp->uid); + /* ctime uses static buffer: use separate calls */ + bb_printf(" %-26.24s", semary.sem_otime + ? ctime(&semary.sem_otime) : "Not set"); + bb_printf(" %-26.24s\n", semary.sem_ctime + ? ctime(&semary.sem_ctime) : "Not set"); break; case PID: break; default: - bb_printf("0x%08x ", ipcp->KEY); + bb_printf("0x%08x ", ipcp->KEY); if (pw) - bb_printf ("%-10d %-10.9s", semid, pw->pw_name); + bb_printf("%-10d %-10.9s", semid, pw->pw_name); else - bb_printf ("%-10d %-9d", semid, ipcp->uid); - bb_printf ("%-10o %-10ld\n", - ipcp->mode & 0777, - /* - * glibc-2.1.3 and earlier has unsigned short; - * glibc-2.1.91 has variation between - * unsigned short and unsigned long - * Austin prescribes unsigned short. - */ - (long) semary.sem_nsems); + bb_printf("%-10d %-9d", semid, ipcp->uid); + bb_printf("%-10o %-10ld\n", ipcp->mode & 0777, + /* + * glibc-2.1.3 and earlier has unsigned short; + * glibc-2.1.91 has variation between + * unsigned short and unsigned long + * Austin prescribes unsigned short. + */ + (long) semary.sem_nsems); break; } } } -static void do_msg (char format) +static void do_msg(void) { int maxid, msqid, id; struct msqid_ds msgque; @@ -371,178 +366,165 @@ static void do_msg (char format) struct ipc_perm *ipcp = &msgque.msg_perm; struct passwd *pw; - maxid = msgctl (0, MSG_INFO, (struct msqid_ds *) (void *) &msginfo); + maxid = msgctl(0, MSG_INFO, (struct msqid_ds *) (void *) &msginfo); if (maxid < 0) { - bb_printf ("kernel not configured for message queues\n"); + bb_printf("kernel not configured for message queues\n"); return; } switch (format) { case LIMITS: - if ((msgctl (0, IPC_INFO, (struct msqid_ds *) (void *) &msginfo)) < 0 ) + if ((msgctl(0, IPC_INFO, (struct msqid_ds *) (void *) &msginfo)) < 0) return; - bb_printf ("------ Messages: Limits --------\n" - "max queues system wide = %d\n" - "max size of message (bytes) = %d\n" - "default max size of queue (bytes) = %d\n", - msginfo.msgmni, - msginfo.msgmax, - msginfo.msgmnb); + bb_printf("------ Messages: Limits --------\n" + "max queues system wide = %d\n" + "max size of message (bytes) = %d\n" + "default max size of queue (bytes) = %d\n", + msginfo.msgmni, msginfo.msgmax, msginfo.msgmnb); return; case STATUS: - bb_printf ("------ Messages: Status --------\n" - "allocated queues = %d\n" - "used headers = %d\n" - "used space = %d bytes\n", - msginfo.msgpool, - msginfo.msgmap, - msginfo.msgtql); + bb_printf("------ Messages: Status --------\n" + "allocated queues = %d\n" + "used headers = %d\n" + "used space = %d bytes\n", + msginfo.msgpool, msginfo.msgmap, msginfo.msgtql); return; case CREATOR: - bb_printf ("------ Message Queues: Creators/Owners --------\n" - "%-10s %-10s %-10s %-10s %-10s %-10s\n", - "msqid","perms","cuid","cgid","uid","gid"); + bb_printf("------ Message Queues: Creators/Owners --------\n" + "%-10s %-10s %-10s %-10s %-10s %-10s\n", + "msqid", "perms", "cuid", "cgid", "uid", "gid"); break; case TIME: - bb_printf ("------ Message Queues Send/Recv/Change Times --------\n" - "%-8s %-10s %-20s %-20s %-20s\n", - "msqid","owner","send","recv","change"); + bb_printf("------ Message Queues Send/Recv/Change Times --------\n" + "%-8s %-10s %-20s %-20s %-20s\n", + "msqid", "owner", "send", "recv", "change"); break; case PID: - bb_printf ("------ Message Queues PIDs --------\n" - "%-10s %-10s %-10s %-10s\n", - "msqid","owner","lspid","lrpid"); + bb_printf("------ Message Queues PIDs --------\n" + "%-10s %-10s %-10s %-10s\n", + "msqid", "owner", "lspid", "lrpid"); break; default: - bb_printf ("------ Message Queues --------\n" - "%-10s %-10s %-10s %-10s %-12s %-12s\n", - "key","msqid","owner","perms","used-bytes","messages"); + bb_printf("------ Message Queues --------\n" + "%-10s %-10s %-10s %-10s %-12s %-12s\n", + "key", "msqid", "owner", "perms", "used-bytes", "messages"); break; } for (id = 0; id <= maxid; id++) { - msqid = msgctl (id, MSG_STAT, &msgque); + msqid = msgctl(id, MSG_STAT, &msgque); if (msqid < 0) continue; - if (format == CREATOR) { - print_perms (msqid, ipcp); + if (format == CREATOR) { + print_perms(msqid, ipcp); continue; } pw = getpwuid(ipcp->uid); switch (format) { case TIME: if (pw) - bb_printf ("%-8d %-10.10s", msqid, pw->pw_name); + bb_printf("%-8d %-10.10s", msqid, pw->pw_name); else - bb_printf ("%-8d %-10d", msqid, ipcp->uid); - bb_printf (" %-20.16s", msgque.msg_stime - ? ctime(&msgque.msg_stime) + 4 : "Not set"); - bb_printf (" %-20.16s", msgque.msg_rtime - ? ctime(&msgque.msg_rtime) + 4 : "Not set"); - bb_printf (" %-20.16s\n", msgque.msg_ctime - ? ctime(&msgque.msg_ctime) + 4 : "Not set"); + bb_printf("%-8d %-10d", msqid, ipcp->uid); + bb_printf(" %-20.16s", msgque.msg_stime + ? ctime(&msgque.msg_stime) + 4 : "Not set"); + bb_printf(" %-20.16s", msgque.msg_rtime + ? ctime(&msgque.msg_rtime) + 4 : "Not set"); + bb_printf(" %-20.16s\n", msgque.msg_ctime + ? ctime(&msgque.msg_ctime) + 4 : "Not set"); break; case PID: if (pw) - bb_printf ("%-8d %-10.10s", msqid, pw->pw_name); + bb_printf("%-8d %-10.10s", msqid, pw->pw_name); else - bb_printf ("%-8d %-10d", msqid, ipcp->uid); - bb_printf (" %5d %5d\n", - msgque.msg_lspid, msgque.msg_lrpid); + bb_printf("%-8d %-10d", msqid, ipcp->uid); + bb_printf(" %5d %5d\n", msgque.msg_lspid, msgque.msg_lrpid); break; default: - bb_printf( "0x%08x ",ipcp->KEY ); + bb_printf("0x%08x ", ipcp->KEY); if (pw) - bb_printf ("%-10d %-10.10s", msqid, pw->pw_name); + bb_printf("%-10d %-10.10s", msqid, pw->pw_name); else - bb_printf ("%-10d %-10d", msqid, ipcp->uid); - bb_printf (" %-10o %-12ld %-12ld\n", - ipcp->mode & 0777, - /* - * glibc-2.1.3 and earlier has unsigned short; - * glibc-2.1.91 has variation between - * unsigned short, unsigned long - * Austin has msgqnum_t - */ - (long) msgque.msg_cbytes, - (long) msgque.msg_qnum); + bb_printf("%-10d %-10d", msqid, ipcp->uid); + bb_printf(" %-10o %-12ld %-12ld\n", ipcp->mode & 0777, + /* + * glibc-2.1.3 and earlier has unsigned short; + * glibc-2.1.91 has variation between + * unsigned short, unsigned long + * Austin has msgqnum_t + */ + (long) msgque.msg_cbytes, (long) msgque.msg_qnum); break; } } - return; } -static void print_shm (int shmid) +static void print_shm(int shmid) { struct shmid_ds shmds; struct ipc_perm *ipcp = &shmds.shm_perm; - if (shmctl (shmid, IPC_STAT, &shmds) == -1) { - perror ("shmctl "); + if (shmctl(shmid, IPC_STAT, &shmds) == -1) { + bb_perror_msg("shmctl"); return; } - bb_printf ("\nShared memory Segment shmid=%d\n" - "uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n" - "mode=%#o\taccess_perms=%#o\n" - "bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n" - "att_time=%-26.24s\n" - "det_time=%-26.24s\n" - "change_time=%-26.24s\n" - "\n", - shmid, - ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, - ipcp->mode, ipcp->mode & 0777, - (long) shmds.shm_segsz, shmds.shm_lpid, shmds.shm_cpid, - (long) shmds.shm_nattch, - shmds.shm_atime ? ctime (&shmds.shm_atime) : "Not set", - shmds.shm_dtime ? ctime (&shmds.shm_dtime) : "Not set", - ctime (&shmds.shm_ctime)); - return; + bb_printf("\nShared memory Segment shmid=%d\n" + "uid=%d\tgid=%d\tcuid=%d\tcgid=%d\n" + "mode=%#o\taccess_perms=%#o\n" + "bytes=%ld\tlpid=%d\tcpid=%d\tnattch=%ld\n", + shmid, + ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, + ipcp->mode, ipcp->mode & 0777, + (long) shmds.shm_segsz, shmds.shm_lpid, shmds.shm_cpid, + (long) shmds.shm_nattch); + bb_printf("att_time=%-26.24s\n", + shmds.shm_atime ? ctime(&shmds.shm_atime) : "Not set"); + bb_printf("det_time=%-26.24s\n", + shmds.shm_dtime ? ctime(&shmds.shm_dtime) : "Not set"); + bb_printf("change_time=%-26.24s\n\n", ctime(&shmds.shm_ctime)); } -static void print_msg (int msqid) +static void print_msg(int msqid) { struct msqid_ds buf; struct ipc_perm *ipcp = &buf.msg_perm; - if (msgctl (msqid, IPC_STAT, &buf) == -1) { - perror ("msgctl "); + if (msgctl(msqid, IPC_STAT, &buf) == -1) { + bb_perror_msg("msgctl"); return; } - bb_printf ("\nMessage Queue msqid=%d\n" - "uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n" - "cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n" - "send_time=%-26.24s\n" - "rcv_time=%-26.24s\n" - "change_time=%-26.24s\n" - "\n", - msqid, - ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, ipcp->mode, - /* - * 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, - buf.msg_stime ? ctime (&buf.msg_stime) : "Not set", - buf.msg_rtime ? ctime (&buf.msg_rtime) : "Not set", - buf.msg_ctime ? ctime (&buf.msg_ctime) : "Not set"); - return; + bb_printf("\nMessage Queue msqid=%d\n" + "uid=%d\tgid=%d\tcuid=%d\tcgid=%d\tmode=%#o\n" + "cbytes=%ld\tqbytes=%ld\tqnum=%ld\tlspid=%d\tlrpid=%d\n", + msqid, ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, ipcp->mode, + /* + * 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); + + bb_printf("send_time=%-26.24s\n", + buf.msg_stime ? ctime(&buf.msg_stime) : "Not set"); + bb_printf("rcv_time=%-26.24s\n", + buf.msg_rtime ? ctime(&buf.msg_rtime) : "Not set"); + bb_printf("change_time=%-26.24s\n\n", + buf.msg_ctime ? ctime(&buf.msg_ctime) : "Not set"); } -static void print_sem (int semid) +static void print_sem(int semid) { struct semid_ds semds; struct ipc_perm *ipcp = &semds.sem_perm; @@ -550,66 +532,69 @@ static void print_sem (int semid) unsigned int i; arg.buf = &semds; - if (semctl (semid, 0, IPC_STAT, arg) < 0) { - perror ("semctl "); + if (semctl(semid, 0, IPC_STAT, arg)) { + bb_perror_msg("semctl"); return; } - bb_printf ("\nSemaphore Array semid=%d\n" - "uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n" - "mode=%#o, access_perms=%#o\n" - "nsems = %ld\n" - "otime = %-26.24s\n" - "ctime = %-26.24s\n" - "%-10s %-10s %-10s %-10s %-10s\n", - semid, - ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, - ipcp->mode, ipcp->mode & 0777, - (long) semds.sem_nsems, - semds.sem_otime ? ctime (&semds.sem_otime) : "Not set", - ctime (&semds.sem_ctime), - "semnum","value","ncount","zcount","pid"); + bb_printf("\nSemaphore Array semid=%d\n" + "uid=%d\t gid=%d\t cuid=%d\t cgid=%d\n" + "mode=%#o, access_perms=%#o\n" + "nsems = %ld\n" + "otime = %-26.24s\n", + semid, + ipcp->uid, ipcp->gid, ipcp->cuid, ipcp->cgid, + ipcp->mode, ipcp->mode & 0777, + (long) semds.sem_nsems, + semds.sem_otime ? ctime(&semds.sem_otime) : "Not set"); + bb_printf("ctime = %-26.24s\n" + "%-10s %-10s %-10s %-10s %-10s\n", + ctime(&semds.sem_ctime), + "semnum", "value", "ncount", "zcount", "pid"); arg.val = 0; - for (i=0; i < semds.sem_nsems; i++) { + 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); + + 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) { - perror ("semctl "); - bb_fflush_stdout_and_exit (1); + bb_perror_msg_and_die("semctl"); } - bb_printf ("%-10d %-10d %-10d %-10d %-10d\n", - i, val, ncnt, zcnt, pid); + bb_printf("%-10d %-10d %-10d %-10d %-10d\n", i, val, ncnt, zcnt, pid); } - bb_printf ("\n"); - return; + bb_printf("\n"); } -int ipcs_main (int argc, char **argv) { - int opt, msg = 0, sem = 0, shm = 0, id=0, print=0; - char format = 0; - char options[] = "atclupsmqi:ih?"; - - while ((opt = getopt (argc, argv, options)) != -1) { +int ipcs_main(int argc, char **argv) +{ + int opt, id = 0; + unsigned flags = 0; +#define flag_print (1<<0) +#define flag_msg (1<<1) +#define flag_sem (1<<2) +#define flag_shm (1<<3) + const char *const options = "atclupsmqi:ih?"; + + while ((opt = getopt(argc, argv, options)) != -1) { switch (opt) { case 'i': - id = atoi (optarg); - print = 1; + id = atoi(optarg); + flags |= flag_print; break; case 'a': - msg = shm = sem = 1; + flags |= flag_msg | flag_sem | flag_shm; break; case 'q': - msg = 1; + flags |= flag_msg; break; case 's': - sem = 1; + flags |= flag_sem; break; case 'm': - shm = 1; + flags |= flag_shm; break; case 't': format = TIME; @@ -629,43 +614,40 @@ int ipcs_main (int argc, char **argv) { case 'h': case '?': bb_show_usage(); - bb_fflush_stdout_and_exit (0); } } - if (print) { - if (shm) { - print_shm (id); - bb_fflush_stdout_and_exit (0); + if (flags & flag_print) { + if (flags & flag_shm) { + print_shm(id); + bb_fflush_stdout_and_exit(0); } - if (sem) { - print_sem (id); - bb_fflush_stdout_and_exit (0); + if (flags & flag_sem) { + print_sem(id); + bb_fflush_stdout_and_exit(0); } - if (msg) { - print_msg (id); - bb_fflush_stdout_and_exit (0); + if (flags & flag_msg) { + print_msg(id); + bb_fflush_stdout_and_exit(0); } bb_show_usage(); - bb_fflush_stdout_and_exit (0); } - if ( !shm && !msg && !sem) - msg = sem = shm = 1; - bb_printf ("\n"); + if (!(flags & (flag_shm | flag_msg | flag_sem))) + flags |= flag_msg | flag_shm | flag_sem; + bb_printf("\n"); - if (shm) { - do_shm (format); - bb_printf ("\n"); + if (flags & flag_shm) { + do_shm(); + bb_printf("\n"); } - if (sem) { - do_sem (format); - bb_printf ("\n"); + if (flags & flag_sem) { + do_sem(); + bb_printf("\n"); } - if (msg) { - do_msg (format); - bb_printf ("\n"); + if (flags & flag_msg) { + do_msg(); + bb_printf("\n"); } - return 0; + return EXIT_SUCCESS; } - |