All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hollis Blanchard <hollis@penguinppc.org>
To: grub-devel@gnu.org
Subject: Re: iterate return values
Date: Fri, 4 Feb 2005 00:11:15 -0600	[thread overview]
Message-ID: <20050204061115.GA20463@miracle> (raw)

This one took waaay too long to track down. :( It is very difficult to
debug when the problem is that grub_errno has a stale value.

This fixes my partition map problems, and has been tested both with
Apple and DOS partition maps.

-Hollis

Index: ChangeLog
===================================================================
RCS file: /cvsroot/grub/grub2/ChangeLog,v
retrieving revision 1.90
diff -u -p -r1.90 ChangeLog
--- ChangeLog	1 Feb 2005 21:53:34 -0000	1.90
+++ ChangeLog	4 Feb 2005 06:34:08 -0000
@@ -1,3 +1,13 @@
+2005-02-03  Hollis Blanchard  <hollis@penguinppc.org>
+
+	* kern/partition.c (grub_partition_probe): Clear `grub_errno' and
+	return 0 if `grub_errno' is GRUB_ERR_BAD_PART_TABLE. 
+	(part_map_iterate): Clear `grub_errno' and return 0 if
+	`partmap->iterate' returns GRUB_ERR_BAD_PART_TABLE. 
+	* partmap/amiga.c (amiga_partition_map_iterate): Return
+	GRUB_ERR_BAD_PART_TABLE if no partition map magic is found.
+	* partmap/apple.c (apple_partition_map_iterate): Likewise.
+
 2005-02-01  Guillem Jover  <guillem@hadrons.org>
 
 	* loader/i386/pc/multiboot_normal.c (GRUB_MOD_INIT): Fix module
Index: kern/partition.c
===================================================================
RCS file: /cvsroot/grub/grub2/kern/partition.c,v
retrieving revision 1.1
diff -u -p -r1.1 partition.c
--- kern/partition.c	4 Dec 2004 18:45:45 -0000	1.1
+++ kern/partition.c	4 Feb 2005 06:34:11 -0000
@@ -56,20 +56,28 @@ grub_partition_t
 grub_partition_probe (struct grub_disk *disk, const char *str)
 {
   grub_partition_t part;
-  
+
   auto int part_map_probe (const grub_partition_map_t partmap);
-  
+
   int part_map_probe (const grub_partition_map_t partmap)
     {
       part = partmap->probe (disk, str);
       if (part)
 	return 1;
-      return 0;
+
+      if (grub_errno == GRUB_ERR_BAD_PART_TABLE)
+	{
+	  /* Continue to next partition map type.  */
+	  grub_errno = GRUB_ERR_NONE;
+	  return 0;
+	}
+
+      return 1;
     }
 
   /* Use the first partition map type found.  */
   grub_partition_map_iterate (part_map_probe);
-  
+
   return part;
 }
 
@@ -78,12 +86,21 @@ grub_partition_iterate (struct grub_disk
 			int (*hook) (const grub_partition_t partition))
 {
   auto int part_map_iterate (const grub_partition_map_t partmap);
-  
+
   int part_map_iterate (const grub_partition_map_t partmap)
     {
-      return partmap->iterate (disk, hook);
+      grub_err_t err = partmap->iterate (disk, hook);
+
+      if (err == GRUB_ERR_BAD_PART_TABLE)
+	{
+	  /* Continue to next partition map type.  */
+	  grub_errno = GRUB_ERR_NONE;
+	  return 0;
+	}
+
+      return 1;
     }
-  
+
   grub_partition_map_iterate (part_map_iterate);
   return grub_errno;
 }
Index: partmap/amiga.c
===================================================================
RCS file: /cvsroot/grub/grub2/partmap/amiga.c,v
retrieving revision 1.1
diff -u -p -r1.1 amiga.c
--- partmap/amiga.c	4 Dec 2004 18:45:45 -0000	1.1
+++ partmap/amiga.c	4 Feb 2005 06:34:11 -0000
@@ -102,6 +102,10 @@ amiga_partition_map_iterate (grub_disk_t
 	  break;
 	}
     }
+
+  if (next == -1)
+    return grub_error (GRUB_ERR_BAD_PART_TABLE,
+		       "Amiga partition map not found.");
   
   /* The end of the partition list is marked using "-1".  */
   while (next != -1)
Index: partmap/apple.c
===================================================================
RCS file: /cvsroot/grub/grub2/partmap/apple.c,v
retrieving revision 1.1
diff -u -p -r1.1 apple.c
--- partmap/apple.c	4 Dec 2004 18:45:45 -0000	1.1
+++ partmap/apple.c	4 Feb 2005 06:34:11 -0000
@@ -108,7 +108,7 @@ apple_partition_map_iterate (grub_disk_t
   raw.partition = 0;
 
   part.partmap = &grub_apple_partition_map;
-  
+
   for (;;)
     {
       if (grub_disk_read (&raw, pos / GRUB_DISK_SECTOR_SIZE,
@@ -134,6 +134,10 @@ apple_partition_map_iterate (grub_disk_t
       partno++;
     }
 
+  if ((pos / GRUB_DISK_SECTOR_SIZE) == 0)
+    return grub_error (GRUB_ERR_BAD_PART_TABLE,
+		       "Apple partition map not found.");
+
   return 0;
 }
 
@@ -178,7 +182,6 @@ apple_partition_map_probe (grub_disk_t d
  fail:
   grub_free (p);
   return 0;
-
 }
 
 



             reply	other threads:[~2005-02-04  6:57 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-04  6:11 Hollis Blanchard [this message]
2005-02-04  8:55 ` iterate return values Yoshinori K. Okuji
2005-02-04 20:04 ` Marco Gerards
2005-02-04 20:43   ` Yoshinori K. Okuji
2005-02-04 21:21     ` Marco Gerards
2005-02-04 22:24       ` Yoshinori K. Okuji
  -- strict thread matches above, loose matches on Subject: below --
2005-01-23 18:23 Hollis Blanchard
2005-01-23 19:19 ` Yoshinori K. Okuji
2005-01-23 19:53   ` Hollis Blanchard
2005-01-23 20:18     ` Marco Gerards
2005-01-23 20:26     ` Yoshinori K. Okuji
2005-01-22  6:57 Hollis Blanchard
2005-01-22 11:26 ` Yoshinori K. Okuji
2005-01-22 13:01 ` Marco Gerards

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20050204061115.GA20463@miracle \
    --to=hollis@penguinppc.org \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.