modernize backfire 10.03 so it can be operational again
[openwrt-10.03/.git] / package / mtd / src / fis.c
index 559ca95069a510cd6f76e66ca0d5cfafe3cb4a6f..f825f590c96a50141849d24c63b9d652ab146808 100644 (file)
@@ -143,6 +143,8 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new)
        struct fis_image_desc *redboot = NULL;
        struct fis_image_desc *first = NULL;
        struct fis_image_desc *last = NULL;
+       struct fis_image_desc *first_fb = NULL;
+       struct fis_image_desc *last_fb = NULL;
        struct fis_image_desc *desc;
        struct fis_part *part;
        uint32_t offset = 0, size = 0;
@@ -184,13 +186,21 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new)
        }
        desc--;
 
+       first_fb = first;
+       last_fb = last;
+
+       if (first_fb->hdr.flash_base > last_fb->hdr.flash_base) {
+               first_fb = last;
+               last_fb = first;
+       }
+
        /* determine size of available space */
        desc = (struct fis_image_desc *) start;
        while ((char *) desc < end) {
                if (!desc->hdr.name[0] || (desc->hdr.name[0] == 0xff))
                        break;
 
-               if (desc->hdr.flash_base > last->hdr.flash_base &&
+               if (desc->hdr.flash_base > last_fb->hdr.flash_base &&
                    desc->hdr.flash_base < offset)
                        offset = desc->hdr.flash_base;
 
@@ -198,7 +208,7 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new)
        }
        desc--;
 
-       size = offset - first->hdr.flash_base;
+       size = offset - first_fb->hdr.flash_base;
 
 #ifdef notyet
        desc = first - 1;
@@ -214,7 +224,7 @@ fis_remap(struct fis_part *old, int n_old, struct fis_part *new, int n_new)
 
        last++;
        desc = first + n_new;
-       offset = first->hdr.flash_base;
+       offset = first_fb->hdr.flash_base;
 
        if (desc != last) {
                if (desc > last)