From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1VpDVh-00009m-9c for mharc-grub-devel@gnu.org; Sat, 07 Dec 2013 03:45:13 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51332) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VpDVY-0008Ve-2W for grub-devel@gnu.org; Sat, 07 Dec 2013 03:45:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VpDVP-00053E-Kw for grub-devel@gnu.org; Sat, 07 Dec 2013 03:45:04 -0500 Received: from mail-lb0-x22b.google.com ([2a00:1450:4010:c04::22b]:50523) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VpDVP-000536-7U for grub-devel@gnu.org; Sat, 07 Dec 2013 03:44:55 -0500 Received: by mail-lb0-f171.google.com with SMTP id q8so653573lbi.30 for ; Sat, 07 Dec 2013 00:44:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:in-reply-to:references; bh=yeQq6pfQBgJsRvgCJOA+hw+GILWW36TEBoI/lNWv4JI=; b=l5Md0eKxbuG803NNn8YMCQrwgV3T/g2hbu1bFcVWg9NhqZBPT+DWf1qmDF8Rj7wrb2 it4SiOqDxQ/tKG456pOxVpqG/5j6GlmvPwYTo+AmWDKciSZulA3nX+TjXpQI8fd9qSDY 9kYveWnCX5Y2crryVDQeRauF2vfb5AlfcrXcD3DbW/LAiSFYs2l47B9ZGlOZdWNPR8te a2Fh/HrR6WHlRaUm+V5HYE1gbPWYToJxwlgyzdd7Qp0f8l1+73k41eMOmv0zMxh+H3+Z 1b0qRKIA35phw5o1db5Cr+gb+xPbKRFoJKCS12ur2v4xB4I2zXDFikqZLsyBq2zT6bnR USNQ== X-Received: by 10.152.44.225 with SMTP id h1mr2007331lam.22.1386405893639; Sat, 07 Dec 2013 00:44:53 -0800 (PST) Received: from localhost.localdomain (ppp91-76-134-134.pppoe.mtu-net.ru. [91.76.134.134]) by mx.google.com with ESMTPSA id mv9sm1329363lbc.0.2013.12.07.00.44.52 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 07 Dec 2013 00:44:52 -0800 (PST) From: Andrey Borzenkov To: grub-devel@gnu.org Subject: [PATCH 1/2] revert 69ca97c820, it broke using OS device name as install device Date: Sat, 7 Dec 2013 12:44:31 +0400 Message-Id: <1386405872-28362-1-git-send-email-arvidjaar@gmail.com> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: References: X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:4010:c04::22b X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Dec 2013 08:45:12 -0000 grub-install already performs install device to grub device mapping (it needs it to compare install and /boot devices), so after this patch SETUP got called with grub device and tried to perform mapping again. --- ChangeLog | 5 +++++ util/grub-setup.c | 41 ++++++++++++++++++++++++++++++++++++++++- util/setup.c | 26 +------------------------- 3 files changed, 46 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 203038e..b93db5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-11-29 Andrey Borzenkov + + Revert commit 69ca97c820, it cause failures in using OS device name + in grub-install. + 2013-12-06 Vladimir Serbinenko Don't add -mlong-calls when compiling with clang. diff --git a/util/grub-setup.c b/util/grub-setup.c index cc3af5d..90b9de0 100644 --- a/util/grub-setup.c +++ b/util/grub-setup.c @@ -209,9 +209,23 @@ DEVICE must be an OS device (e.g. /dev/sda)."), NULL, help_filter, NULL }; +static char * +get_device_name (char *dev) +{ + size_t len = strlen (dev); + + if (dev[0] != '(' || dev[len - 1] != ')') + return 0; + + dev[len - 1] = '\0'; + return dev + 1; +} + int main (int argc, char *argv[]) { + char *root_dev = NULL; + char *dest_dev = NULL; struct arguments arguments; grub_util_host_init (&argc, &argv); @@ -250,11 +264,34 @@ main (int argc, char *argv[]) grub_mdraid1x_init (); grub_lvm_init (); + dest_dev = get_device_name (arguments.device); + if (! dest_dev) + { + /* Possibly, the user specified an OS device file. */ + dest_dev = grub_util_get_grub_dev (arguments.device); + if (! dest_dev) + { + char *program = xstrdup(program_name); + fprintf (stderr, _("Invalid device `%s'.\n"), arguments.device); + argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); + free(program); + exit(1); + } + grub_util_info ("transformed OS device `%s' into GRUB device `%s'", + arguments.device, dest_dev); + } + else + { + /* For simplicity. */ + dest_dev = xstrdup (dest_dev); + grub_util_info ("Using `%s' as GRUB device", dest_dev); + } + /* Do the real work. */ GRUB_SETUP_FUNC (arguments.dir ? : DEFAULT_DIRECTORY, arguments.boot_file ? : DEFAULT_BOOT_FILE, arguments.core_file ? : DEFAULT_CORE_FILE, - arguments.device, arguments.force, + dest_dev, arguments.force, arguments.fs_probe, arguments.allow_floppy); /* Free resources. */ @@ -266,6 +303,8 @@ main (int argc, char *argv[]) free (arguments.dir); free (arguments.dev_map); free (arguments.device); + free (root_dev); + free (dest_dev); return 0; } diff --git a/util/setup.c b/util/setup.c index c1de3d2..337c304 100644 --- a/util/setup.c +++ b/util/setup.c @@ -247,13 +247,12 @@ identify_partmap (grub_disk_t disk __attribute__ ((unused)), void SETUP (const char *dir, const char *boot_file, const char *core_file, - const char *dev, int force, + const char *dest, int force, int fs_probe, int allow_floppy) { char *core_path; char *boot_img, *core_img, *boot_path; char *root = 0; - char *dest = 0; size_t boot_size, core_size; #ifdef GRUB_SETUP_BIOS grub_uint16_t core_sectors; @@ -270,28 +269,6 @@ SETUP (const char *dir, #endif bl.last_length = 0; - { - size_t len = strlen (dev); - - if (len > 2 && dev[0] == '(' && dev[len - 1] == ')') - { - dest = xmalloc (len - 1); - strncpy (dest, dev + 1, len - 2); - dest[len - 2] = '\0'; - } - } - - if (! dest) - { - /* Possibly, the user specified an OS device file. */ - dest = grub_util_get_grub_dev (dev); - if (! dest) - grub_util_error (_("Invalid device `%s'.\n"), dev); - grub_util_info ("transformed OS device `%s' into GRUB device `%s'", - dev, dest); - } - - /* Read the boot image by the OS service. */ boot_path = grub_util_get_path (dir, boot_file); boot_size = grub_util_get_image_size (boot_path); @@ -326,7 +303,6 @@ SETUP (const char *dir, dest_dev = grub_device_open (dest); if (! dest_dev) grub_util_error ("%s", grub_errmsg); - free (dest); core_dev = dest_dev; -- 1.8.1.4