commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[1851] 2008-09-04 Felix Zielcke <address@hidden>


From: Felix Zielcke
Subject: [1851] 2008-09-04 Felix Zielcke <address@hidden>
Date: Thu, 04 Sep 2008 19:55:00 +0000

Revision: 1851
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1851
Author:   fzielcke
Date:     2008-09-04 19:54:59 +0000 (Thu, 04 Sep 2008)

Log Message:
-----------
2008-09-04  Felix Zielcke  <address@hidden>

        * util/getroot.c: Include <config.h>.
        (grub_util_get_grub_dev): Rewrite to use asprintf for mdraid devices,
        add support for /dev/md/N devices and handle LVM double dash escaping.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/util/getroot.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-09-04 07:54:06 UTC (rev 1850)
+++ trunk/grub2/ChangeLog       2008-09-04 19:54:59 UTC (rev 1851)
@@ -1,8 +1,14 @@
 2008-09-04  Felix Zielcke  <address@hidden>
 
-        * config.guess: Update to latest version from config.git.
-        * config.sub: Likewise.
+       * util/getroot.c: Include <config.h>.
+       (grub_util_get_grub_dev): Rewrite to use asprintf for mdraid devices,
+       add support for /dev/md/N devices and handle LVM double dash escaping.
 
+2008-09-04  Felix Zielcke  <address@hidden>
+
+       * config.guess: Update to latest version from config git.
+       * config.sub: Likewise.
+
 2008-09-03  Robert Millan  <address@hidden>
 
        * disk/scsi.c (grub_scsi_open): Remove size limit when printing

Modified: trunk/grub2/util/getroot.c
===================================================================
--- trunk/grub2/util/getroot.c  2008-09-04 07:54:06 UTC (rev 1850)
+++ trunk/grub2/util/getroot.c  2008-09-04 19:54:59 UTC (rev 1851)
@@ -17,6 +17,7 @@
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <config.h>
 #include <sys/stat.h>
 #include <unistd.h>
 #include <string.h>
@@ -417,62 +418,52 @@
   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, len;
+       grub_size_t offset = sizeof ("/dev/mapper/") - 1;
 
+       len = strlen (os_dev) - offset + 1;
+       grub_dev = xmalloc (len);
+
+       for (i = 0; i < len; i++, offset++)
+         {
+           grub_dev[i] = os_dev[offset];
+           if (os_dev[offset] == '-' && os_dev[offset + 1] == '-')
+             offset++;
+         }
+      }
+      
       break;
 
     case GRUB_DEV_ABSTRACTION_RAID:
-      grub_dev = xmalloc (20);
 
       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++;
-           }
+         char *p , *q;
 
-         if (*p == '\0')
-           grub_dev[i] = '\0';
-         else if (*p == 'p')
-           {
-             p++;
-             grub_dev[i] = ',';
-             i++;
+         p = strdup (os_dev + sizeof ("/dev/md_d") - 1);
 
-             while (*p >= '0' && *p <= '9')
-               {
-                 grub_dev[i] = *p;
-                 i++;
-                 p++;
-               }
+         q = strchr (p, 'p');
+         if (q)
+           *q = ',';
 
-             grub_dev[i] = '\0';
-           }
-         else
-           grub_util_error ("Unknown kind of RAID device `%s'", os_dev);
+         asprintf (&grub_dev, "md%s", p);
+         free (p);
        }
       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);
-
+      
       break;
 
     default:  /* GRUB_DEV_ABSTRACTION_NONE */






reply via email to

[Prev in Thread] Current Thread [Next in Thread]