diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-01-03 12:04:58 +0100 |
commit | 008d0be72b2f160382c6e880765e96b64a050c65 (patch) | |
tree | 36f48a98a3815a408e2ce1693dd182af90f80305 /release/src/router/busybox/procps/ps.c | |
parent | 611becfb8726c60cb060368541ad98191d4532f5 (diff) | |
download | tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.gz tomato-008d0be72b2f160382c6e880765e96b64a050c65.tar.bz2 |
imported original firmware WRT54GL_v4.30.11_11_US
Diffstat (limited to 'release/src/router/busybox/procps/ps.c')
-rw-r--r-- | release/src/router/busybox/procps/ps.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/release/src/router/busybox/procps/ps.c b/release/src/router/busybox/procps/ps.c new file mode 100644 index 00000000..9dc45d35 --- /dev/null +++ b/release/src/router/busybox/procps/ps.c @@ -0,0 +1,117 @@ +/* vi: set sw=4 ts=4: */ +/* + * Mini ps implementation(s) for busybox + * + * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <ctype.h> +#include <string.h> +#include <termios.h> +#include <sys/ioctl.h> +#include "busybox.h" +#ifdef CONFIG_SELINUX +#include <fs_secure.h> +#include <ss.h> +#include <flask_util.h> /* for is_flask_enabled() */ +#endif + +static const int TERMINAL_WIDTH = 79; /* not 80 in case terminal has linefold bug */ + + + +extern int ps_main(int argc, char **argv) +{ + procps_status_t * p; + int i, len; +#ifdef CONFIG_FEATURE_AUTOWIDTH + struct winsize win = { 0, 0, 0, 0 }; + int terminal_width = TERMINAL_WIDTH; +#else +#define terminal_width TERMINAL_WIDTH +#endif + +#ifdef CONFIG_SELINUX + int use_selinux = 0; + security_id_t sid; + if(is_flask_enabled() && argv[1] && !strcmp(argv[1], "-c") ) + use_selinux = 1; +#endif + + +#ifdef CONFIG_FEATURE_AUTOWIDTH + ioctl(fileno(stdout), TIOCGWINSZ, &win); + if (win.ws_col > 0) + terminal_width = win.ws_col - 1; +#endif + +#ifdef CONFIG_SELINUX + if(use_selinux) + printf(" PID Context Stat Command\n"); + else +#endif + printf(" PID Uid VmSize Stat Command\n"); +#ifdef CONFIG_SELINUX + while ((p = procps_scan(1, use_selinux, &sid)) != 0) { +#else + while ((p = procps_scan(1)) != 0) { +#endif + char *namecmd = p->cmd; + +#ifdef CONFIG_SELINUX + if(use_selinux) + { + char sbuf[128]; + len = sizeof(sbuf); + if(security_sid_to_context(sid, (security_context_t)&sbuf, &len)) + strcpy(sbuf, "unknown"); + + len = printf("%5d %-32s %s ", p->pid, sbuf, p->state); + } + else +#endif + if(p->rss == 0) + len = printf("%5d %-8s %s ", p->pid, p->user, p->state); + else + len = printf("%5d %-8s %6ld %s ", p->pid, p->user, p->rss, p->state); + i = terminal_width-len; + + if(namecmd != 0 && namecmd[0] != 0) { + if(i < 0) + i = 0; + if(strlen(namecmd) > i) + namecmd[i] = 0; + printf("%s\n", namecmd); + } else { + namecmd = p->short_cmd; + if(i < 2) + i = 2; + if(strlen(namecmd) > (i-2)) + namecmd[i-2] = 0; + printf("[%s]\n", namecmd); + } + free(p->cmd); + } + return EXIT_SUCCESS; +} + |