diff --git a/commands/loadenv.c b/commands/loadenv.c
index 51cffd3..15dc49a 100644
--- a/commands/loadenv.c
+++ b/commands/loadenv.c
@@ -240,7 +240,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
   part_start = grub_partition_get_start (disk->partition);
 
   buf = grub_envblk_buffer (envblk);
-  for (p = blocklists, index = 0; p; p = p->next, index += p->length)
+  for (p = blocklists, index = 0; p;)
     {
       char blockbuf[GRUB_DISK_SECTOR_SIZE];
 
@@ -253,6 +253,10 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
           grub_error (GRUB_ERR_FILE_READ_ERROR, "invalid blocklist");
           return 0;
         }
+
+      p = p->next;
+      if (p)
+	index += p->length;
     }
 
   return 1;
@@ -273,11 +277,15 @@ write_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
   part_start = grub_partition_get_start (disk->partition);
 
   index = 0;
-  for (p = blocklists; p; p = p->next, index += p->length)
+  for (p = blocklists; p;)
     {
       if (grub_disk_write (disk, p->sector - part_start,
                            p->offset, p->length, buf + index))
         return 0;
+
+      p = p->next;
+      if (p)
+	index += p->length;
     }
 
   return 1;
