aboutsummaryrefslogtreecommitdiff
path: root/util-linux/ipcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'util-linux/ipcs.c')
-rw-r--r--util-linux/ipcs.c76
1 files changed, 33 insertions, 43 deletions
diff --git a/util-linux/ipcs.c b/util-linux/ipcs.c
index 7092ecd92..4863a5c29 100644
--- a/util-linux/ipcs.c
+++ b/util-linux/ipcs.c
@@ -101,8 +101,6 @@ union semun {
101#define TIME 4 101#define TIME 4
102#define PID 5 102#define PID 5
103 103
104static char format;
105
106static void print_perms(int id, struct ipc_perm *ipcp) 104static void print_perms(int id, struct ipc_perm *ipcp)
107{ 105{
108 struct passwd *pw; 106 struct passwd *pw;
@@ -125,8 +123,7 @@ static void print_perms(int id, struct ipc_perm *ipcp)
125 else printf(" %-10d\n", ipcp->gid); 123 else printf(" %-10d\n", ipcp->gid);
126} 124}
127 125
128 126static NOINLINE void do_shm(int format)
129static NOINLINE void do_shm(void)
130{ 127{
131 int maxid, shmid, id; 128 int maxid, shmid, id;
132 struct shmid_ds shmseg; 129 struct shmid_ds shmseg;
@@ -252,8 +249,7 @@ static NOINLINE void do_shm(void)
252 } 249 }
253} 250}
254 251
255 252static NOINLINE void do_sem(int format)
256static NOINLINE void do_sem(void)
257{ 253{
258 int maxid, semid, id; 254 int maxid, semid, id;
259 struct semid_ds semary; 255 struct semid_ds semary;
@@ -358,8 +354,7 @@ static NOINLINE void do_sem(void)
358 } 354 }
359} 355}
360 356
361 357static NOINLINE void do_msg(int format)
362static NOINLINE void do_msg(void)
363{ 358{
364 int maxid, msqid, id; 359 int maxid, msqid, id;
365 struct msqid_ds msgque; 360 struct msqid_ds msgque;
@@ -466,7 +461,6 @@ static NOINLINE void do_msg(void)
466 } 461 }
467} 462}
468 463
469
470static void print_shm(int shmid) 464static void print_shm(int shmid)
471{ 465{
472 struct shmid_ds shmds; 466 struct shmid_ds shmds;
@@ -493,7 +487,6 @@ static void print_shm(int shmid)
493 printf("change_time=%-26.24s\n\n", ctime(&shmds.shm_ctime)); 487 printf("change_time=%-26.24s\n\n", ctime(&shmds.shm_ctime));
494} 488}
495 489
496
497static void print_msg(int msqid) 490static void print_msg(int msqid)
498{ 491{
499 struct msqid_ds buf; 492 struct msqid_ds buf;
@@ -570,9 +563,9 @@ static void print_sem(int semid)
570} 563}
571 564
572//usage:#define ipcs_trivial_usage 565//usage:#define ipcs_trivial_usage
573//usage: "[[-smq] -i shmid] | [[-asmq] [-tcplu]]" 566//usage: "[[-smq] -i SHMID] | [[-asmq] [-tcplu]]"
574//usage:#define ipcs_full_usage "\n\n" 567//usage:#define ipcs_full_usage "\n\n"
575//usage: " -i Show specific resource" 568//usage: " -i ID Show specific resource"
576//usage: "\nResource specification:" 569//usage: "\nResource specification:"
577//usage: "\n -m Shared memory segments" 570//usage: "\n -m Shared memory segments"
578//usage: "\n -q Message queues" 571//usage: "\n -q Message queues"
@@ -588,60 +581,57 @@ static void print_sem(int semid)
588int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 581int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
589int ipcs_main(int argc UNUSED_PARAM, char **argv) 582int ipcs_main(int argc UNUSED_PARAM, char **argv)
590{ 583{
591 int id = 0; 584 int format = 0;
592 unsigned flags = 0;
593 unsigned opt; 585 unsigned opt;
594 char *opt_i; 586 char *opt_i;
595#define flag_print (1<<0)
596#define flag_msg (1<<1)
597#define flag_sem (1<<2)
598#define flag_shm (1<<3)
599 587
600 opt = getopt32(argv, "i:aqsmtcplu", &opt_i); 588 opt = getopt32(argv, "i:aqsmtcplu", &opt_i);
601 if (opt & 0x1) { // -i 589#define flag_msg (1<<2)
590#define flag_sem (1<<3)
591#define flag_shm (1<<4)
592 if (opt & (1<<5)) format = TIME; // -t
593 if (opt & (1<<6)) format = CREATOR; // -c
594 if (opt & (1<<7)) format = PID; // -p
595 if (opt & (1<<8)) format = LIMITS; // -l
596 if (opt & (1<<9)) format = STATUS; // -u
597
598 if (opt & (1<<0)) { // -i
599 int id;
600
602 id = xatoi(opt_i); 601 id = xatoi(opt_i);
603 flags |= flag_print; 602 if (opt & flag_shm) {
604 }
605 if (opt & 0x2) flags |= flag_msg | flag_sem | flag_shm; // -a
606 if (opt & 0x4) flags |= flag_msg; // -q
607 if (opt & 0x8) flags |= flag_sem; // -s
608 if (opt & 0x10) flags |= flag_shm; // -m
609 if (opt & 0x20) format = TIME; // -t
610 if (opt & 0x40) format = CREATOR; // -c
611 if (opt & 0x80) format = PID; // -p
612 if (opt & 0x100) format = LIMITS; // -l
613 if (opt & 0x200) format = STATUS; // -u
614
615 if (flags & flag_print) {
616 if (flags & flag_shm) {
617 print_shm(id); 603 print_shm(id);
618 fflush_stdout_and_exit(EXIT_SUCCESS); 604 fflush_stdout_and_exit(EXIT_SUCCESS);
619 } 605 }
620 if (flags & flag_sem) { 606 if (opt & flag_sem) {
621 print_sem(id); 607 print_sem(id);
622 fflush_stdout_and_exit(EXIT_SUCCESS); 608 fflush_stdout_and_exit(EXIT_SUCCESS);
623 } 609 }
624 if (flags & flag_msg) { 610 if (opt & flag_msg) {
625 print_msg(id); 611 print_msg(id);
626 fflush_stdout_and_exit(EXIT_SUCCESS); 612 fflush_stdout_and_exit(EXIT_SUCCESS);
627 } 613 }
628 bb_show_usage(); 614 bb_show_usage();
629 } 615 }
630 616
631 if (!(flags & (flag_shm | flag_msg | flag_sem))) 617 if ((opt & (1<<1)) // -a
632 flags |= flag_msg | flag_shm | flag_sem; 618 || !(opt & (flag_msg | flag_sem | flag_shm)) // none of -q,-s,-m == all
619 ) {
620 opt |= flag_msg | flag_sem | flag_shm;
621 }
622
633 bb_putchar('\n'); 623 bb_putchar('\n');
634 624
635 if (flags & flag_msg) { 625 if (opt & flag_msg) {
636 do_msg(); 626 do_msg(format);
637 bb_putchar('\n'); 627 bb_putchar('\n');
638 } 628 }
639 if (flags & flag_shm) { 629 if (opt & flag_shm) {
640 do_shm(); 630 do_shm(format);
641 bb_putchar('\n'); 631 bb_putchar('\n');
642 } 632 }
643 if (flags & flag_sem) { 633 if (opt & flag_sem) {
644 do_sem(); 634 do_sem(format);
645 bb_putchar('\n'); 635 bb_putchar('\n');
646 } 636 }
647 fflush_stdout_and_exit(EXIT_SUCCESS); 637 fflush_stdout_and_exit(EXIT_SUCCESS);