2006-03-09 Alexandre Oliva * lib/builtins.c (install_blocklist_helper): Move static last_lenght... (install_func_context): ... here. (install_func): Reset it. Index: grub-0.97/stage2/builtins.c =================================================================== --- grub-0.97.orig/stage2/builtins.c 2006-03-09 10:26:41.000000000 -0300 +++ grub-0.97/stage2/builtins.c 2006-03-09 11:36:18.000000000 -0300 @@ -1926,11 +1926,13 @@ static struct { int saved_sector; int installaddr; int installlist; + int last_length; char *stage2_first_buffer; } install_func_context = { .saved_sector = 0, .installaddr = 0, .installlist = 0, + .last_length = SECTOR_SIZE, .stage2_first_buffer = NULL, }; @@ -1960,19 +1962,19 @@ install_blocklist_helper (int sector, in int *installlist = &install_func_context.installlist; char **stage2_first_buffer = &install_func_context.stage2_first_buffer; /* Was the last sector full? */ - static int last_length = SECTOR_SIZE; + int *last_length = &install_func_context.last_length; if (debug) printf("[%d]", sector); - if (offset != 0 || last_length != SECTOR_SIZE) + if (offset != 0 || *last_length != SECTOR_SIZE) { /* We found a non-sector-aligned data block. */ errnum = ERR_UNALIGNED; return; } - last_length = length; + *last_length = length; if (*((unsigned long *) (*installlist - 4)) + *((unsigned short *) *installlist) != sector @@ -2027,7 +2029,11 @@ install_func (char *arg, int flags) int is_open = 0; /* If LBA is forced? */ int is_force_lba = 0; + int *last_length = &install_func_context.last_length; + /* Reset state. */ + *last_length = SECTOR_SIZE; + *stage2_first_buffer = old_sect + SECTOR_SIZE; #ifdef GRUB_UTIL /* If the Stage 2 is in a partition mounted by an OS, this will store