procps: remove all global variables
text data bss dec hex filename 1462 14 24 1500 5dc busybox.t2/procps/ps.o 1484 0 0 1484 5cc busybox.t3/procps/ps.o 3122 0 252 3374 d2e busybox.t1/procps/top.o 3117 0 0 3117 c2d busybox.t3/procps/top.o
This commit is contained in:
parent
516a0ca2dc
commit
8581863a1b
@ -931,8 +931,8 @@ extern const int const_int_1;
|
||||
#ifndef BUFSIZ
|
||||
#define BUFSIZ 4096
|
||||
#endif
|
||||
// TODO: provide hard guarantees on minimum size of bb_common_bufsiz1
|
||||
extern char bb_common_bufsiz1[BUFSIZ+1];
|
||||
/* Providing hard guarantee on minimum size (think of BUFSIZ == 128) */
|
||||
extern char bb_common_bufsiz1[(BUFSIZ > 256*sizeof(void*) ? BUFSIZ : 256*sizeof(void*)) + 1];
|
||||
/* This struct is deliberately not defined. */
|
||||
/* See docs/keep_data_small.txt */
|
||||
struct globals;
|
||||
|
@ -54,7 +54,7 @@ WTMP_FILE;
|
||||
# error unknown path to wtmp file
|
||||
#endif
|
||||
|
||||
char bb_common_bufsiz1[BUFSIZ+1];
|
||||
char bb_common_bufsiz1[(BUFSIZ > 256*sizeof(void*) ? BUFSIZ : 256*sizeof(void*)) + 1];
|
||||
|
||||
struct globals;
|
||||
/* Make it reside in R/W memory: */
|
||||
|
@ -184,7 +184,7 @@ procps_status_t* procps_scan(procps_status_t* sp, int flags)
|
||||
|
||||
sp->tty_str[0] = '?';
|
||||
/* sp->tty_str[1] = '\0'; - done by memset */
|
||||
if (tty >= 0) /* tty field of "-1" means "no tty" */
|
||||
if (tty) /* tty field of "0" means "no tty" */
|
||||
snprintf(sp->tty_str, sizeof(sp->tty_str), "%u,%u",
|
||||
(tty >> 8) & 0xfff, /* major */
|
||||
(tty & 0xff) | ((tty >> 12) & 0xfff00));
|
||||
|
36
procps/ps.c
36
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);
|
||||
}
|
||||
|
||||
|
77
procps/top.c
77
procps/top.c
@ -31,7 +31,7 @@
|
||||
#include "busybox.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
typedef struct top_status_t {
|
||||
unsigned long vsz;
|
||||
#if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
unsigned long ticks;
|
||||
@ -42,24 +42,60 @@ typedef struct {
|
||||
char state[4];
|
||||
char comm[COMM_LEN];
|
||||
} top_status_t;
|
||||
static top_status_t *top;
|
||||
static int ntop;
|
||||
|
||||
typedef struct jiffy_counts_t{
|
||||
unsigned long long usr,nic,sys,idle,iowait,irq,softirq,steal;
|
||||
unsigned long long total;
|
||||
unsigned long long busy;
|
||||
} jiffy_counts_t;
|
||||
|
||||
/* This structure stores some critical information from one frame to
|
||||
the next. Used for finding deltas. */
|
||||
struct save_hist {
|
||||
typedef struct save_hist {
|
||||
unsigned long ticks;
|
||||
unsigned pid;
|
||||
} save_hist;
|
||||
|
||||
typedef int (*cmp_funcp)(top_status_t *P, top_status_t *Q);
|
||||
|
||||
enum { SORT_DEPTH = 3 };
|
||||
|
||||
struct globals {
|
||||
top_status_t *top;
|
||||
int ntop;
|
||||
#if ENABLE_FEATURE_USE_TERMIOS
|
||||
struct termios initial_settings;
|
||||
#endif
|
||||
#if !ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
cmp_funcp sort_function;
|
||||
#else
|
||||
cmp_funcp sort_function[SORT_DEPTH];
|
||||
struct save_hist *prev_hist;
|
||||
int prev_hist_count;
|
||||
jiffy_counts_t jif, prev_jif;
|
||||
/* int hist_iterations; */
|
||||
unsigned total_pcpu;
|
||||
/* unsigned long total_vsz; */
|
||||
#endif
|
||||
};
|
||||
#define G (*(struct globals*)&bb_common_bufsiz1)
|
||||
#define top (G.top )
|
||||
#define ntop (G.ntop )
|
||||
#if ENABLE_FEATURE_USE_TERMIOS
|
||||
#define initial_settings (G. initial_settings )
|
||||
#endif
|
||||
#define sort_function (G.sort_function )
|
||||
#if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
static struct save_hist *prev_hist;
|
||||
static int prev_hist_count;
|
||||
/* static int hist_iterations; */
|
||||
static unsigned total_pcpu;
|
||||
/* static unsigned long total_vsz; */
|
||||
#define prev_hist (G.prev_hist )
|
||||
#define prev_hist_count (G.prev_hist_count )
|
||||
#define jif (G.jif )
|
||||
#define prev_jif (G.prev_jif )
|
||||
#define total_pcpu (G.total_pcpu )
|
||||
#endif
|
||||
|
||||
#define OPT_BATCH_MODE (option_mask32 & 0x4)
|
||||
|
||||
|
||||
#if ENABLE_FEATURE_USE_TERMIOS
|
||||
static int pid_sort(top_status_t *P, top_status_t *Q)
|
||||
{
|
||||
@ -77,17 +113,7 @@ static int mem_sort(top_status_t *P, top_status_t *Q)
|
||||
}
|
||||
|
||||
|
||||
typedef int (*cmp_funcp)(top_status_t *P, top_status_t *Q);
|
||||
|
||||
#if !ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
|
||||
static cmp_funcp sort_function;
|
||||
|
||||
#else
|
||||
|
||||
enum { SORT_DEPTH = 3 };
|
||||
|
||||
static cmp_funcp sort_function[SORT_DEPTH];
|
||||
#if ENABLE_FEATURE_TOP_CPU_USAGE_PERCENTAGE
|
||||
|
||||
static int pcpu_sort(top_status_t *P, top_status_t *Q)
|
||||
{
|
||||
@ -116,12 +142,6 @@ static int mult_lvl_cmp(void* a, void* b)
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned long long usr,nic,sys,idle,iowait,irq,softirq,steal;
|
||||
unsigned long long total;
|
||||
unsigned long long busy;
|
||||
} jiffy_counts_t;
|
||||
static jiffy_counts_t jif, prev_jif;
|
||||
static void get_jiffy_counts(void)
|
||||
{
|
||||
FILE* fp = xfopen("stat", "r");
|
||||
@ -391,8 +411,6 @@ static void clearmems(void)
|
||||
#include <termios.h>
|
||||
#include <signal.h>
|
||||
|
||||
static struct termios initial_settings;
|
||||
|
||||
static void reset_term(void)
|
||||
{
|
||||
tcsetattr(0, TCSANOW, (void *) &initial_settings);
|
||||
@ -426,8 +444,9 @@ int top_main(int argc, char **argv)
|
||||
unsigned char c;
|
||||
#endif /* FEATURE_USE_TERMIOS */
|
||||
|
||||
/* do normal option parsing */
|
||||
interval = 5;
|
||||
|
||||
/* do normal option parsing */
|
||||
opt_complementary = "-";
|
||||
getopt32(argc, argv, "d:n:b", &sinterval, &siterations);
|
||||
if (option_mask32 & 0x1) interval = xatou(sinterval); // -d
|
||||
|
Loading…
Reference in New Issue
Block a user