- sprintf(path, "/proc/%s/cmdline", entry->d_name);
- file = fopen(path, "r");
- if (file == NULL)
- continue;
- i = 0;
- 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')
- c = ' ';
- putc(c, stdout);
- }
- fclose(file);
- if (i == 0)
- printf("[%s]", p.cmd);
- putchar('\n');
- }
- closedir(dir);
- return EXIT_SUCCESS;
-}
-
-
-#else /* CONFIG_FEATURE_USE_DEVPS_PATCH */
-
-
-/* The following is the second ps implementation --
- * this one uses the nifty new devps kernel device.
- */
-
-#include <linux/devps.h> /* For Erik's nifty devps device driver */
-
-
-extern int ps_main(int argc, char **argv)
-{
- char device[] = "/dev/ps";
- int i, j, len, fd;
- pid_t num_pids;
- pid_t* pid_array = NULL;
- struct pid_info info;
- char uidName[9];
-#ifdef CONFIG_FEATURE_AUTOWIDTH
- struct winsize win = { 0, 0, 0, 0 };
- int terminal_width = TERMINAL_WIDTH;
-#else
-#define terminal_width TERMINAL_WIDTH
-#endif
-
- if (argc > 1 && **(argv + 1) == '-')
- show_usage();
-
- /* open device */
- fd = open(device, O_RDONLY);
- if (fd < 0)
- perror_msg_and_die( "open failed for `%s'", device);
-
- /* Find out how many processes there are */
- if (ioctl (fd, DEVPS_GET_NUM_PIDS, &num_pids)<0)
- perror_msg_and_die( "\nDEVPS_GET_PID_LIST");
-
- /* Allocate some memory -- grab a few extras just in case
- * some new processes start up while we wait. The kernel will
- * just ignore any extras if we give it too many, and will trunc.
- * the list if we give it too few. */
- pid_array = (pid_t*) xcalloc( num_pids+10, sizeof(pid_t));
- pid_array[0] = num_pids+10;
-
- /* Now grab the pid list */
- if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
- perror_msg_and_die("\nDEVPS_GET_PID_LIST");
-
-#ifdef CONFIG_FEATURE_AUTOWIDTH
- ioctl(fileno(stdout), TIOCGWINSZ, &win);
- if (win.ws_col > 0)
- terminal_width = win.ws_col - 1;