Index: packages/redboot/current/ChangeLog =================================================================== RCS file: /cvs/ecos/ecos/packages/redboot/current/ChangeLog,v retrieving revision 1.228 diff -u -r1.228 ChangeLog --- packages/redboot/current/ChangeLog 27 Jun 2005 18:17:36 -0000 1.228 +++ packages/redboot/current/ChangeLog 29 Jun 2005 13:50:08 -0000 @@ -1,3 +1,8 @@ +2005-06-29 Peter Korsgaard + + * src/flash.c (find_free): Maintain sort order when splitting + chunks. + 2005-06-27 Andrew Lunn * src/net/enet.c (ntohs): Return type is a short. Index: packages/redboot/current/src/flash.c =================================================================== RCS file: /cvs/ecos/ecos/packages/redboot/current/src/flash.c,v retrieving revision 1.73 diff -u -r1.73 flash.c --- packages/redboot/current/src/flash.c 27 Jun 2005 18:17:37 -0000 1.73 +++ packages/redboot/current/src/flash.c 29 Jun 2005 13:50:08 -0000 @@ -591,8 +591,12 @@ } else { // Split chunk into two parts if ((img->flash_base+img->size) < (CYG_ADDRESS)fis_end) { - chunks[num_chunks].start = img->flash_base + img->size; - chunks[num_chunks].end = chunks[idx].end; + int j; + // make room for new chunk + for (j = num_chunks; j > (idx+1); j--) + chunks[j] = chunks[j-1]; + chunks[idx+1].start = img->flash_base + img->size; + chunks[idx+1].end = chunks[idx].end; if (++num_chunks == CYGDAT_REDBOOT_FIS_MAX_FREE_CHUNKS) { diag_printf("Warning: too many free chunks\n"); return num_chunks;