kill_all: create strings with xasprintf

This commit is contained in:
William Hubbs 2018-02-14 16:50:24 -06:00
parent 0110487722
commit 74cfb455c5

View File

@ -87,10 +87,11 @@ static int mount_proc(void)
static bool is_user_process(pid_t pid) static bool is_user_process(pid_t pid)
{ {
char buf[PATH_MAX+1]; char *buf = NULL;
FILE *fp; FILE *fp;
char path[PATH_MAX+1]; char *path = NULL;
pid_t temp_pid; pid_t temp_pid;
size_t size;
bool user_process = true; bool user_process = true;
while (pid >0 && user_process) { while (pid >0 && user_process) {
@ -98,8 +99,9 @@ static bool is_user_process(pid_t pid)
user_process = false; user_process = false;
continue; continue;
} }
snprintf(path, sizeof(path), "/proc/%d/status", pid); xasprintf(&path, "/proc/%d/status", pid);
fp = fopen(path, "r"); fp = fopen(path, "r");
free(path);
/* /*
* if we could not open the file, the process disappeared, which * if we could not open the file, the process disappeared, which
* leaves us no way to determine for sure whether it was a user * leaves us no way to determine for sure whether it was a user
@ -112,12 +114,15 @@ static bool is_user_process(pid_t pid)
} }
temp_pid = -1; temp_pid = -1;
while (! feof(fp)) { while (! feof(fp)) {
buf[0] = 0; buf = NULL;
if (fgets(buf, sizeof(buf), fp)) if (getline(&buf, &size, fp) != -1) {
sscanf(buf, "PPid: %d", &temp_pid); sscanf(buf, "PPid: %d", &temp_pid);
else free(buf);
} else {
free(buf);
break; break;
} }
}
fclose(fp); fclose(fp);
if (temp_pid == -1) { if (temp_pid == -1) {
syslog(LOG_ERR, "Unable to read pid from /proc/%d/status", pid); syslog(LOG_ERR, "Unable to read pid from /proc/%d/status", pid);
@ -135,7 +140,7 @@ static int signal_processes(int sig, RC_STRINGLIST *omits, bool dryrun)
sigset_t oldsigs; sigset_t oldsigs;
DIR *dir; DIR *dir;
struct dirent *d; struct dirent *d;
char buf[PATH_MAX+1]; char *buf = NULL;
pid_t pid; pid_t pid;
int sendcount = 0; int sendcount = 0;
@ -170,7 +175,11 @@ static int signal_processes(int sig, RC_STRINGLIST *omits, bool dryrun)
continue; continue;
/* Is this a process we have been requested to omit? */ /* Is this a process we have been requested to omit? */
sprintf(buf, "%d", pid); if (buf) {
free(buf);
buf = NULL;
}
xasprintf(&buf, "%d", pid);
if (rc_stringlist_find(omits, buf)) if (rc_stringlist_find(omits, buf))
continue; continue;