summaryrefslogtreecommitdiffstats
path: root/src/killall.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/killall.c')
-rw-r--r--src/killall.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/killall.c b/src/killall.c
index 9f2782a..b1a6d18 100644
--- a/src/killall.c
+++ b/src/killall.c
@@ -259,7 +259,7 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
char *command_buf;
char *command;
pid_t *pid_table, pid, self, *pid_killed;
- pid_t *pgids;
+ pid_t *pgids = NULL;
int i, j, okay, length, got_long, error;
int pids, max_pids, pids_killed;
unsigned long found;
@@ -330,16 +330,14 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
exit (1);
}
if (!process_group)
- pgids = NULL; /* silence gcc */
- else
- {
+ {
pgids = calloc (pids, sizeof (pid_t));
if (!pgids)
{
perror ("malloc");
exit (1);
}
- }
+ }
for (i = 0; i < pids; i++)
{
pid_t id;
@@ -400,13 +398,13 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
continue;
}
free (path);
+ int cmd_size = 128;
+ command_buf = (char *)malloc (cmd_size);
+ if (!command_buf)
+ exit (1);
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++) {
@@ -440,6 +438,7 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
break;
}
}
+ free(command_buf);
(void) fclose(file);
if (exact && !okay)
{
@@ -530,6 +529,8 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
found_name = j;
break;
}
+ free(reglist);
+ free(name_len);
if (names && found_name==-1)
continue; /* match by process name faild */
@@ -570,6 +571,7 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
fprintf (stderr, "%s(%d): %s\n", got_long ? command :
comm, id, strerror (errno));
}
+ free(pgids);
if (!quiet)
for (i = 0; i < names; i++)
if (!(found & (1 << i)))
@@ -601,6 +603,8 @@ kill_all (int signal, int names, char **namelist, struct passwd *pwent)
}
sleep (1); /* wait a bit longer */
}
+ free(pid_killed);
+ free(pid_table);
return error;
}