[2137] * disk/ieee1275/nand.c (grub_nand_iterate): Return

"David S. Miller" <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
Revision: 2137
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2137
Author:   davem
Date:     2009-04-24 12:05:54 +0000 (Fri, 24 Apr 2009)
Log Message:
-----------
	* disk/ieee1275/nand.c (grub_nand_iterate): Return
	grub_devalias_iterate() result instead of unconditional 0.
	* disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Likewise.
	Also, capture hook return value, either directly or via
	grub_children_iterate(), and propagate to caller.
	* include/grub/ieee1275/ieee1275.h (grub_devalias_iterate,
	grub_children_iterate): Return value is now 'int' instead of
	'grub_err_t'.
	* kern/ieee1275/openfw.c (grub_children_iterate): Fix to behave
	like a proper iterator, stopping when hooks return non-zero.
	(grub_devalias_iterate): Likewise.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/disk/ieee1275/nand.c
    trunk/grub2/disk/ieee1275/ofdisk.c
    trunk/grub2/include/grub/ieee1275/ieee1275.h
    trunk/grub2/kern/ieee1275/openfw.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog	2009-04-24 12:05:14 UTC (rev 2136)
+++ trunk/grub2/ChangeLog	2009-04-24 12:05:54 UTC (rev 2137)
@@ -9,6 +9,18 @@
 	* disk/fs_uuid.c (grub_fs_uuid_close): Call grub_disk_close()
 	on disk->data.
 
+	* disk/ieee1275/nand.c (grub_nand_iterate): Return
+	grub_devalias_iterate() result instead of unconditional 0.
+	* disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Likewise.
+	Also, capture hook return value, either directly or via
+	grub_children_iterate(), and propagate to caller.
+	* include/grub/ieee1275/ieee1275.h (grub_devalias_iterate,
+	grub_children_iterate): Return value is now 'int' instead of
+	'grub_err_t'.
+	* kern/ieee1275/openfw.c (grub_children_iterate): Fix to behave
+	like a proper iterator, stopping when hooks return non-zero.
+	(grub_devalias_iterate): Likewise.
+
 2009-04-23  David S. Miller  <[email protected]>
 
 	* kern/sparc64/ieee1275/openfw.c: Unused, delete.

Modified: trunk/grub2/disk/ieee1275/nand.c
===================================================================
--- trunk/grub2/disk/ieee1275/nand.c	2009-04-24 12:05:14 UTC (rev 2136)
+++ trunk/grub2/disk/ieee1275/nand.c	2009-04-24 12:05:54 UTC (rev 2137)
@@ -44,8 +44,7 @@
       return 0;
     }
 
-  grub_devalias_iterate (dev_iterate);
-  return 0;
+  return grub_devalias_iterate (dev_iterate);
 }
 
 static grub_err_t

Modified: trunk/grub2/disk/ieee1275/ofdisk.c
===================================================================
--- trunk/grub2/disk/ieee1275/ofdisk.c	2009-04-24 12:05:14 UTC (rev 2136)
+++ trunk/grub2/disk/ieee1275/ofdisk.c	2009-04-24 12:05:54 UTC (rev 2137)
@@ -77,6 +77,8 @@
 
   int dev_iterate (struct grub_ieee1275_devalias *alias)
     {
+      int ret = 0;
+
       grub_dprintf ("disk", "disk name = %s\n", alias->name);
 
       if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_OFDISK_SDCARD_ONLY))
@@ -105,17 +107,16 @@
 	}
 
       if (! grub_strcmp (alias->type, "block"))
-	hook (alias->name);
+	ret = hook (alias->name);
       else if ((! grub_strcmp (alias->type, "scsi"))
 	       || (! grub_strcmp (alias->type, "ide"))
 	       || (! grub_strcmp (alias->type, "ata")))
 	/* Search for block-type children of these bus controllers.  */
-	grub_children_iterate (alias->name, dev_iterate);
-      return 0;
+	ret = grub_children_iterate (alias->name, dev_iterate);
+      return ret;
     }
 
-  grub_devalias_iterate (dev_iterate);
-  return 0;
+  return grub_devalias_iterate (dev_iterate);
 }
 
 static grub_err_t

Modified: trunk/grub2/include/grub/ieee1275/ieee1275.h
===================================================================
--- trunk/grub2/include/grub/ieee1275/ieee1275.h	2009-04-24 12:05:14 UTC (rev 2136)
+++ trunk/grub2/include/grub/ieee1275/ieee1275.h	2009-04-24 12:05:54 UTC (rev 2137)
@@ -166,9 +166,9 @@
 int EXPORT_FUNC(grub_ieee1275_milliseconds) (grub_uint32_t *msecs);
 
 
-grub_err_t EXPORT_FUNC(grub_devalias_iterate)
+int EXPORT_FUNC(grub_devalias_iterate)
      (int (*hook) (struct grub_ieee1275_devalias *alias));
-grub_err_t EXPORT_FUNC(grub_children_iterate) (char *devpath,
+int EXPORT_FUNC(grub_children_iterate) (char *devpath,
      int (*hook) (struct grub_ieee1275_devalias *alias));
 grub_err_t EXPORT_FUNC(grub_machine_mmap_iterate)
      (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t, grub_uint32_t));

Modified: trunk/grub2/kern/ieee1275/openfw.c
===================================================================
--- trunk/grub2/kern/ieee1275/openfw.c	2009-04-24 12:05:14 UTC (rev 2136)
+++ trunk/grub2/kern/ieee1275/openfw.c	2009-04-24 12:05:54 UTC (rev 2137)
@@ -32,36 +32,37 @@
 };
 
 /* Walk children of 'devpath', calling hook for each.  */
-grub_err_t
+int
 grub_children_iterate (char *devpath,
-		  int (*hook) (struct grub_ieee1275_devalias *alias))
+		       int (*hook) (struct grub_ieee1275_devalias *alias))
 {
   grub_ieee1275_phandle_t dev;
   grub_ieee1275_phandle_t child;
   char *childtype, *childpath;
   char *childname, *fullname;
+  int ret = 0;
 
   if (grub_ieee1275_finddevice (devpath, &dev))
-    return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Unknown device");
+    return 0;
 
   if (grub_ieee1275_child (dev, &child))
-    return grub_error (GRUB_ERR_BAD_DEVICE, "Device has no children");
+    return 0;
 
   childtype = grub_malloc (IEEE1275_MAX_PROP_LEN);
   if (!childtype)
-    return grub_errno;
+    return 0;
   childpath = grub_malloc (IEEE1275_MAX_PATH_LEN);
   if (!childpath)
     {
       grub_free (childtype);
-      return grub_errno;
+      return 0;
     }
   childname = grub_malloc (IEEE1275_MAX_PROP_LEN);
   if (!childname)
     {
       grub_free (childpath);
       grub_free (childtype);
-      return grub_errno;
+      return 0;
     }
   fullname = grub_malloc (IEEE1275_MAX_PATH_LEN);
   if (!fullname)
@@ -69,7 +70,7 @@
       grub_free (childname);
       grub_free (childpath);
       grub_free (childtype);
-      return grub_errno;
+      return 0;
     }
 
   do
@@ -94,7 +95,9 @@
       alias.type = childtype;
       alias.path = childpath;
       alias.name = fullname;
-      hook (&alias);
+      ret = hook (&alias);
+      if (ret)
+	break;
     }
   while (grub_ieee1275_peer (child, &child));
 
@@ -103,30 +106,31 @@
   grub_free (childpath);
   grub_free (childtype);
 
-  return 0;
+  return ret;
 }
 
 /* Iterate through all device aliases.  This function can be used to
    find a device of a specific type.  */
-grub_err_t
+int
 grub_devalias_iterate (int (*hook) (struct grub_ieee1275_devalias *alias))
 {
   grub_ieee1275_phandle_t aliases;
   char *aliasname, *devtype;
   grub_ssize_t actual;
   struct grub_ieee1275_devalias alias;
+  int ret = 0;
 
   if (grub_ieee1275_finddevice ("/aliases", &aliases))
-    return -1;
+    return 0;
 
   aliasname = grub_malloc (IEEE1275_MAX_PROP_LEN);
   if (!aliasname)
-    return grub_errno;
+    return 0;
   devtype = grub_malloc (IEEE1275_MAX_PROP_LEN);
   if (!devtype)
     {
       grub_free (aliasname);
-      return grub_errno;
+      return 0;
     }
 
   /* Find the first property.  */
@@ -155,7 +159,7 @@
 	{
 	  grub_free (devtype);
 	  grub_free (aliasname);
-	  return grub_errno;
+	  return 0;
 	}
 
       if (grub_ieee1275_get_property (aliases, aliasname, devpath, pathlen,
@@ -182,15 +186,17 @@
       alias.name = aliasname;
       alias.path = devpath;
       alias.type = devtype;
-      hook (&alias);
+      ret = hook (&alias);
 
 nextprop:
       grub_free (devpath);
+      if (ret)
+	break;
     }
 
   grub_free (devtype);
   grub_free (aliasname);
-  return 0;
+  return ret;
 }
 
 /* Call the "map" method of /chosen/mmu.  */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.