Patch from Cliff L. Biffle <cbiffle@safety.net> to display memory
usage in the ps listing
diff --git a/procps/ps.c b/procps/ps.c
index fcb605a..aa40860 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -49,14 +49,12 @@
  */
 
 typedef struct proc_s {
-	char
-	 cmd[16];					/* basename of executable file in call to exec(2) */
-	int
-	 ruid,						/* real only (sorry) */
-	 pid,						/* process id */
-	 ppid;						/* pid of parent process */
-	char
-	 state;						/* single-char code for process state (S=sleeping) */
+	char cmd[16];					/* basename of executable file in call to exec(2) */
+	int ruid;						/* real only (sorry) */
+	int pid;						/* process id */
+	int ppid;						/* pid of parent process */
+	char state;						/* single-char code for process state (S=sleeping) */
+	unsigned int vmsize;			/* size of process as far as the vm is concerned */
 } proc_t;
 
 
@@ -87,6 +85,8 @@
 	tmp = strstr(S, "State");
 	sscanf(tmp, "State:\t%c", &P->state);
 
+	P->pid = 0;
+	P->ppid = 0;
 	tmp = strstr(S, "Pid:");
 	if (tmp)
 		sscanf(tmp, "Pid:\t%d\n" "PPid:\t%d\n", &P->pid, &P->ppid);
@@ -94,13 +94,21 @@
 		error_msg("Internal error!");
 
 	/* For busybox, ignoring effective, saved, etc. */
+	P->ruid = 0;
 	tmp = strstr(S, "Uid:");
 	if (tmp)
 		sscanf(tmp, "Uid:\t%d", &P->ruid);
 	else
 		error_msg("Internal error!");
-
-
+	
+	P->vmsize = 0;
+	tmp = strstr(S, "VmSize:");
+	if (tmp)
+		sscanf(tmp, "VmSize:\t%d", &P->vmsize);
+#if 0
+	else
+		error_msg("Internal error!");
+#endif
 }
 
 extern int ps_main(int argc, char **argv)
@@ -131,7 +139,7 @@
 			terminal_width = win.ws_col - 1;
 #endif
 
-	printf("  PID  Uid     Stat Command\n");
+	printf("  PID  Uid     VmSize Stat Command\n");
 	while ((entry = readdir(dir)) != NULL) {
 		if (!isdigit(*entry->d_name))
 			continue;
@@ -150,7 +158,10 @@
 		if (file == NULL)
 			continue;
 		i = 0;
-		len = printf("%5d %-8s %c    ", p.pid, uidName, p.state);
+		if(p.vmsize == 0)
+			len = printf("%5d %-8s        %c    ", p.pid, uidName, p.state);
+		else
+			len = printf("%5d %-8s %6d %c    ", p.pid, uidName, p.vmsize, p.state);
 		while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
 			i++;
 			if (c == '\0')
@@ -235,8 +246,10 @@
 		if (*uidName == '\0')
 			sprintf(uidName, "%ld", info.euid);
 
-		len = printf("%5d %-8s %c    ", info.pid, uidName, info.state);
-
+		if(p.vmsize == 0)
+			len = printf("%5d %-8s        %c    ", p.pid, uidName, p.state);
+		else
+			len = printf("%5d %-8s %6d %c    ", p.pid, uidName, p.vmsize, p.state);
 		if (strlen(info.command_line) > 1) {
 			for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
 				if (*(info.command_line+j) == '\0' && *(info.command_line+j+1) != '\0') {