diff options
Diffstat (limited to 'src/process_iterator_freebsd.c')
-rw-r--r-- | src/process_iterator_freebsd.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/process_iterator_freebsd.c b/src/process_iterator_freebsd.c index a4bf38f..a638112 100644 --- a/src/process_iterator_freebsd.c +++ b/src/process_iterator_freebsd.c @@ -35,24 +35,23 @@ int init_process_iterator(struct process_iterator *it, struct process_filter *fi /* Get the list of processes. */ if ((it->procs = kvm_getprocs(it->kd, KERN_PROC_PROC, 0, &it->count)) == NULL) { kvm_close(it->kd); - fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(it->kd)); +// fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(it->kd)); return -1; } it->filter = filter; return 0; } -static void kproc2proc(kvm_t *kd, struct kinfo_proc *kproc, struct process *proc) +static int kproc2proc(kvm_t *kd, struct kinfo_proc *kproc, struct process *proc) { proc->pid = kproc->ki_pid; proc->ppid = kproc->ki_ppid; proc->cputime = kproc->ki_runtime / 1000; proc->starttime = kproc->ki_start.tv_sec; char **args = kvm_getargv(kd, kproc, sizeof(proc->command)); - if (args != NULL) - { - memcpy(proc->command, args[0], strlen(args[0]) + 1); - } + if (args == NULL) return -1; + memcpy(proc->command, args[0], strlen(args[0]) + 1); + return 0; } static int get_single_process(kvm_t *kd, pid_t pid, struct process *process) @@ -61,7 +60,7 @@ static int get_single_process(kvm_t *kd, pid_t pid, struct process *process) struct kinfo_proc *kproc = kvm_getprocs(kd, KERN_PROC_PID, pid, &count); if (count == 0 || kproc == NULL) { - fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(kd)); +// fprintf(stderr, "kvm_getprocs: %s\n", kvm_geterr(kd)); return -1; } kproc2proc(kd, kproc, process); @@ -73,9 +72,13 @@ int get_next_process(struct process_iterator *it, struct process *p) { { return -1; } - if (it->filter->pid > 0 && !it->filter->include_children) + if (it->filter->pid != 0 && !it->filter->include_children) { - get_single_process(it->kd, it->filter->pid, p); + if (get_single_process(it->kd, it->filter->pid, p) != 0) + { + it->i = it->count = 0; + return -1; + } it->i = it->count = 1; return 0; } @@ -88,7 +91,7 @@ int get_next_process(struct process_iterator *it, struct process *p) { it->i++; continue; } - if (it->filter->pid > 0 && it->filter->include_children) + if (it->filter->pid != 0 && it->filter->include_children) { kproc2proc(it->kd, kproc, p); it->i++; |