From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1JLwvZ-0003Kc-RM for mharc-grub-devel@gnu.org; Mon, 04 Feb 2008 03:43:45 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JLwvX-0003He-PJ for grub-devel@gnu.org; Mon, 04 Feb 2008 03:43:43 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JLwvW-0003Gd-9Q for grub-devel@gnu.org; Mon, 04 Feb 2008 03:43:43 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JLwvW-0003GU-5b for grub-devel@gnu.org; Mon, 04 Feb 2008 03:43:42 -0500 Received: from mx2.rz.ruhr-uni-bochum.de ([134.147.64.30]) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1JLwvW-0000Fz-EA for grub-devel@gnu.org; Mon, 04 Feb 2008 03:43:42 -0500 X-Queued: (qmail 1455 invoked by uid 281); 4 Feb 2008 08:43:39 -0000 X-Qmailscanner: from 134.147.252.214 by mx2.rz.ruhr-uni-bochum.de (envelope-from , uid 80) with qmail-scanner-2.01 (sophie: 3.05/2.52/4.24. Clear:RC:1(134.147.252.214):. Processed in 0.077468 secs); 04 Feb 2008 08:43:39 -0000 Received: from router.leat.ruhr-uni-bochum.de (134.147.252.214) by mx2.rz.ruhr-uni-bochum.de with SMTP; 4 Feb 2008 08:43:39 -0000 Received: from [134.147.55.45] (frodo.leat.ruhr-uni-bochum.de [134.147.55.45]) by router.leat.ruhr-uni-bochum.de (8.12.2/8.12.2/SuSE Linux 0.6) with ESMTP id m148mL1l019976; Mon, 4 Feb 2008 09:48:21 +0100 Message-ID: <47A6D04E.4070106@leat.rub.de> Date: Mon, 04 Feb 2008 09:43:58 +0100 From: Fabian Greffrath User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: Robert Millan References: <479450A9.90601@leat.rub.de> <20080121112448.GD7378@thorin> <47948422.8000208@leat.rub.de> <20080121121828.GA9244@thorin> <4795B435.20102@leat.rub.de> <20080122124642.GC2017@thorin> <4795EC4D.5020207@leat.rub.de> <47A05477.5030300@leat.rub.de> <20080130194854.GA2143@thorin> <47A1877D.7020009@leat.rub.de> <20080131115855.GA13960@thorin> In-Reply-To: <20080131115855.GA13960@thorin> Content-Type: multipart/mixed; boundary="------------090502060205080200070009" X-detected-kernel: by monty-python.gnu.org: Linux 2.4-2.6 Cc: The development of GRUB 2 , 462218@bugs.debian.org, Otavio Salvador Subject: Re: Bug#461442: detection of other OSes in update-grub X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Feb 2008 08:43:44 -0000 This is a multi-part message in MIME format. --------------090502060205080200070009 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi there, Robert Millan schrieb: > If you want the former, feel free to send a patch to grub-devel. For the > latter, look at my questions and send some feedback. please find attached a patch that adds a new parameter '--device, -d' to grub-probe. If this parameter is set, grub-probe expects the given argument to be a block device. All of the '--target' parameters work with this option as well. If the '--device' parameter is not set, grub-probe will work as before. Furthermore I had to add a new public function to getroot.c that returns the given argument if it is a block device and returns NULL else. This was necessary, because else you could force grub-probe to print 'foobar' if run as 'grub-probe --target=device --device foobar'. I consider this (i.e. adding a new option to grub-probe) a better solution than writing a separate tool only for this purpose. The second file that I attached is the 30_os-prober script making use of the new grub-probe feature. Please note that the 'case ... in' part is only run if 'grub-probe --device' actually returns something usefull. I am looking forward to your feedback. 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: greffrath@leat.ruhr-uni-bochum.de --------------090502060205080200070009 Content-Type: text/x-patch; name="grub-probe.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="grub-probe.diff" diff -urNad grub2-1.95+20080201~/include/grub/util/getroot.h grub2-1.95+20080201/include/grub/util/getroot.h --- grub2-1.95+20080201~/include/grub/util/getroot.h 2008-01-12 16:11:56.000000000 +0100 +++ grub2-1.95+20080201/include/grub/util/getroot.h 2008-02-03 18:14:11.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 -urNad grub2-1.95+20080201~/util/getroot.c grub2-1.95+20080201/util/getroot.c --- grub2-1.95+20080201~/util/getroot.c 2008-01-12 16:11:56.000000000 +0100 +++ grub2-1.95+20080201/util/getroot.c 2008-02-03 21:56:29.000000000 +0100 @@ -327,3 +327,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 strdup(blk_dev); + else + return 0; +} diff -urNad grub2-1.95+20080201~/util/grub-probe.c grub2-1.95+20080201/util/grub-probe.c --- grub2-1.95+20080201~/util/grub-probe.c 2008-01-25 23:33:57.000000000 +0100 +++ grub2-1.95+20080201/util/grub-probe.c 2008-02-03 19:30:50.000000000 +0100 @@ -50,6 +50,7 @@ }; int print = PRINT_FS; +unsigned int argument_is_device = 0; void grub_putchar (int c) @@ -84,9 +85,18 @@ int abstraction_type; grub_device_t dev = NULL; - device_name = grub_guess_root_device (path); + if (argument_is_device) + device_name = grub_util_check_block_device (path); + else + device_name = grub_guess_root_device (path); + if (! device_name) - grub_util_error ("cannot find a device for %s.\n", path); + { + if (argument_is_device) + grub_util_error ("%s is not a block device.\n", path); + else + grub_util_error ("cannot find a device for %s.\n", path); + } if (print == PRINT_DEVICE) { @@ -201,6 +211,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'}, @@ -217,10 +228,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.\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\ @@ -246,13 +258,17 @@ /* 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); --------------090502060205080200070009 Content-Type: text/plain; name="30_os-prober" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="30_os-prober" IyEgL2Jpbi9zaCAtZQoKIyB1cGRhdGUtZ3J1YiBoZWxwZXIgc2NyaXB0LgojIDxpbnNlcnQg Y29weXJpZ2h0IGFuZCBsaWNlbnNlIGJsdXJiIGhlcmU+CgppZiBbIC14ICJgd2hpY2ggb3Mt cHJvYmVyIDI+L2Rldi9udWxsYCIgXSA7IHRoZW4KICBPU1BST0JFRD0iYG9zLXByb2JlciB8 IHRyICcgJyAnfCcgfCBwYXN0ZSAtcyAtZCAnICdgIgpmaQoKaWYgWyAtbiAiJHtPU1BST0JF RH0iIF0gOyB0aGVuCiAgZm9yIE9TIGluICR7T1NQUk9CRUR9IDsgZG8KICAgIERFVklDRT0i YGVjaG8gJHtPU30gfCBjdXQgLWQgJzonIC1mIDFgIgogICAgTE9OR05BTUU9ImBlY2hvICR7 T1N9IHwgY3V0IC1kICc6JyAtZiAyIHwgdHIgJ3wnICcgJ2AiCiAgICBMQUJFTD0iYGVjaG8g JHtPU30gfCBjdXQgLWQgJzonIC1mIDMgfCB0ciAnfCcgJyAnYCIKICAgIEJPT1Q9ImBlY2hv ICR7T1N9IHwgY3V0IC1kICc6JyAtZiA0YCIKCiAgICBpZiBbIC16ICIke0xPTkdOQU1FfSIg XSA7IHRoZW4KICAgICAgTE9OR05BTUU9IiR7TEFCRUx9IgogICAgZmkKCiAgICBlY2hvICJG b3VuZCAke0xPTkdOQU1FfSBvbiAke0RFVklDRX0iID4mMgogICAgCiAgICBURVNUREVWSUNF PSJgZ3J1Yi1wcm9iZSAtLXRhcmdldD1kZXZpY2UgJDBgIgogICAgaWYgWyAtbiAiYGdydWIt cHJvYmUgLS10YXJnZXQ9ZHJpdmUgLS1kZXZpY2UgJHtURVNUREVWSUNFfSAyPi9kZXYvbnVs bGAiIF0gOyB0aGVuCiAgICAgIGNhc2UgIiR7Qk9PVH0iIGluCiAgICAgICAgY2hhaW4pCiAg ICAgICAgICBDSEFJTlJPT1Q9ImBncnViLXByb2JlIC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNl ICR7REVWSUNFfWAiCgogICAgICAgICAgY2F0IDw8IEVPRgptZW51ZW50cnkgIiR7TE9OR05B TUV9IChvbiAke0RFVklDRX0pIiB7CglzZXQgcm9vdD0ke0NIQUlOUk9PVH0KCWNoYWlubG9h ZGVyICsxCn0KRU9GCiAgICAgICAgOzsKICAgICAgICBsaW51eCkKICAgICAgICAgIGlmIFsg LXggImB3aGljaCBsaW51eC1ib290LXByb2JlciAyPi9kZXYvbnVsbGAiIF0gOyB0aGVuCiAg ICAgICAgICAgIExJTlVYUFJPQkVEPSJgbGludXgtYm9vdC1wcm9iZXIgJHtERVZJQ0V9IHwg dHIgJyAnICd8JyB8IHBhc3RlIC1zIC1kICcgJ2AiCiAgICAgICAgICBmaQoKICAgICAgICAg IGlmIFsgLW4gIiR7TElOVVhQUk9CRUR9IiBdIDsgdGhlbgogICAgICAgICAgICBmb3IgTElO VVggaW4gJHtMSU5VWFBST0JFRH0gOyBkbwogICAgICAgICAgICAgIExST09UPSJgZWNobyAk e0xJTlVYfSB8IGN1dCAtZCAnOicgLWYgMWAiCiAgICAgICAgICAgICAgTEJPT1Q9ImBlY2hv ICR7TElOVVh9IHwgY3V0IC1kICc6JyAtZiAyYCIKICAgICAgICAgICAgICBMTEFCRUw9ImBl Y2hvICR7TElOVVh9IHwgY3V0IC1kICc6JyAtZiAzIHwgdHIgJ3wnICcgJ2AiCiAgICAgICAg ICAgICAgTEtFUk5FTD0iYGVjaG8gJHtMSU5VWH0gfCBjdXQgLWQgJzonIC1mIDRgIgogICAg ICAgICAgICAgIExJTklUUkQ9ImBlY2hvICR7TElOVVh9IHwgY3V0IC1kICc6JyAtZiA1YCIK ICAgICAgICAgICAgICBMUEFSQU1TPSJgZWNobyAke0xJTlVYfSB8IGN1dCAtZCAnOicgLWYg NiB8IHRyICd8JyAnICdgIgoKICAgICAgICAgICAgICBMSU5VWFJPT1Q9ImBncnViLXByb2Jl IC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNlICR7TEJPT1R9YCIKCiAgICAgICAgICAgICAgaWYg WyAteiAiJHtMTEFCRUx9IiBdIDsgdGhlbgogICAgICAgICAgICAgICAgTExBQkVMPSIke0xP TkdOQU1FfSIKICAgICAgICAgICAgICBmaQoKICAgICAgICAgICAgICBjYXQgPDwgRU9GCm1l bnVlbnRyeSAiJHtMTEFCRUx9IChvbiAke0RFVklDRX0pIiB7CglzZXQgcm9vdD0ke0xJTlVY Uk9PVH0KCWxpbnV4ICR7TEtFUk5FTH0gJHtMUEFSQU1TfQpFT0YKICAgICAgICAgICAgICBp ZiBbIC1uICIke0xJTklUUkR9IiBdIDsgdGhlbgogICAgICAgICAgICAgICAgY2F0IDw8IEVP RgoJaW5pdHJkICR7TElOSVRSRH0KRU9GCiAgICAgICAgICAgICAgZmkKICAgICAgICAgICAg ICBjYXQgPDwgRU9GCn0KRU9GCiAgICAgICAgICAgIGRvbmUKICAgICAgICAgIGZpCiAgICAg ICAgOzsKICAgICAgICBodXJkKQogICAgICAgICAgIyBub3QgeWV0Li4uCiAgICAgICAgOzsK ICAgICAgICAqKQogICAgICAgIDs7CiAgICAgIGVzYWMKICAgIGZpCiAgZG9uZQpmaQo= --------------090502060205080200070009--