From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KaRFN-0004vV-A9 for mharc-grub-devel@gnu.org; Tue, 02 Sep 2008 04:28:21 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KaRFK-0004t6-Ev for grub-devel@gnu.org; Tue, 02 Sep 2008 04:28:18 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KaRFH-0004rg-KA for grub-devel@gnu.org; Tue, 02 Sep 2008 04:28:17 -0400 Received: from [199.232.76.173] (port=40736 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KaRFH-0004rY-G3 for grub-devel@gnu.org; Tue, 02 Sep 2008 04:28:15 -0400 Received: from moutng.kundenserver.de ([212.227.126.188]:51658) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KaRFG-0001vi-VL for grub-devel@gnu.org; Tue, 02 Sep 2008 04:28:15 -0400 Received: from [85.180.13.152] (e180013152.adsl.alicedsl.de [85.180.13.152]) by mrelayeu.kundenserver.de (node=mrelayeu7) with ESMTP (Nemesis) id 0ML2xA-1KaRF404HH-00035M; Tue, 02 Sep 2008 10:28:02 +0200 From: Felix Zielcke To: The development of GRUB 2 In-Reply-To: <1220309171.4115.31.camel@fz.local> References: <20080808202337.3440.57502.reportbug@sylvester.jejik.com.jejik.com> <1218277583.9301.6.camel@fz.local> <489EEAC5.4080209@jejik.com> <1218471512.6939.19.camel@fz.local> <1218735245.8950.10.camel@fz.local> <20080814180353.GC5614@thorin> <1218742324.10393.8.camel@fz.local> <20080814203856.GA23307@thorin> <1218748505.10393.13.camel@fz.local> <1219071926.4569.57.camel@fz.local> <20080901221405.GA11511@thorin> <1220309171.4115.31.camel@fz.local> Content-Type: multipart/mixed; boundary="=-7bre4jWDM3PuYcJ1dSrr" Date: Tue, 02 Sep 2008 10:28:01 +0200 Message-Id: <1220344081.4101.2.camel@fz.local> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 X-Provags-ID: V01U2FsdGVkX1/0dMZ+y4ZgiNn+QpOsI8mr+m0n/mzY2LDGu6V 7CD2rOzygDQQlklG86LWTxAxm8WJxjjio80sUwJtVLzKVi2ISK b00y6YLZxyjqRjo6wOYRvqRA3z8VgJ0 X-detected-kernel: by monty-python.gnu.org: Linux 2.6? (barebone, rare!) Subject: Re: [PATCH] Grub2 cannot find LVM volume groups with a dash (-) in the name 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: Tue, 02 Sep 2008 08:28:18 -0000 --=-7bre4jWDM3PuYcJ1dSrr Content-Type: text/plain Content-Transfer-Encoding: 7bit Am Dienstag, den 02.09.2008, 00:46 +0200 schrieb Felix Zielcke: > I'm too lazy now to make a new patch and go sleeping now. > [...] > > I hope that Marco could have a quick look over it especially the > changelog part :) Final patch attached. In changelog I had again past and present mixed and I just use now the `normal' types instead of grub_uintN_t, seems like that's more used on util/ So if there are no objections I'd like to commit this :) -- Felix Zielcke --=-7bre4jWDM3PuYcJ1dSrr Content-Disposition: attachment; filename=getroot.diff.2 Content-Type: text/plain; name=getroot.diff.2; charset=UTF-8 Content-Transfer-Encoding: 7bit 2008-08-14 Felix Zielcke * util/getroot.c: Include . (grub_util_get_grub_dev): Rewritten to use asprintf for mdraid devices, add support for /dev/md/N devices and handles LVM double dash escaping. Index: util/getroot.c =================================================================== --- util/getroot.c (Revision 1845) +++ util/getroot.c (Arbeitskopie) @@ -17,6 +17,7 @@ * along with GRUB. If not, see . */ +#include #include #include #include @@ -417,58 +418,45 @@ grub_util_get_grub_dev (const char *os_d switch (grub_util_get_dev_abstraction (os_dev)) { case GRUB_DEV_ABSTRACTION_LVM: - grub_dev = xmalloc (strlen (os_dev) - 12 + 1); - strcpy (grub_dev, os_dev + 12); + { + unsigned short i, j; + const unsigned char k = sizeof ("/dev/mapper/") - 1; + const unsigned short l = strlen (os_dev) - k + 1; - break; + grub_dev = xmalloc (strlen (os_dev) - k + 1); + + for (i = 0, j = 0; i < l; i++, j++) + { + grub_dev[j] = os_dev[k + i]; + if (os_dev[k + i] == '-' && os_dev[k + i + 1] == '-') + i++; + } + } - case GRUB_DEV_ABSTRACTION_RAID: - grub_dev = xmalloc (20); + break; + case GRUB_DEV_ABSTRACTION_RAID: + if (os_dev[7] == '_' && os_dev[8] == 'd') { - const char *p; - /* This a partitionable RAID device of the form /dev/md_dNNpMM. */ - int i; - - grub_dev[0] = 'm'; - grub_dev[1] = 'd'; - i = 2; - p = os_dev + 9; - while (*p >= '0' && *p <= '9') - { - grub_dev[i] = *p; - i++; - p++; - } - - if (*p == '\0') - grub_dev[i] = '\0'; - else if (*p == 'p') - { - p++; - grub_dev[i] = ','; - i++; - - while (*p >= '0' && *p <= '9') - { - grub_dev[i] = *p; - i++; - p++; - } + char *p; + + p = strchr (os_dev, 'p'); + if (p) + *p = ','; - grub_dev[i] = '\0'; - } - else - grub_util_error ("Unknown kind of RAID device `%s'", os_dev); + asprintf (&grub_dev, "md%s", os_dev + sizeof ("/dev/md_d") - 1); } else if (os_dev[7] >= '0' && os_dev[7] <= '9') { - memcpy (grub_dev, os_dev + 5, 7); - grub_dev[7] = '\0'; + asprintf (&grub_dev, "md%s", os_dev + sizeof ("/dev/md") - 1); + } + else if (os_dev[7] == '/' && os_dev[8] >= '0' && os_dev[8] <= '9') + { + asprintf (&grub_dev, "md%s", os_dev + sizeof ("/dev/md/") - 1); } else grub_util_error ("Unknown kind of RAID device `%s'", os_dev); --=-7bre4jWDM3PuYcJ1dSrr--