From b60ce48914d78cd827c88f29c863e3527ecff1f2 Mon Sep 17 00:00:00 2001 From: Simon Sigurdhsson Date: Wed, 4 Jul 2012 16:28:32 +0200 Subject: Fixed errors, OSX build now passes all tests. --- src/process_iterator_apple.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/process_iterator_apple.c b/src/process_iterator_apple.c index 98af1aa..b6cd468 100644 --- a/src/process_iterator_apple.c +++ b/src/process_iterator_apple.c @@ -23,6 +23,31 @@ #include #include +int unique_nonzero_ints(int* arr_in, int len_in, int* arr_out) { + int* source = arr_in; + if (arr_out == NULL) return -1; + if (arr_in == arr_out) { + source = malloc(sizeof(int)*len_in); + memcpy(source, arr_in, sizeof(int)*len_in); + memset(arr_out, -1, sizeof(int)*len_in); + } + int len_out = 0; + for (int i=0; ii = 0; /* Find out how much to allocate for it->pidlist */ @@ -38,6 +63,7 @@ int init_process_iterator(struct process_iterator *it, struct process_filter *fi fprintf(stderr, "proc_listpids: %s\n", strerror(errno)); return -1; } + it->count = unique_nonzero_ints(it->pidlist, it->count, it->pidlist); it->filter = filter; return 0; } @@ -81,7 +107,10 @@ int get_next_process(struct process_iterator *it, struct process *p) { } while (it->i < it->count) { struct proc_taskallinfo ti; - get_process_pti(it->pidlist[it->i], &ti); + if (get_process_pti(it->pidlist[it->i], &ti) != 0) { + it->i++; + continue; + } if (ti.pbsd.pbi_flags & PROC_FLAG_SYSTEM) { it->i++; continue; @@ -89,6 +118,8 @@ int get_next_process(struct process_iterator *it, struct process *p) { if (it->filter->pid != 0 && it->filter->include_children) { pti2proc(&ti, p); it->i++; + if (p->pid != it->pidlist[it->i - 1]) // I don't know why this can happen + continue; if (p->pid != it->filter->pid && p->ppid != it->filter->pid) continue; return 0; -- cgit v1.2.3