On Fri, Sep 22, 2006 at 06:33:13PM +0200, Robert Millan wrote: > > This would be very useful to get rid of ugly kludges in Debian, such as this > one: > > http://svn.debian.org/wsvn/pkg-grub/grub2/trunk/debian/update-grub?op=file&rev=0&sc=0 > (look for convert() here) > > Fortunately grub-probefs is already doing what we need, we just need a way to > tell it to print the information.
Uhm it seems I need the system device name as well. Please look at this new patch with an additional option (I had to rework the grub_guess_root_device interface to get the info yet unprocessed by grub_util_biosdisk_get_grub_dev). 2006-09-22 Robert Millan <[EMAIL PROTECTED]> * util/i386/pc/getroot.c (grub_guess_root_device): Stop using grub_util_biosdisk_get_grub_dev to convert system device to GRUB device. * util/grub-emu.c: Use grub_util_biosdisk_get_grub_dev with the string returned by grub_guess_root_device. * util/i386/pc/grub-setup.c: Ditto. * util/i386/pc/grub-probefs.c: Ditto. * util/i386/pc/grub-probefs.c: Add two options (--grub-root-device and --root-device) to print GRUB or system device and exit. -- Robert Millan My spam trap is [EMAIL PROTECTED] Note: this address is only intended for spam harvesters. Writing to it will get you added to my black list.
2006-09-22 Robert Millan <[EMAIL PROTECTED]> * util/i386/pc/getroot.c (grub_guess_root_device): Stop using grub_util_biosdisk_get_grub_dev to convert system device to GRUB device. * util/grub-emu.c: Use grub_util_biosdisk_get_grub_dev with the string returned by grub_guess_root_device. * util/i386/pc/grub-setup.c: Ditto. * util/i386/pc/grub-probefs.c: Ditto. * util/i386/pc/grub-probefs.c: Add two options (--grub-root-device and --root-device) to print GRUB or system device and exit. Index: util/grub-emu.c =================================================================== RCS file: /sources/grub/grub2/util/grub-emu.c,v retrieving revision 1.30 diff -u -r1.30 grub-emu.c --- util/grub-emu.c 13 Jun 2006 22:50:01 -0000 1.30 +++ util/grub-emu.c 22 Sep 2006 21:00:09 -0000 @@ -185,7 +185,7 @@ /* Make sure that there is a root device. */ if (! args.root_dev) { - args.root_dev = grub_guess_root_device (args.dir ? : DEFAULT_DIRECTORY); + args.root_dev = grub_util_biosdisk_get_grub_dev (grub_guess_root_device (args.dir ? : DEFAULT_DIRECTORY)); if (! args.root_dev) { grub_util_info ("guessing the root device failed, because of `%s'", Index: util/i386/pc/getroot.c =================================================================== RCS file: /sources/grub/grub2/util/i386/pc/getroot.c,v retrieving revision 1.5 diff -u -r1.5 getroot.c --- util/i386/pc/getroot.c 14 Sep 2006 18:52:50 -0000 1.5 +++ util/i386/pc/getroot.c 22 Sep 2006 21:00:09 -0000 @@ -223,5 +223,5 @@ if (! os_dev) return 0; - return grub_util_biosdisk_get_grub_dev (os_dev); + return os_dev; } Index: util/i386/pc/grub-probefs.c =================================================================== RCS file: /sources/grub/grub2/util/i386/pc/grub-probefs.c,v retrieving revision 1.3 diff -u -r1.3 grub-probefs.c --- util/i386/pc/grub-probefs.c 23 Apr 2006 13:37:36 -0000 1.3 +++ util/i386/pc/grub-probefs.c 22 Sep 2006 21:00:09 -0000 @@ -47,6 +47,9 @@ #define DEFAULT_DEVICE_MAP DEFAULT_DIRECTORY "/device.map" +int print_root = 0; +int print_grub_root = 0; + void grub_putchar (int c) { @@ -74,13 +77,33 @@ probe (const char *path) { char *device_name; + char *grub_device_name; grub_device_t dev; grub_fs_t fs; device_name = grub_guess_root_device (path); if (! device_name) { - fprintf (stderr, "cannot find a GRUB device for %s.\n", path); + fprintf (stderr, "cannot find a device for %s.\n", path); + return; + } + + grub_device_name = grub_util_biosdisk_get_grub_dev (device_name); + if (! grub_device_name) + { + fprintf (stderr, "cannot find a GRUB device for %s.\n", device_name); + return; + } + + if (print_root) + { + printf ("%s\n", device_name); + return; + } + + if (print_grub_root) + { + printf ("(%s)\n", grub_device_name); return; } @@ -102,6 +125,8 @@ static struct option options[] = { {"device-map", required_argument, 0, 'm'}, + {"root-device", no_argument, 0, 'r'}, + {"grub-root-device", no_argument, 0, 'g'}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {"verbose", no_argument, 0, 'v'}, @@ -121,6 +146,8 @@ Probe a filesystem module for a given path.\n\ \n\ -m, --device-map=FILE use FILE as the device map [default=%s]\n\ + -r, --root-device print guessed root device and exit\n\ + -g, --grub-root-device print guessed GRUB root device and exit\n\ -h, --help display this message and exit\n\ -V, --version print version information and exit\n\ -v, --verbose print verbose messages\n\ @@ -143,7 +170,7 @@ /* Check for options. */ while (1) { - int c = getopt_long (argc, argv, "m:hVv", options, 0); + int c = getopt_long (argc, argv, "m:rghVv", options, 0); if (c == -1) break; @@ -157,6 +184,14 @@ dev_map = xstrdup (optarg); break; + case 'r': + print_root=1; + break; + + case 'g': + print_grub_root=1; + break; + case 'h': usage (0); break; Index: util/i386/pc/grub-setup.c =================================================================== RCS file: /sources/grub/grub2/util/i386/pc/grub-setup.c,v retrieving revision 1.18 diff -u -r1.18 grub-setup.c --- util/i386/pc/grub-setup.c 4 Jun 2006 15:56:55 -0000 1.18 +++ util/i386/pc/grub-setup.c 22 Sep 2006 21:00:09 -0000 @@ -669,7 +669,7 @@ } else { - root_dev = grub_guess_root_device (dir ? : DEFAULT_DIRECTORY); + root_dev = grub_util_biosdisk_get_grub_dev (grub_guess_root_device (dir ? : DEFAULT_DIRECTORY)); if (! root_dev) { grub_util_info ("guessing the root device failed, because of `%s'",
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel