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

Reply via email to