From 1d7438185d0ac55a49e9adb6f719ef28e5501e0d Mon Sep 17 00:00:00 2001 From: Angelo Marletta Date: Sat, 30 Jun 2012 13:38:07 +0100 Subject: new test test_process_group_wrong_pid passes on freebsd. minor fix on linux iterator --- src/process_group.c | 2 +- src/process_iterator_freebsd.c | 23 +++++++++++++---------- src/process_iterator_linux.c | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/process_group.c b/src/process_group.c index 00b8129..cb84deb 100644 --- a/src/process_group.c +++ b/src/process_group.c @@ -231,4 +231,4 @@ int remove_process(struct process_group *pgroup, int pid) if (node == NULL) return 2; delete_node(pgroup->proctable[hashkey], node); return 0; -} \ No newline at end of file +} 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++; diff --git a/src/process_iterator_linux.c b/src/process_iterator_linux.c index 3e3eea0..43c2771 100644 --- a/src/process_iterator_linux.c +++ b/src/process_iterator_linux.c @@ -141,7 +141,7 @@ int get_next_process(struct process_iterator *it, struct process *p) //end of processes return -1; } - if (it->filter->pid > 0 && !it->filter->include_children) + if (it->filter->pid != 0 && !it->filter->include_children) { int ret = read_process_info(it->filter->pid, p); //p->starttime += it->boot_time; -- cgit v1.2.3