]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Use ofpathname in grub-setup on sparc
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 18 Apr 2010 12:02:13 +0000 (14:02 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 18 Apr 2010 12:02:13 +0000 (14:02 +0200)
conf/powerpc-ieee1275.rmk
conf/sparc64-ieee1275.rmk
include/grub/util/hostdisk.h
include/grub/util/ofpath.h
util/hostdisk.c
util/ieee1275/grub-ofpathname.c [moved from util/sparc64/ieee1275/grub-ofpathname.c with 100% similarity]
util/ieee1275/ofpath.c
util/sparc64/ieee1275/grub-setup.c

index d5968ac8e3e2b44bb22baf1c598b82331505830b..d7d4773276c5ac0b83aee18cbdc9934548fc8cf8 100644 (file)
@@ -25,6 +25,13 @@ kernel_img_CFLAGS = $(COMMON_CFLAGS)
 kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
 kernel_img_LDFLAGS += $(COMMON_LDFLAGS) -Wl,-N,-S,-Ttext,0x200000,-Bstatic
 
+# Utilities.
+sbin_UTILITIES = grub-ofpathname
+
+# For grub-ofpathname.
+grub_ofpathname_SOURCES = util/ieee1275/grub-ofpathname.c \
+       util/ieee1275/ofpath.c util/misc.c gnulib/progname.c
+
 # Scripts.
 sbin_SCRIPTS = grub-install
 bin_SCRIPTS = grub-mkrescue
index 72f947f6ac2f1b28439819deada8eb10c1be94a4..a92e66a803ca25faabea6e35525e96c6d020ba63 100644 (file)
@@ -50,6 +50,7 @@ grub_mkimage_SOURCES = util/grub-mkrawimage.c util/misc.c \
 # For grub-setup.
 util/sparc64/ieee1275/grub-setup.c_DEPENDENCIES = grub_setup_init.h
 grub_setup_SOURCES = util/sparc64/ieee1275/grub-setup.c util/hostdisk.c        \
+       util/ieee1275/ofpath.c \
        util/misc.c util/getroot.c kern/device.c kern/disk.c    \
        kern/err.c kern/misc.c kern/parser.c kern/partition.c   \
        kern/file.c kern/fs.c kern/env.c kern/list.c            \
index 21efb0d179a7c4075ee8af07a178928295989e4a..246046ee07c8a24b2201c7b136467575eba3de86 100644 (file)
 #ifndef GRUB_BIOSDISK_MACHINE_UTIL_HEADER
 #define GRUB_BIOSDISK_MACHINE_UTIL_HEADER      1
 
+#include <grub/disk.h>
+
 void grub_util_biosdisk_init (const char *dev_map);
 void grub_util_biosdisk_fini (void);
 char *grub_util_biosdisk_get_grub_dev (const char *os_dev);
+const char *grub_util_biosdisk_get_osdev (grub_disk_t disk);
 
 #endif /* ! GRUB_BIOSDISK_MACHINE_UTIL_HEADER */
index 78f24d78431b1bc82346116f109fb4164bb8d5af..b43c523cb267c6b0362180b3936de4b976842f85 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef GRUB_OFPATH_MACHINE_UTIL_HEADER
 #define GRUB_OFPATH_MACHINE_UTIL_HEADER        1
 
-char *grub_util_devname_to_ofpath (char *devname);
+char *grub_util_devname_to_ofpath (const char *devname);
 
 #endif /* ! GRUB_OFPATH_MACHINE_UTIL_HEADER */
index a8e4180469d9b46e114b6a2a8523aa315c988483..8be487461b6304cb7747511d778b28b50a259235 100644 (file)
@@ -1352,3 +1352,9 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
   return make_device_name (drive, -1, -1);
 #endif
 }
+
+const char *
+grub_util_biosdisk_get_osdev (grub_disk_t disk)
+{
+  return map[disk->id].device;
+}
index 79a0e8be5e934a0bf1262e3ed3a76b8af2b36036..fa0d48cf9568d7689f1fb78659c91eddb0b32e8f 100644 (file)
@@ -368,7 +368,7 @@ strip_trailing_digits (const char *p)
 }
 
 char *
-grub_util_devname_to_ofpath (char *devname)
+grub_util_devname_to_ofpath (const char *devname)
 {
   char *name_buf, *device, *devnode, *devicenode, *ofpath;
 
index c39ea853fc6397331ab27b29e7d84f42c4e7d63d..cfd58a08f9e157e176e743e9b2c823f27613ae29 100644 (file)
@@ -35,6 +35,7 @@
 #include <grub/term.h>
 #include <grub/util/raid.h>
 #include <grub/util/lvm.h>
+#include <grub/util/ofpath.h>
 
 #include <grub_setup_init.h>
 
@@ -103,28 +104,6 @@ grub_refresh (void)
   fflush (stdout);
 }
 
-static char *compute_dest_ofpath (const char *dest)
-{
-  int len = strlen (dest);
-  char *res, *p, c;
-
-  res = xmalloc (len);
-  p = res;
-  while ((c = *dest++) != '\0')
-    {
-      if (c == '\\' && *dest == ',')
-       {
-         *p++ = ',';
-         dest++;
-       }
-      else
-       *p++ = c;
-    }
-  *p++ = '\0';
-
-  return res;
-}
-
 static void
 setup (const char *prefix, const char *dir,
        const char *boot_file, const char *core_file,
@@ -195,8 +174,6 @@ setup (const char *prefix, const char *dir,
       last_length = length;
     }
 
-  dest_ofpath = compute_dest_ofpath (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);
@@ -229,8 +206,7 @@ setup (const char *prefix, const char *dir,
                                           + GRUB_DISK_SECTOR_SIZE
                                           - sizeof (*block));
 
-  grub_util_info ("root is `%s', dest is `%s', and dest_ofpath is `%s'",
-                 root, dest, dest_ofpath);
+  grub_util_info ("root is `%s', dest is `%s'", root, dest);
 
   /* Open the root device and the destination device.  */
   grub_util_info ("Opening root");
@@ -243,6 +219,11 @@ setup (const char *prefix, const char *dir,
   if (! dest_dev)
     grub_util_error ("%s", grub_errmsg);
 
+  dest_ofpath
+    = grub_util_devname_to_ofpath (grub_util_biosdisk_get_osdev (dest_dev->disk));
+
+  grub_util_info ("dest_ofpath is `%s'", dest_ofpath);
+
   grub_util_info ("setting the root device to `%s'", root);
   if (grub_env_set ("root", root) != GRUB_ERR_NONE)
     grub_util_error ("%s", grub_errmsg);
@@ -449,7 +430,6 @@ init_info (struct grub_setup_info *gp)
   gp->dev_map = NULL;
   gp->root_dev = NULL;
   gp->prefix = NULL;
-  gp->dest_dev = NULL;
 }
 
 static int