[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[NEW PATCH] Add option to grub-probe to accept system devices as argumen
From: |
Fabian Greffrath |
Subject: |
[NEW PATCH] Add option to grub-probe to accept system devices as arguments |
Date: |
Fri, 22 Feb 2008 15:32:02 +0100 |
User-agent: |
Thunderbird 2.0.0.9 (Windows/20071031) |
Hi Robert,
I have created another patch which introduces some of your suggestions, e.g.
probe() is called with two arguments and grub_util_check_block_device() does not
strdup() the returned string. However, grub-probe crashes with a double free
error message if run with the -d option. I am somehow stuck in this situation,
can you please help me?
I promise I'll provide a changelog as soon as there is a chance that my patch
will get applied. ;)
Cheers,
Fabian
--
Dipl.-Phys. Fabian Greffrath
Ruhr-Universität Bochum
Lehrstuhl für Energieanlagen und Energieprozesstechnik (LEAT)
Universitätsstr. 150, IB 3/134
D-44780 Bochum
Telefon: +49 (0)234 / 32-26334
Fax: +49 (0)234 / 32-14227
E-Mail: address@hidden
diff -Naru grub2-1.96+20080219~/include/grub/util/getroot.h
grub2-1.96+20080219/include/grub/util/getroot.h
--- grub2-1.96+20080219~/include/grub/util/getroot.h 2008-01-12
16:11:56.000000000 +0100
+++ grub2-1.96+20080219/include/grub/util/getroot.h 2008-02-22
14:40:41.000000000 +0100
@@ -29,5 +29,6 @@
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 */
diff -Naru grub2-1.96+20080219~/util/getroot.c
grub2-1.96+20080219/util/getroot.c
--- grub2-1.96+20080219~/util/getroot.c 2008-02-12 23:45:58.000000000 +0100
+++ grub2-1.96+20080219/util/getroot.c 2008-02-22 14:45:52.000000000 +0100
@@ -332,3 +332,17 @@
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;
+}
diff -Naru grub2-1.96+20080219~/util/grub-probe.c
grub2-1.96+20080219/util/grub-probe.c
--- grub2-1.96+20080219~/util/grub-probe.c 2008-02-09 11:49:29.000000000
+0100
+++ grub2-1.96+20080219/util/grub-probe.c 2008-02-22 14:56:28.000000000
+0100
@@ -50,6 +50,7 @@
};
int print = PRINT_FS;
+static unsigned int argument_is_device = 0;
void
grub_putchar (int c)
@@ -100,16 +101,22 @@
}
static void
-probe (const char *path)
+probe (const char *path, const 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;
- device_name = grub_guess_root_device (path);
+ if (path == NULL)
+ {
+ if ( ! grub_util_check_block_device (device_name))
+ grub_util_error ("%s is not a block device.\n", path);
+ }
+ else
+ device_name = grub_guess_root_device (path);
+
if (! device_name)
grub_util_error ("cannot find a device for %s.\n", path);
@@ -226,6 +233,7 @@
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 +250,11 @@
"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 +273,24 @@
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 +334,10 @@
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 +347,7 @@
usage (1);
}
- path = argv[optind];
+ argument = argv[optind];
/* Initialize the emulated biosdisk driver. */
grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP);
@@ -343,7 +356,10 @@
grub_init_all ();
/* Do it. */
- probe (path);
+ if (argument_is_device)
+ probe (NULL,argument);
+ else
+ probe (argument,NULL);
/* Free resources. */
grub_fini_all ();
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, (continued)
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/12
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/13
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/13
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/13
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/13
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/14
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/17
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/18
- Re: [PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/20
- [NEW PATCH] Add option to grub-probe to accept system devices as arguments,
Fabian Greffrath <=
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/22
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/24
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/25
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/25
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/28
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/28
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/28
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/28
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Fabian Greffrath, 2008/02/28
- Re: [NEW PATCH] Add option to grub-probe to accept system devices as arguments, Robert Millan, 2008/02/28