int c;
if (p == (command_buf + cmd_size))
{
+ char *new_command_buf;
int cur_size = cmd_size;
cmd_size *= 2;
- command_buf = (char *)realloc(command_buf, cmd_size);
- if (!command_buf)
+ new_command_buf = (char *)realloc(command_buf, cmd_size);
+ if (!new_command_buf) {
+ if (command_buf)
+ free(command_buf);
exit (1);
+ }
+ command_buf = new_command_buf;
p = command_buf + cur_size;
}
c = fgetc(file);
p = p ? p+1 : command_buf;
if (strncmp(p, comm, COMM_LEN-1) == 0) {
okay = 1;
- if (!(*command = strdup(p)))
+ if (!(*command = strdup(p))) {
+ free(command_buf);
exit(1);
+ }
break;
}
}
continue;
got_long = 0;
- command = NULL; /* make gcc happy */
+ if (command) {
+ free(command);
+ command = NULL;
+ }
if (length == COMM_LEN - 1)
if (load_proc_cmdline(pid_table[i], comm, &command, &got_long) < 0)
continue;
else if (errno != ESRCH || interactive)
fprintf (stderr, "%s(%d): %s\n", got_long ? command :
comm, id, strerror (errno));
- if (command) {
- free(command);
- command = NULL;
- }
}
+ if (command)
+ free(command);
free(reglist);
free(pgids);
if (!quiet)
}
free(pid_killed);
free(pid_table);
- free(command);
free(name_info);
return error;
}