top,ps: improve /proc/PID/cmdinfo reading code
function old new delta
display_status - 1231 +1231
read_cmdline - 101 +101
parse_conf 1284 1303 +19
arith 2033 2042 +9
collect_blk 467 474 +7
fsck_main 1909 1911 +2
dhcprelay_main 1125 1122 -3
singlemount 4555 4547 -8
read_close 50 36 -14
get_lcm 123 105 -18
ed_main 3111 3084 -27
func_args 73 28 -45
procps_scan 732 658 -74
top_main 2187 899 -1288
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 4/8 up/down: 1369/-1477) Total: -108 bytes
text data bss dec hex filename
676048 2744 13968 692760 a9218 busybox_old
675940 2744 13968 692652 a91ac busybox_unstripped
diff --git a/include/libbb.h b/include/libbb.h
index 6a699a7..a95de84 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -836,7 +836,7 @@
typedef struct {
DIR *dir;
/* Fields are set to 0/NULL if failed to determine (or not requested) */
- char *cmd;
+ /*char *cmd;*/
char *argv0;
/*char *exe;*/
USE_SELINUX(char *context;)
@@ -852,7 +852,9 @@
unsigned gid;
unsigned tty_major,tty_minor;
char state[4];
- /* basename of executable in exec(2), read from /proc/N/stat */
+ /* basename of executable in exec(2), read from /proc/N/stat
+ * (if executable is symlink or script, it is NOT replaced
+ * by link target or interpreter name) */
char comm[COMM_LEN];
/* user/group? - use passwd/group parsing functions */
} procps_status_t;
@@ -863,9 +865,9 @@
PSSCAN_SID = 1 << 3,
PSSCAN_UIDGID = 1 << 4,
PSSCAN_COMM = 1 << 5,
- PSSCAN_CMD = 1 << 6,
+ /* PSSCAN_CMD = 1 << 6, - use read_cmdline instead */
PSSCAN_ARGV0 = 1 << 7,
- PSSCAN_EXE = 1 << 8, /* not implemented yet */
+ /* PSSCAN_EXE = 1 << 8, - not implemented */
PSSCAN_STATE = 1 << 9,
PSSCAN_VSZ = 1 << 10,
PSSCAN_RSS = 1 << 11,
@@ -883,6 +885,9 @@
procps_status_t* alloc_procps_scan(int flags);
void free_procps_scan(procps_status_t* sp);
procps_status_t* procps_scan(procps_status_t* sp, int flags);
+/* Format cmdline (up to col chars) into char buf[col+1] */
+/* Puts [comm] if cmdline is empty (-> process is a kernel thread) */
+void read_cmdline(char *buf, int col, unsigned pid, const char *comm);
pid_t *find_pid_by_name(const char* procName);
pid_t *pidlist_reverse(pid_t *pidList);