--- /dev/null
+2006-03-09 Alexandre Oliva <oliva@gnu.org>
+
+ * 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