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>
|
2008-02-24 Bean <bean123ch@gmail.com>
|
||||||
|
|
||||||
* fs/iso9660.c (GRUB_ISO9660_VOLDESC_BOOT): New macro.
|
* 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);
|
char *grub_get_prefix (const char *dir);
|
||||||
int grub_util_get_dev_abstraction (const char *os_dev);
|
int grub_util_get_dev_abstraction (const char *os_dev);
|
||||||
char *grub_util_get_grub_dev (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 */
|
#endif /* ! GRUB_UTIL_GETROOT_HEADER */
|
||||||
|
|
|
@ -332,3 +332,17 @@ grub_util_get_grub_dev (const char *os_dev)
|
||||||
|
|
||||||
return grub_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;
|
int print = PRINT_FS;
|
||||||
|
static unsigned int argument_is_device = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_putchar (int c)
|
grub_putchar (int c)
|
||||||
|
@ -100,16 +101,22 @@ probe_partmap (grub_disk_t disk)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
probe (const char *path)
|
probe (const char *path, char *device_name)
|
||||||
{
|
{
|
||||||
char *device_name;
|
|
||||||
char *drive_name = NULL;
|
char *drive_name = NULL;
|
||||||
char *grub_path = NULL;
|
char *grub_path = NULL;
|
||||||
char *filebuf_via_grub = NULL, *filebuf_via_sys = NULL;
|
char *filebuf_via_grub = NULL, *filebuf_via_sys = NULL;
|
||||||
int abstraction_type;
|
int abstraction_type;
|
||||||
grub_device_t dev = NULL;
|
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);
|
device_name = grub_guess_root_device (path);
|
||||||
|
|
||||||
if (! device_name)
|
if (! device_name)
|
||||||
grub_util_error ("cannot find a device for %s.\n", path);
|
grub_util_error ("cannot find a device for %s.\n", path);
|
||||||
|
|
||||||
|
@ -220,12 +227,12 @@ probe (const char *path)
|
||||||
free (grub_path);
|
free (grub_path);
|
||||||
free (filebuf_via_grub);
|
free (filebuf_via_grub);
|
||||||
free (filebuf_via_sys);
|
free (filebuf_via_sys);
|
||||||
free (device_name);
|
|
||||||
free (drive_name);
|
free (drive_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct option options[] =
|
static struct option options[] =
|
||||||
{
|
{
|
||||||
|
{"device", no_argument, 0, 'd'},
|
||||||
{"device-map", required_argument, 0, 'm'},
|
{"device-map", required_argument, 0, 'm'},
|
||||||
{"target", required_argument, 0, 't'},
|
{"target", required_argument, 0, 't'},
|
||||||
{"help", no_argument, 0, 'h'},
|
{"help", no_argument, 0, 'h'},
|
||||||
|
@ -242,10 +249,11 @@ usage (int status)
|
||||||
"Try ``grub-probe --help'' for more information.\n");
|
"Try ``grub-probe --help'' for more information.\n");
|
||||||
else
|
else
|
||||||
printf ("\
|
printf ("\
|
||||||
Usage: grub-probe [OPTION]... PATH\n\
|
Usage: grub-probe [OPTION]... [PATH|DEVICE]\n\
|
||||||
\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\
|
\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\
|
-m, --device-map=FILE use FILE as the device map [default=%s]\n\
|
||||||
-t, --target=(fs|drive|device|partmap|abstraction)\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\
|
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[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *dev_map = 0;
|
char *dev_map = 0;
|
||||||
char *path;
|
char *argument;
|
||||||
|
|
||||||
progname = "grub-probe";
|
progname = "grub-probe";
|
||||||
|
|
||||||
/* Check for options. */
|
/* Check for options. */
|
||||||
while (1)
|
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)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
case 'd':
|
||||||
|
argument_is_device = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'm':
|
case 'm':
|
||||||
if (dev_map)
|
if (dev_map)
|
||||||
free (dev_map);
|
free (dev_map);
|
||||||
|
@ -321,10 +333,10 @@ main (int argc, char *argv[])
|
||||||
if (verbosity > 1)
|
if (verbosity > 1)
|
||||||
grub_env_set ("debug", "all");
|
grub_env_set ("debug", "all");
|
||||||
|
|
||||||
/* Obtain PATH. */
|
/* Obtain ARGUMENT. */
|
||||||
if (optind >= argc)
|
if (optind >= argc)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "No path is specified.\n");
|
fprintf (stderr, "No path or device is specified.\n");
|
||||||
usage (1);
|
usage (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +346,7 @@ main (int argc, char *argv[])
|
||||||
usage (1);
|
usage (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
path = argv[optind];
|
argument = argv[optind];
|
||||||
|
|
||||||
/* Initialize the emulated biosdisk driver. */
|
/* Initialize the emulated biosdisk driver. */
|
||||||
grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
|
grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
|
||||||
|
@ -343,7 +355,10 @@ main (int argc, char *argv[])
|
||||||
grub_init_all ();
|
grub_init_all ();
|
||||||
|
|
||||||
/* Do it. */
|
/* Do it. */
|
||||||
probe (path);
|
if (argument_is_device)
|
||||||
|
probe (NULL, argument);
|
||||||
|
else
|
||||||
|
probe (argument, NULL);
|
||||||
|
|
||||||
/* Free resources. */
|
/* Free resources. */
|
||||||
grub_fini_all ();
|
grub_fini_all ();
|
||||||
|
|
Loading…
Reference in a new issue