aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2010-04-07 18:03:34 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2010-04-07 18:03:34 +0200
commit39601843d70247a4c40f3810157a331fb8a7193b (patch)
treeb18765b285dd5f251e7cf41e71d4e5ff029346b5
parent1854bc1aa2081b99490bd60721122d28fc8a6737 (diff)
downloadbusybox-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.c49
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;
539int ps_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) 539int 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 */