2008-02-28 Fabian Greffrath <greffrath@leat.rub.de>
* include/grub/util/getroot.h (grub_util_check_block_device): Export new function. * util/getroot.c (grub_util_check_block_device): New function that returns the given argument if it is a block device and returns NULL else. * util/grub-probe.c (argument_is_device): New variable. (probe): Promote device_name from a variable to an argument. Receive device_name from grub_util_check_block_device() if path is NULL and from grub_guess_root_device() else. Do not free() device_name anymore. (options): Introduce new parameter '-d, --device'. (main): Add description of the new parameter to the help screen. Rename path variable to argument. Set argument_is_device if the '-d' option is given. Pass argument to probe() depending on argument_is_device.
This commit is contained in:
parent
0d16e571f1
commit
79ca2d78d4
4 changed files with 58 additions and 12 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
|||
2008-02-28 Fabian Greffrath <greffrath@leat.rub.de>
|
||||
|
||||
* include/grub/util/getroot.h (grub_util_check_block_device): Export new
|
||||
function.
|
||||
* util/getroot.c (grub_util_check_block_device): New function that
|
||||
returns the given argument if it is a block device and returns NULL else.
|
||||
* util/grub-probe.c (argument_is_device): New variable.
|
||||
(probe): Promote device_name from a variable to an argument. Receive
|
||||
device_name from grub_util_check_block_device() if path is NULL and from
|
||||
grub_guess_root_device() else. Do not free() device_name anymore.
|
||||
(options): Introduce new parameter '-d, --device'.
|
||||
(main): Add description of the new parameter to the help screen.
|
||||
Rename path variable to argument. Set argument_is_device if the '-d'
|
||||
option is given. Pass argument to probe() depending on
|
||||
argument_is_device.
|
||||
|
||||
2008-02-24 Bean <bean123ch@gmail.com>
|
||||
|
||||
* fs/iso9660.c (GRUB_ISO9660_VOLDESC_BOOT): New macro.
|
||||
|
|
|
@ -29,5 +29,6 @@ char *grub_guess_root_device (const char *dir);
|
|||
char *grub_get_prefix (const char *dir);
|
||||
int grub_util_get_dev_abstraction (const char *os_dev);
|
||||
char *grub_util_get_grub_dev (const char *os_dev);
|
||||
char *grub_util_check_block_device (const char *blk_dev);
|
||||
|
||||
#endif /* ! GRUB_UTIL_GETROOT_HEADER */
|
||||
|
|
|
@ -332,3 +332,17 @@ grub_util_get_grub_dev (const char *os_dev)
|
|||
|
||||
return grub_dev;
|
||||
}
|
||||
|
||||
char *
|
||||
grub_util_check_block_device (const char *blk_dev)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (stat (blk_dev, &st) < 0)
|
||||
grub_util_error ("Cannot stat `%s'", blk_dev);
|
||||
|
||||
if (S_ISBLK (st.st_mode))
|
||||
return (blk_dev);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -50,6 +50,7 @@ enum {
|
|||
};
|
||||
|
||||
int print = PRINT_FS;
|
||||
static unsigned int argument_is_device = 0;
|
||||
|
||||
void
|
||||
grub_putchar (int c)
|
||||
|
@ -100,16 +101,22 @@ probe_partmap (grub_disk_t disk)
|
|||
}
|
||||
|
||||
static void
|
||||
probe (const char *path)
|
||||
probe (const char *path, char *device_name)
|
||||
{
|
||||
char *device_name;
|
||||
char *drive_name = NULL;
|
||||
char *grub_path = NULL;
|
||||
char *filebuf_via_grub = NULL, *filebuf_via_sys = NULL;
|
||||
int abstraction_type;
|
||||
grub_device_t dev = NULL;
|
||||
|
||||
if (path == NULL)
|
||||
{
|
||||
if (! grub_util_check_block_device (device_name))
|
||||
grub_util_error ("%s is not a block device.\n", device_name);
|
||||
}
|
||||
else
|
||||
device_name = grub_guess_root_device (path);
|
||||
|
||||
if (! device_name)
|
||||
grub_util_error ("cannot find a device for %s.\n", path);
|
||||
|
||||
|
@ -220,12 +227,12 @@ probe (const char *path)
|
|||
free (grub_path);
|
||||
free (filebuf_via_grub);
|
||||
free (filebuf_via_sys);
|
||||
free (device_name);
|
||||
free (drive_name);
|
||||
}
|
||||
|
||||
static struct option options[] =
|
||||
{
|
||||
{"device", no_argument, 0, 'd'},
|
||||
{"device-map", required_argument, 0, 'm'},
|
||||
{"target", required_argument, 0, 't'},
|
||||
{"help", no_argument, 0, 'h'},
|
||||
|
@ -242,10 +249,11 @@ usage (int status)
|
|||
"Try ``grub-probe --help'' for more information.\n");
|
||||
else
|
||||
printf ("\
|
||||
Usage: grub-probe [OPTION]... PATH\n\
|
||||
Usage: grub-probe [OPTION]... [PATH|DEVICE]\n\
|
||||
\n\
|
||||
Probe device information for a given path.\n\
|
||||
Probe device information for a given path (or device, if the -d option is given).\n\
|
||||
\n\
|
||||
-d, --device given argument is a system device, not a path\n\
|
||||
-m, --device-map=FILE use FILE as the device map [default=%s]\n\
|
||||
-t, --target=(fs|drive|device|partmap|abstraction)\n\
|
||||
print filesystem module, GRUB drive, system device, partition map module or abstraction module [default=fs]\n\
|
||||
|
@ -264,20 +272,24 @@ int
|
|||
main (int argc, char *argv[])
|
||||
{
|
||||
char *dev_map = 0;
|
||||
char *path;
|
||||
char *argument;
|
||||
|
||||
progname = "grub-probe";
|
||||
|
||||
/* Check for options. */
|
||||
while (1)
|
||||
{
|
||||
int c = getopt_long (argc, argv, "m:t:hVv", options, 0);
|
||||
int c = getopt_long (argc, argv, "dm:t:hVv", options, 0);
|
||||
|
||||
if (c == -1)
|
||||
break;
|
||||
else
|
||||
switch (c)
|
||||
{
|
||||
case 'd':
|
||||
argument_is_device = 1;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
if (dev_map)
|
||||
free (dev_map);
|
||||
|
@ -321,10 +333,10 @@ main (int argc, char *argv[])
|
|||
if (verbosity > 1)
|
||||
grub_env_set ("debug", "all");
|
||||
|
||||
/* Obtain PATH. */
|
||||
/* Obtain ARGUMENT. */
|
||||
if (optind >= argc)
|
||||
{
|
||||
fprintf (stderr, "No path is specified.\n");
|
||||
fprintf (stderr, "No path or device is specified.\n");
|
||||
usage (1);
|
||||
}
|
||||
|
||||
|
@ -334,7 +346,7 @@ main (int argc, char *argv[])
|
|||
usage (1);
|
||||
}
|
||||
|
||||
path = argv[optind];
|
||||
argument = argv[optind];
|
||||
|
||||
/* Initialize the emulated biosdisk driver. */
|
||||
grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
|
||||
|
@ -343,7 +355,10 @@ main (int argc, char *argv[])
|
|||
grub_init_all ();
|
||||
|
||||
/* Do it. */
|
||||
probe (path);
|
||||
if (argument_is_device)
|
||||
probe (NULL, argument);
|
||||
else
|
||||
probe (argument, NULL);
|
||||
|
||||
/* Free resources. */
|
||||
grub_fini_all ();
|
||||
|
|
Loading…
Reference in a new issue