Hello, all

Please look at 'grub-1.95/kern/i386/pc/init.c'.

-begin----------------------------------
  /* Merge overlaps.  */
  for (i = 0; i < num_regions - 1; i++)
    if (mem_regions[i].addr + mem_regions[i].size >= mem_regions[i +
1].addr)
      {
        j = i + 1;
        
        if (mem_regions[i].addr + mem_regions[i].size
            < mem_regions[j].addr + mem_regions[j].size)
          mem_regions[i].size = (mem_regions[j].addr + mem_regions[j].size
                                 - mem_regions[i].addr);

        grub_memmove (mem_regions + j, mem_regions + j + 1,
                      (num_regions - j - 1) * sizeof (struct mem_region));
        i--;
      }
-end------------------------------------

This cord merges overlapped memory regions.
However, the number of regions do not decrease though I merged it.

I write below a more right code.

-begin----------------------------------
  /* Merge overlaps.  */
  for (i = 0; i < num_regions - 1; i++)
    if (mem_regions[i].addr + mem_regions[i].size >= mem_regions[i +
1].addr)
      {
        j = i + 1;
        
        if (mem_regions[i].addr + mem_regions[i].size
            < mem_regions[j].addr + mem_regions[j].size)
          mem_regions[i].size = (mem_regions[j].addr + mem_regions[j].size
                                 - mem_regions[i].addr);

        grub_memmove (mem_regions + j, mem_regions + j + 1,
                      (num_regions - j - 1) * sizeof (struct mem_region));
        i--;
        num_regions--;
      }
-end------------------------------------


-- 
 Hitoshi Ozeki [EMAIL PROTECTED]




_______________________________________________
Grub-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to