From 6ec1cff34273971e7aa2b2439d536dc2c9f03264 Mon Sep 17 00:00:00 2001 From: albert <> Date: Tue, 12 Oct 2004 00:12:25 +0000 Subject: [PATCH] ps: built-in test code, etc. --- Makefile | 4 +-- proc/escape.h | 3 --- proc/sysinfo.c | 2 +- procps.lsm | 8 +++--- procps.spec | 2 +- ps/common.h | 1 + ps/output.c | 67 +++++++++++++++++++++++++++++++++++++++++++------- 7 files changed, 67 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 11240f8e..23176de8 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ VERSION := 3 SUBVERSION := 2 -MINORVERSION := 3 +MINORVERSION := 4 TARVERSION := $(VERSION).$(SUBVERSION).$(MINORVERSION) ############ vars @@ -121,7 +121,7 @@ ALL_CFLAGS += $(m64) ALL_CFLAGS += $(call check_gcc,-Wdeclaration-after-statement,) ALL_CFLAGS += $(call check_gcc,-Wpadded,) -ALL_CFLAGS += $(call check_gcc,-Wstrict-aliasing=2,) +ALL_CFLAGS += $(call check_gcc,-Wstrict-aliasing,) # Adding -fno-gcse might be good for those files which # use computed goto. diff --git a/proc/escape.h b/proc/escape.h index 5ad3d42b..04cfbed2 100644 --- a/proc/escape.h +++ b/proc/escape.h @@ -14,9 +14,6 @@ EXTERN_C_BEGIN extern int escape_strlist(char *restrict dst, const char *restrict const *restrict src, size_t n); extern int escape_str(char *restrict dst, const char *restrict src, int bufsize, int maxglyphs); -extern int octal_escape_str(char *restrict dst, const char *restrict src, size_t n); -extern int simple_escape_str(char *restrict dst, const char *restrict src, size_t n); - extern int escape_command(char *restrict const outbuf, const proc_t *restrict const pp, int bytes, int glyphs, unsigned flags); EXTERN_C_END diff --git a/proc/sysinfo.c b/proc/sysinfo.c index e4c32cab..f46b5c28 100644 --- a/proc/sysinfo.c +++ b/proc/sysinfo.c @@ -204,7 +204,7 @@ static void init_libproc(void){ if(linux_version_code > LINUX_VERSION(2, 4, 0)){ Hertz = find_elf_note(AT_CLKTCK); if(Hertz!=NOTE_NOT_FOUND) return; - fprintf(stderr, "2.4 kernel w/o ELF notes? -- report this\n"); + fprintf(stderr, "2.4+ kernel w/o ELF notes? -- report this\n"); } old_Hertz_hack(); } diff --git a/procps.lsm b/procps.lsm index be6bd8f4..b4424a11 100644 --- a/procps.lsm +++ b/procps.lsm @@ -1,15 +1,15 @@ Begin4 Title: procps -Version: 3.2.2 -Entered-date: 2004-7-15 +Version: 3.2.4 +Entered-date: 2004-9-23 Description: Linux system utilities Keywords: procps /proc libproc sysctl pmap ps uptime tload slabtop free w top vmstat watch skill snice kill pgrep pkill Author: Albert Cahalan, Michael K. Johnson, Jim Warner, etc. Maintained-by: various Primary-site: http://procps.sf.net/ - 261kB procps-3.2.2.tar.gz + 261kB procps-3.2.4.tar.gz Alternate-site: http://www.debian.org/Packages/unstable/base/procps.html - 261kB procps-3.2.2.tar.gz + 261kB procps-3.2.4.tar.gz Copying-policy: mixed End diff --git a/procps.spec b/procps.spec index b6ca11e8..4c53b0ad 100644 --- a/procps.spec +++ b/procps.spec @@ -3,7 +3,7 @@ Summary: System and process monitoring utilities Name: procps %define major_version 3 %define minor_version 2 -%define revision 3 +%define revision 4 %define version %{major_version}.%{minor_version}.%{revision} Version: %{version} Release: 1 diff --git a/ps/common.h b/ps/common.h index a03eecf1..b8b180c1 100644 --- a/ps/common.h +++ b/ps/common.h @@ -54,6 +54,7 @@ #define HPU 8 /* HP-UX */ #define SGI 9 /* Irix */ #define SOE 10 /* IBM's S/390 OpenEdition */ +#define TST 11 /* test code */ /* * Try not to overflow the output buffer: diff --git a/ps/output.c b/ps/output.c index 12acde9e..7752a1b3 100644 --- a/ps/output.c +++ b/ps/output.c @@ -610,7 +610,7 @@ static int pr_wchan(char *restrict const outbuf, const proc_t *restrict const pp * only one thread waiting in the kernel, and '*' when there is * more than one thread waiting in the kernel. */ - if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-"); + if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "-"); if(wchan_is_number) return snprintf(outbuf, COLWID, "%x", (unsigned)(pp->wchan) & 0xffffffu); return snprintf(outbuf, COLWID, "%s", lookup_wchan(pp->wchan, pp->XXXID)); } @@ -804,7 +804,12 @@ static int pr_majflt(char *restrict const outbuf, const proc_t *restrict const p } static int pr_lim(char *restrict const outbuf, const proc_t *restrict const pp){ - if(pp->rss_rlim == RLIM_INFINITY) return snprintf(outbuf, COLWID, "%s", "xx"); + if(pp->rss_rlim == RLIM_INFINITY){ + outbuf[0] = 'x'; + outbuf[1] = 'x'; + outbuf[2] = '\0'; + return 2; + } return snprintf(outbuf, COLWID, "%5ld", pp->rss_rlim >> 10); } @@ -820,7 +825,7 @@ static int pr_wname(char *restrict const outbuf, const proc_t *restrict const pp * only one thread waiting in the kernel, and '*' when there is * more than one thread waiting in the kernel. */ - if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "%s", "-"); + if(!(pp->wchan & 0xffffff)) return snprintf(outbuf, COLWID, "-"); return snprintf(outbuf, COLWID, "%s", lookup_wchan(pp->wchan, pp->XXXID)); } @@ -1059,6 +1064,44 @@ fail: } +////////////////////////////// Test code ///////////////////////////////// + +// like "args" +static int pr_t_unlimited(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"[123456789-12345] ","ps","123456789-123456"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%3u]); +} +static int pr_t_unlimited2(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"unlimited", "[123456789-12345] ","ps","123456789-123456"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%4u]); +} + +// like "etime" +static int pr_t_right(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"999-23:59:59","99-23:59:59","9-23:59:59","59:59"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%4u]); +} +static int pr_t_right2(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"999-23:59:59","99-23:59:59","9-23:59:59"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%3u]); +} + +// like "tty" +static int pr_t_left(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"tty7","pts/9999","iseries/vtty42","ttySMX0","3270/tty4"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%5u]); +} +static int pr_t_left2(char *restrict const outbuf, const proc_t *restrict const pp){ + static const char *const vals[] = {"tty7","pts/9999","ttySMX0","3270/tty4"}; + (void)pp; + return snprintf(outbuf, COLWID, "%s", vals[lines_to_next_header%4u]); +} + /***************************************************************************/ /*************************** other stuff ***********************************/ @@ -1123,13 +1166,19 @@ static const format_struct format_array[] = { /* code header print() sort() width need vendor flags */ {"%cpu", "%CPU", pr_pcpu, sr_pcpu, 4, 0, BSD, ET|RIGHT}, /*pcpu*/ {"%mem", "%MEM", pr_pmem, sr_nop, 4, 0, BSD, PO|RIGHT}, /*pmem*/ +{"_left", "LLLLLLLL", pr_t_left, sr_nop, 8, 0, TST, ET|LEFT}, +{"_left2", "L2L2L2L2", pr_t_left2, sr_nop, 8, 0, TST, ET|LEFT}, +{"_right", "RRRRRRRRRRR", pr_t_right, sr_nop, 11, 0, TST, ET|RIGHT}, +{"_right2", "R2R2R2R2R2R", pr_t_right2, sr_nop, 11, 0, TST, ET|RIGHT}, +{"_unlimited","U", pr_t_unlimited, sr_nop, 16, 0, TST, ET|UNLIMITED}, +{"_unlimited2","U2", pr_t_unlimited2, sr_nop, 16, 0, TST, ET|UNLIMITED}, {"acflag", "ACFLG", pr_nop, sr_nop, 5, 0, XXX, AN|RIGHT}, /*acflg*/ {"acflg", "ACFLG", pr_nop, sr_nop, 5, 0, BSD, AN|RIGHT}, /*acflag*/ {"addr", "ADDR", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT}, {"addr_1", "ADDR", pr_nop, sr_nop, 1, 0, LNX, AN|LEFT}, {"alarm", "ALARM", pr_alarm, sr_alarm, 5, 0, LNX, AN|RIGHT}, {"argc", "ARGC", pr_nop, sr_nop, 4, 0, LNX, PO|RIGHT}, -{"args", "COMMAND", pr_args, sr_cmd, 16, ARG, U98, PO|UNLIMITED}, /*command*/ +{"args", "COMMAND", pr_args, sr_cmd, 27, ARG, U98, PO|UNLIMITED}, /*command*/ {"atime", "TIME", pr_time, sr_nop, 8, 0, SOE, ET|RIGHT}, /*cputime*/ /* was 6 wide */ {"blocked", "BLOCKED", pr_sigmask, sr_nop, 9, 0, BSD, TO|SIGNAL}, /*sigmask*/ {"bnd", "BND", pr_nop, sr_nop, 1, 0, AIX, TO|RIGHT}, @@ -1140,11 +1189,11 @@ static const format_struct format_array[] = { {"class", "CLS", pr_class, sr_sched, 3, 0, XXX, TO|LEFT}, {"cls", "CLS", pr_class, sr_sched, 3, 0, HPU, TO|RIGHT}, /*says HPUX or RT*/ {"cmaj_flt", "-", pr_nop, sr_cmaj_flt, 1, 0, LNX, AN|RIGHT}, -{"cmd", "CMD", pr_args, sr_cmd, 16, ARG, DEC, PO|UNLIMITED}, /*ucomm*/ +{"cmd", "CMD", pr_args, sr_cmd, 27, ARG, DEC, PO|UNLIMITED}, /*ucomm*/ {"cmin_flt", "-", pr_nop, sr_cmin_flt, 1, 0, LNX, AN|RIGHT}, {"cnswap", "-", pr_nop, sr_nop, 1, 0, LNX, AN|RIGHT}, -{"comm", "COMMAND", pr_comm, sr_cmd, 16, COM, U98, PO|UNLIMITED}, /*ucomm*/ -{"command", "COMMAND", pr_args, sr_cmd, 16, ARG, XXX, PO|UNLIMITED}, /*args*/ +{"comm", "COMMAND", pr_comm, sr_cmd, 15, COM, U98, PO|UNLIMITED}, /*ucomm*/ +{"command", "COMMAND", pr_args, sr_cmd, 27, ARG, XXX, PO|UNLIMITED}, /*args*/ {"context", "CONTEXT", pr_context, sr_nop, 31, 0, LNX, ET|LEFT}, {"cp", "CP", pr_cp, sr_pcpu, 3, 0, DEC, ET|RIGHT}, /*cpu*/ {"cpu", "CPU", pr_nop, sr_nop, 3, 0, BSD, AN|RIGHT}, /* FIXME ... HP-UX wants this as the CPU number for SMP? */ @@ -1321,8 +1370,8 @@ static const format_struct format_array[] = { {"tty4", "TTY", pr_tty4, sr_tty, 4, 0, LNX, PO|LEFT}, {"tty8", "TTY", pr_tty8, sr_tty, 8, 0, LNX, PO|LEFT}, {"u_procp", "UPROCP", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT}, -{"ucmd", "CMD", pr_comm, sr_cmd, 16, COM, DEC, PO|UNLIMITED}, /*ucomm*/ -{"ucomm", "COMMAND", pr_comm, sr_cmd, 16, COM, XXX, PO|UNLIMITED}, /*comm*/ +{"ucmd", "CMD", pr_comm, sr_cmd, 15, COM, DEC, PO|UNLIMITED}, /*ucomm*/ +{"ucomm", "COMMAND", pr_comm, sr_cmd, 15, COM, XXX, PO|UNLIMITED}, /*comm*/ {"uid", "UID", pr_euid, sr_euid, 5, 0, XXX, ET|RIGHT}, {"uid_hack", "UID", pr_euser, sr_euser, 8, USR, XXX, ET|USER}, {"umask", "UMASK", pr_nop, sr_nop, 5, 0, DEC, AN|RIGHT},