summaryrefslogtreecommitdiffhomepage
path: root/procps/ps.c
diff options
context:
space:
mode:
Diffstat (limited to 'procps/ps.c')
-rw-r--r--procps/ps.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/procps/ps.c b/procps/ps.c
index 0c9b71e09..5128c3d59 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -109,7 +109,7 @@ static const ps_out_t out_spec[] = {
// { sizeof("RGROUP" )-1, "rgroup","RGROUP" ,func_rgroup,PSSCAN_UIDGID },
// { sizeof("RUSER" )-1, "ruser" ,"RUSER" ,func_ruser ,PSSCAN_UIDGID },
// { sizeof("TIME" )-1, "time" ,"TIME" ,func_time ,PSSCAN_ },
- { sizeof("TT" )-1, "tty" ,"TT" ,func_tty ,PSSCAN_TTY },
+ { 6 , "tty" ,"TT" ,func_tty ,PSSCAN_TTY },
{ 4 , "vsz" ,"VSZ" ,func_vsz ,PSSCAN_VSZ },
// Not mandated by POSIX, but useful:
{ 4 , "rss" ,"RSS" ,func_rss ,PSSCAN_RSS },
@@ -117,13 +117,25 @@ static const ps_out_t out_spec[] = {
#define VEC_SIZE(v) ( sizeof(v) / sizeof((v)[0]) )
-static ps_out_t* out;
-static int out_cnt;
-static int print_header;
-static int ps_flags;
-static char *buffer;
-static unsigned terminal_width;
+#define DEFAULT_O_STR "pid,user" /* TODO: ,vsz,stat */ ",args"
+struct globals {
+ ps_out_t* out;
+ int out_cnt;
+ int print_header;
+ int need_flags;
+ char *buffer;
+ unsigned terminal_width;
+ char default_o[sizeof(DEFAULT_O_STR)];
+};
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define out (G.out )
+#define out_cnt (G.out_cnt )
+#define print_header (G.print_header )
+#define need_flags (G.need_flags )
+#define buffer (G.buffer )
+#define terminal_width (G.terminal_width)
+#define default_o (G.default_o )
static ps_out_t* new_out_t(void)
{
@@ -186,7 +198,7 @@ static void post_process(void)
int i;
int width = 0;
for (i = 0; i < out_cnt; i++) {
- ps_flags |= out[i].ps_flags;
+ need_flags |= out[i].ps_flags;
if (out[i].header[0]) {
print_header = 1;
}
@@ -241,15 +253,15 @@ static void format_process(const procps_status_t *ps)
printf("%.*s\n", terminal_width, buffer);
}
-/* Cannot be const: parse_o() will choke */
-static char default_o[] = "pid,user" /* TODO: ,vsz,stat */ ",args";
-
int ps_main(int argc, char **argv);
int ps_main(int argc, char **argv)
{
procps_status_t *p;
llist_t* opt_o = NULL;
+ /* Cannot be const: parse_o() will choke */
+ strcpy(default_o, DEFAULT_O_STR);
+
// POSIX:
// -a Write information for all processes associated with terminals
// Implementations may omit session leaders from this list
@@ -282,7 +294,7 @@ int ps_main(int argc, char **argv)
format_header();
p = NULL;
- while ((p = procps_scan(p, ps_flags))) {
+ while ((p = procps_scan(p, need_flags))) {
format_process(p);
}