commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: David S. Miller
Subject: [2137] * disk/ieee1275/nand.c (grub_nand_iterate): Return
Date: Fri, 24 Apr 2009 12:05:55 +0000

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  <address@hidden>
 
        * 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.  */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]