diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-04-07 18:03:34 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-04-07 18:03:34 +0200 |
commit | 39601843d70247a4c40f3810157a331fb8a7193b (patch) | |
tree | b18765b285dd5f251e7cf41e71d4e5ff029346b5 | |
parent | 1854bc1aa2081b99490bd60721122d28fc8a6737 (diff) | |
download | busybox-w32-39601843d70247a4c40f3810157a331fb8a7193b.tar.gz busybox-w32-39601843d70247a4c40f3810157a331fb8a7193b.tar.bz2 busybox-w32-39601843d70247a4c40f3810157a331fb8a7193b.zip |
ps: fix non-DESKTOP option handling code
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | procps/ps.c | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/procps/ps.c b/procps/ps.c index 91ebd6819..b82c126d2 100644 --- a/procps/ps.c +++ b/procps/ps.c | |||
@@ -539,18 +539,18 @@ int ps_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | |||
539 | int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | 539 | int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) |
540 | { | 540 | { |
541 | procps_status_t *p; | 541 | procps_status_t *p; |
542 | int len; | ||
543 | int psscan_flags = PSSCAN_PID | PSSCAN_UIDGID | 542 | int psscan_flags = PSSCAN_PID | PSSCAN_UIDGID |
544 | | PSSCAN_STATE | PSSCAN_VSZ | PSSCAN_COMM; | 543 | | PSSCAN_STATE | PSSCAN_VSZ | PSSCAN_COMM; |
545 | #if !ENABLE_FEATURE_PS_WIDE | 544 | unsigned terminal_width IF_NOT_FEATURE_PS_WIDE(= 79); |
546 | enum { terminal_width = 79 }; | 545 | enum { |
547 | #else | 546 | OPT_Z = (1 << 0) * ENABLE_SELINUX, |
548 | unsigned terminal_width; | 547 | OPT_T = (1 << ENABLE_SELINUX) * ENABLE_FEATURE_SHOW_THREADS, |
549 | #endif | 548 | }; |
550 | 549 | int opts = 0; | |
551 | #if ENABLE_FEATURE_PS_WIDE || ENABLE_SELINUX | 550 | /* If we support any options, parse argv */ |
552 | int opts; | 551 | #if ENABLE_SELINUX || ENABLE_FEATURE_SHOW_THREADS || ENABLE_FEATURE_PS_WIDE |
553 | # if ENABLE_FEATURE_PS_WIDE | 552 | # if ENABLE_FEATURE_PS_WIDE |
553 | /* -w is a bit complicated */ | ||
554 | int w_count = 0; | 554 | int w_count = 0; |
555 | opt_complementary = "-:ww"; | 555 | opt_complementary = "-:ww"; |
556 | opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")"w", &w_count); | 556 | opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")"w", &w_count); |
@@ -565,27 +565,30 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |||
565 | if (--terminal_width > MAX_WIDTH) | 565 | if (--terminal_width > MAX_WIDTH) |
566 | terminal_width = MAX_WIDTH; | 566 | terminal_width = MAX_WIDTH; |
567 | } | 567 | } |
568 | # else /* only ENABLE_SELINUX */ | 568 | # else |
569 | opts = getopt32(argv, "Z"IF_FEATURE_SHOW_THREADS("T")); | 569 | /* -w is not supported, only -Z and/or -T */ |
570 | opt_complementary = "-"; | ||
571 | opts = getopt32(argv, IF_SELINUX("Z")IF_FEATURE_SHOW_THREADS("T")); | ||
570 | # endif | 572 | # endif |
571 | # if ENABLE_SELINUX | 573 | #endif |
572 | if ((opts & 1) && is_selinux_enabled()) | 574 | |
575 | #if ENABLE_SELINUX | ||
576 | if ((opts & OPT_Z) && is_selinux_enabled()) { | ||
573 | psscan_flags = PSSCAN_PID | PSSCAN_CONTEXT | 577 | psscan_flags = PSSCAN_PID | PSSCAN_CONTEXT |
574 | | PSSCAN_STATE | PSSCAN_COMM; | 578 | | PSSCAN_STATE | PSSCAN_COMM; |
575 | # endif | ||
576 | # if ENABLE_FEATURE_SHOW_THREADS | ||
577 | if (opts & (1 << ENABLE_SELINUX)) | ||
578 | psscan_flags |= PSSCAN_TASKS; | ||
579 | # endif | ||
580 | #endif /* ENABLE_FEATURE_PS_WIDE || ENABLE_SELINUX */ | ||
581 | |||
582 | if (psscan_flags & PSSCAN_CONTEXT) | ||
583 | puts(" PID CONTEXT STAT COMMAND"); | 579 | puts(" PID CONTEXT STAT COMMAND"); |
584 | else | 580 | } else |
581 | #endif | ||
582 | { | ||
585 | puts(" PID USER VSZ STAT COMMAND"); | 583 | puts(" PID USER VSZ STAT COMMAND"); |
584 | } | ||
585 | if (opts & OPT_T) { | ||
586 | psscan_flags |= PSSCAN_TASKS; | ||
587 | } | ||
586 | 588 | ||
587 | p = NULL; | 589 | p = NULL; |
588 | while ((p = procps_scan(p, psscan_flags)) != NULL) { | 590 | while ((p = procps_scan(p, psscan_flags)) != NULL) { |
591 | int len; | ||
589 | #if ENABLE_SELINUX | 592 | #if ENABLE_SELINUX |
590 | if (psscan_flags & PSSCAN_CONTEXT) { | 593 | if (psscan_flags & PSSCAN_CONTEXT) { |
591 | len = printf("%5u %-32.32s %s ", | 594 | len = printf("%5u %-32.32s %s ", |
@@ -621,4 +624,4 @@ int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) | |||
621 | return EXIT_SUCCESS; | 624 | return EXIT_SUCCESS; |
622 | } | 625 | } |
623 | 626 | ||
624 | #endif /* ENABLE_DESKTOP */ | 627 | #endif /* !ENABLE_DESKTOP */ |