kexec-tools: add nr_matched argument to kexec_iomem_for_each_line() This patch passes the number of matched lines using a pointer argument instead of using the return value as suggested by Vivek.
Signed-off-by: Magnus Damm <[EMAIL PROTECTED]> --- kexec/crashdump-xen.c | 8 +++++--- kexec/kexec-iomem.c | 33 +++++++++++++++++---------------- kexec/kexec.h | 3 ++- 3 files changed, 24 insertions(+), 20 deletions(-) --- 0001/kexec/crashdump-xen.c +++ work/kexec/crashdump-xen.c 2006-11-27 15:29:09.000000000 +0900 @@ -48,20 +48,22 @@ int xen_get_nr_phys_cpus(void) if (xen_phys_cpus) return xen_phys_cpus; - if ((cpus = kexec_iomem_for_each_line(match, NULL, NULL))) { + if (kexec_iomem_for_each_line(match, NULL, NULL, &cpus) == 0) { n = sizeof(struct crash_note_info) * cpus; + xen_phys_cpus = cpus; xen_phys_notes = malloc(n); if (xen_phys_notes) { memset(xen_phys_notes, 0, n); kexec_iomem_for_each_line(match, xen_crash_note_callback, + NULL, NULL); } - xen_phys_cpus = cpus; + return xen_phys_cpus; } - return cpus; + return -1; } int xen_get_note(int cpu, uint64_t *addr, uint64_t *len) --- 0001/kexec/kexec-iomem.c +++ work/kexec/kexec-iomem.c 2006-11-27 15:30:29.000000000 +0900 @@ -17,7 +17,6 @@ * * Iterate over each line in /proc/iomem. If match is NULL or if the line * matches with our match-pattern then call the callback if non-NULL. - * Return the number of lines matched. */ int kexec_iomem_for_each_line(char *match, @@ -26,7 +25,8 @@ int kexec_iomem_for_each_line(char *matc char *str, unsigned long base, unsigned long length), - void *data) + void *data, + int *nr_matched) { const char iomem[]= "/proc/iomem"; char line[MAX_LINE]; @@ -58,7 +58,10 @@ int kexec_iomem_for_each_line(char *matc fclose(fp); - return nr; + if (nr_matched) + *nr_matched = nr; + + return 0; } static int kexec_iomem_single_callback(void *data, int nr, @@ -79,23 +82,21 @@ static int kexec_iomem_single_callback(v int parse_iomem_single(char *str, uint64_t *start, uint64_t *end) { struct memory_range range; - int ret; + int nr; memset(&range, 0, sizeof(range)); - ret = kexec_iomem_for_each_line(str, kexec_iomem_single_callback, - &range); + if (kexec_iomem_for_each_line(str, kexec_iomem_single_callback, + &range, &nr) == 0) { + if (nr == 1) { + if (start) + *start = range.start; + if (end) + *end = range.end; - if (ret == 1) { - if (start) - *start = range.start; - if (end) - *end = range.end; - - ret = 0; + return 0; + } } - else - ret = -1; - return ret; + return -1; } --- 0001/kexec/kexec.h +++ work/kexec/kexec.h 2006-11-27 15:24:35.000000000 +0900 @@ -207,7 +207,8 @@ int kexec_iomem_for_each_line(char *matc char *str, unsigned long base, unsigned long length), - void *data); + void *data, + int *nr_matched); int parse_iomem_single(char *str, uint64_t *start, uint64_t *end); _______________________________________________ fastboot mailing list fastboot@lists.osdl.org https://lists.osdl.org/mailman/listinfo/fastboot