mirror of
https://git.freebsd.org/ports.git
synced 2025-07-05 03:19:18 -04:00
111 lines
3 KiB
C
111 lines
3 KiB
C
--- src/killall.c.orig Fri Apr 23 15:51:26 2004
|
|
+++ src/killall.c Sat Sep 10 03:55:48 2005
|
|
@@ -80,7 +80,7 @@
|
|
struct dirent *de;
|
|
FILE *file;
|
|
struct stat st, sts[MAX_NAMES];
|
|
- int *name_len;
|
|
+ int *name_len = 0;
|
|
char *path, comm[COMM_LEN];
|
|
char *command_buf;
|
|
char *command;
|
|
@@ -171,7 +171,7 @@
|
|
}
|
|
for (i = 0; i < pids; i++)
|
|
{
|
|
- if (asprintf (&path, PROC_BASE "/%d/stat", pid_table[i]) < 0)
|
|
+ if (asprintf (&path, PROC_BASE "/%d/status", pid_table[i]) < 0)
|
|
continue;
|
|
if (!(file = fopen (path, "r")))
|
|
{
|
|
@@ -180,72 +180,13 @@
|
|
}
|
|
free (path);
|
|
empty = 0;
|
|
- okay = fscanf (file, "%*d (%[^)]", comm) == 1;
|
|
+ okay = fscanf (file, "%s", comm) == 1;
|
|
(void) fclose (file);
|
|
if (!okay)
|
|
continue;
|
|
got_long = 0;
|
|
command = NULL; /* make gcc happy */
|
|
length = strlen (comm);
|
|
- if (length == COMM_LEN - 1)
|
|
- {
|
|
- if (asprintf (&path, PROC_BASE "/%d/cmdline", pid_table[i]) < 0)
|
|
- continue;
|
|
- if (!(file = fopen (path, "r"))) {
|
|
- free (path);
|
|
- continue;
|
|
- }
|
|
- free (path);
|
|
- while (1) {
|
|
- /* look for actual command so we skip over initial "sh" if any */
|
|
- char *p;
|
|
- int cmd_size = 128;
|
|
- command_buf = (char *)malloc (cmd_size);
|
|
- if (!command_buf)
|
|
- exit (1);
|
|
-
|
|
- /* 'cmdline' has arguments separated by nulls */
|
|
- for (p=command_buf; ; p++) {
|
|
- int c;
|
|
- if (p == (command_buf + cmd_size))
|
|
- {
|
|
- int cur_size = cmd_size;
|
|
- cmd_size *= 2;
|
|
- command_buf = (char *)realloc(command_buf, cmd_size);
|
|
- if (!command_buf)
|
|
- exit (1);
|
|
- p = command_buf + cur_size;
|
|
- }
|
|
- c = fgetc(file);
|
|
- if (c == EOF || c == '\0') {
|
|
- *p = '\0';
|
|
- break;
|
|
- } else {
|
|
- *p = c;
|
|
- }
|
|
- }
|
|
- if (strlen(command_buf) == 0) {
|
|
- okay = 0;
|
|
- break;
|
|
- }
|
|
- p = strrchr(command_buf,'/');
|
|
- p = p ? p+1 : command_buf;
|
|
- if (strncmp(p, comm, COMM_LEN-1) == 0) {
|
|
- okay = 1;
|
|
- command = p;
|
|
- break;
|
|
- }
|
|
- }
|
|
- (void) fclose(file);
|
|
- if (exact && !okay)
|
|
- {
|
|
- if (verbose)
|
|
- fprintf (stderr, _("skipping partial match %s(%d)\n"), comm,
|
|
- pid_table[i]);
|
|
- continue;
|
|
- }
|
|
- got_long = okay;
|
|
- }
|
|
for (j = 0; j < names; j++)
|
|
{
|
|
pid_t id;
|
|
@@ -279,7 +220,7 @@
|
|
}
|
|
else
|
|
{
|
|
- if (asprintf (&path, PROC_BASE "/%d/exe", pid_table[i]) < 0)
|
|
+ if (asprintf (&path, PROC_BASE "/%d/file", pid_table[i]) < 0)
|
|
continue;
|
|
#ifdef FLASK_LINUX
|
|
if (stat_secure(path,&st,&lsid) < 0) {
|
|
@@ -355,6 +296,7 @@
|
|
fprintf (stderr, _("%s: no process killed\n"), namelist[i]);
|
|
if (pidof)
|
|
putchar ('\n');
|
|
+ return 0;
|
|
error = found == ((1 << (names - 1)) | ((1 << (names - 1)) - 1)) ? 0 : 1;
|
|
/*
|
|
* We scan all (supposedly) killed processes every second to detect dead
|