fis: sort output of fis list
authorH Hartley Sweeten <hartleys@visionengravers.com>
Wed, 12 May 2010 18:17:59 +0000 (13:17 -0500)
committerPeter Korsgaard <jacmet@sunsite.dk>
Thu, 2 Feb 2012 11:43:49 +0000 (12:43 +0100)
This sorts the output of 'fis list' using the flash_base address
similar to the output from RedBoot.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
package/fis/fis-004-sorted_list.patch [new file with mode: 0644]

diff --git a/package/fis/fis-004-sorted_list.patch b/package/fis/fis-004-sorted_list.patch
new file mode 100644 (file)
index 0000000..6854977
--- /dev/null
@@ -0,0 +1,30 @@
+--- fis.orig/fis.c     2010-05-12 11:09:22.000000000 -0700
++++ fis/fis.c  2010-05-12 11:05:45.000000000 -0700
+@@ -401,9 +401,24 @@
+   dir_t dir;
+   load_dir(fd,offset,&size,swap_endianness,&dir);
+   fprintf(stdout,"Name              FLASH addr  Mem addr    Length      Entry point Checksum\n");
+-  FOR_EACH_DIR_ENTRY(dir,i) {
+-    dump_desc(stdout,get(i));
+-  }
++  uint32_t last_addr = 0;
++  bool image_found;
++  do {
++    uint32_t lowest_addr = 0xffffffff;
++    iter_t index;
++    image_found = false;
++    FOR_EACH_DIR_ENTRY(dir,i) {
++      const struct fis_image_desc *d = get(i);
++      if ((d->flash_base >= last_addr) && (d->flash_base < lowest_addr)) {
++        lowest_addr = d->flash_base;
++        image_found = true;
++        index = i;
++      }
++    }
++    if (image_found)
++      dump_desc(stdout,get(index));
++    last_addr = lowest_addr + 1;
++  } while (image_found == true);
+ }