diff options
Diffstat (limited to 'util-linux/ipcs.c')
-rw-r--r-- | util-linux/ipcs.c | 76 |
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 | ||
104 | static char format; | ||
105 | |||
106 | static void print_perms(int id, struct ipc_perm *ipcp) | 104 | static 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 | 126 | static NOINLINE void do_shm(int format) | |
129 | static 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 | 252 | static NOINLINE void do_sem(int format) | |
256 | static 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 | 357 | static NOINLINE void do_msg(int format) | |
362 | static 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 | |||
470 | static void print_shm(int shmid) | 464 | static 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 | |||
497 | static void print_msg(int msqid) | 490 | static 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) | |||
588 | int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | 581 | int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
589 | int ipcs_main(int argc UNUSED_PARAM, char **argv) | 582 | int 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); |