[Top][All Lists]
[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. */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2137] * disk/ieee1275/nand.c (grub_nand_iterate): Return,
David S. Miller <=