mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-26 00:59:55 +00:00
2005-08-20 Yoshinori K. Okuji <okuji@enbug.org>
* partmap/pc.c (pc_partition_map_iterate): Include the value of an
invalid magic in thre error.
* commands/search.c: New file.
* util/grub-emu.c (main): Call grub_search_init and
grub_search_fini.
* kern/rescue.c (grub_rescue_print_disks): Removed.
(grub_rescue_print_devices): New function.
(grub_rescue_cmd_ls): Use grub_device_iterate with
grub_rescue_print_devices instead of grub_disk_dev_iterate with
grub_rescue_print_disks.
* kern/partition.c (grub_partition_iterate): Return the result of
PARTMAP->ITERATE instead of GRUB_ERRNO.
* kern/device.c: Include grub/partition.h.
(grub_device_iterate): New function.
* include/grub/partition.h (grub_partition_iterate): Return int
instead of grub_err_t.
* include/grub/normal.h [GRUB_UTIL] (grub_search_init): New
prototype.
[GRUB_UTIL] (grub_search_fini): Likewise.
* include/grub/device.h (grub_device_iterate): New prototype.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Added
commands/search.c.
(pkgdata_MODULES): Added search.mod.
(search_mod_SOURCES): New variable.
(search_mod_CFLAGS): Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Added commands/search.c.
(pkgdata_MODULES): Added search.mod.
(search_mod_SOURCES): New variable.
(search_mod_CFLAGS): Likewise.
* commands/ls.c (grub_ls_list_disks): Renamed to ...
(grub_ls_list_devices): ... this, and use grub_device_iterate.
All callers changed.
* DISTLIST: Added commands/search.c.
This commit is contained in:
1 parent
ef0954341c
commit
6a85ce7953
17 files changed
+466
-104
No files matched your search
@@ -25,6 +25,7 @@
|
||||
#include <grub/mm.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/env.h>
|
||||
#include <grub/partition.h>
|
||||
|
||||
grub_device_t
|
||||
grub_device_open (const char *name)
|
||||
@@ -78,3 +79,62 @@ grub_device_close (grub_device_t device)
|
||||
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
int
|
||||
grub_device_iterate (int (*hook) (const char *name))
|
||||
{
|
||||
auto int iterate_disk (const char *disk_name);
|
||||
auto int iterate_partition (grub_disk_t disk,
|
||||
const grub_partition_t partition);
|
||||
|
||||
int iterate_disk (const char *disk_name)
|
||||
{
|
||||
grub_device_t dev;
|
||||
|
||||
if (hook (disk_name))
|
||||
return 1;
|
||||
|
||||
dev = grub_device_open (disk_name);
|
||||
if (! dev)
|
||||
return 1;
|
||||
|
||||
if (dev->disk && dev->disk->has_partitions)
|
||||
if (grub_partition_iterate (dev->disk, iterate_partition))
|
||||
{
|
||||
grub_device_close (dev);
|
||||
return 1;
|
||||
}
|
||||
|
||||
grub_device_close (dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int iterate_partition (grub_disk_t disk, const grub_partition_t partition)
|
||||
{
|
||||
char *partition_name;
|
||||
char *device_name;
|
||||
int ret;
|
||||
|
||||
partition_name = grub_partition_get_name (partition);
|
||||
if (! partition_name)
|
||||
return 1;
|
||||
|
||||
device_name = grub_malloc (grub_strlen (disk->name) + 1
|
||||
+ grub_strlen (partition_name) + 1);
|
||||
if (! device_name)
|
||||
{
|
||||
grub_free (partition_name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
grub_sprintf (device_name, "%s,%s", disk->name, partition_name);
|
||||
grub_free (partition_name);
|
||||
|
||||
ret = hook (device_name);
|
||||
grub_free (device_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Only disk devices are supported at the moment. */
|
||||
return grub_disk_dev_iterate (iterate_disk);
|
||||
}
|
||||
+5
-4
@@ -83,13 +83,14 @@ grub_partition_probe (struct grub_disk *disk, const char *str)
|
||||
return part;
|
||||
}
|
||||
|
||||
grub_err_t
|
||||
int
|
||||
grub_partition_iterate (struct grub_disk *disk,
|
||||
int (*hook) (grub_disk_t disk,
|
||||
const grub_partition_t partition))
|
||||
{
|
||||
grub_partition_map_t partmap = 0;
|
||||
|
||||
int ret = 0;
|
||||
|
||||
auto int part_map_iterate (const grub_partition_map_t p);
|
||||
auto int part_map_iterate_hook (grub_disk_t d,
|
||||
const grub_partition_t partition);
|
||||
@@ -117,9 +118,9 @@ grub_partition_iterate (struct grub_disk *disk,
|
||||
|
||||
grub_partition_map_iterate (part_map_iterate);
|
||||
if (partmap)
|
||||
partmap->iterate (disk, hook);
|
||||
ret = partmap->iterate (disk, hook);
|
||||
|
||||
return grub_errno;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char *
|
||||
|
||||
+3
-34
@@ -168,40 +168,9 @@ grub_rescue_cmd_cat (int argc, char *argv[])
|
||||
}
|
||||
|
||||
static int
|
||||
grub_rescue_print_disks (const char *name)
|
||||
grub_rescue_print_devices (const char *name)
|
||||
{
|
||||
grub_device_t dev;
|
||||
auto int print_partition (grub_disk_t disk, const grub_partition_t p);
|
||||
|
||||
int print_partition (grub_disk_t disk __attribute__ ((unused)),
|
||||
const grub_partition_t p)
|
||||
{
|
||||
char *pname = grub_partition_get_name (p);
|
||||
|
||||
if (pname)
|
||||
{
|
||||
grub_printf ("(%s,%s) ", name, pname);
|
||||
grub_free (pname);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
dev = grub_device_open (name);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
if (dev)
|
||||
{
|
||||
grub_printf ("(%s) ", name);
|
||||
|
||||
if (dev->disk && dev->disk->has_partitions)
|
||||
{
|
||||
grub_partition_iterate (dev->disk, print_partition);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
}
|
||||
|
||||
grub_device_close (dev);
|
||||
}
|
||||
grub_printf ("(%s) ", name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -220,7 +189,7 @@ grub_rescue_cmd_ls (int argc, char *argv[])
|
||||
{
|
||||
if (argc < 1)
|
||||
{
|
||||
grub_disk_dev_iterate (grub_rescue_print_disks);
|
||||
grub_device_iterate (grub_rescue_print_devices);
|
||||
grub_putchar ('\n');
|
||||
grub_refresh ();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user