This patch removes grub_get_prefix() and replaces the two remaining calls with make_system_path_relative_to_its_root().
Already discussed in thread "[PATCH] Fix Cygwin path handling".

Change in util/grub-emu.c was tested, but not the change in util/sparc64/ieee1275/grub-setup.c.

--
Regards,
Christian Franke

=== modified file 'ChangeLog'
--- ChangeLog	2010-04-18 11:00:06 +0000
+++ ChangeLog	2010-04-18 14:39:41 +0000
@@ -1,3 +1,12 @@
+2010-04-18  Christian Franke  <fra...@computer.org>
+
+	* include/grub/util/getroot.h (grub_get_prefix): Remove prototype.
+	* util/getroot.c [__CYGWIN__] (get_win32_path): Remove function.
+	(grub_get_prefix): Remove function.
+	* util/grub-emu.c (main): Replace grub_get_prefix () call by
+	make_system_path_relative_to_its_root ().
+	* util/sparc64/ieee1275/grub-setup.c (main): Likewise.
+
 2010-04-18  Vladimir Serbinenko  <phco...@gmail.com>
 
 	* po/POTFILES: Renamed multiboot_loader.c to multiboot.c
@@ -10,7 +19,7 @@
 
 	* disk/lvm.c (grub_lvm_memberlist): Issue an error if pv->disk = 0.
 
-2010-04-17  Christian Franke <fra...@computer.org>
+2010-04-17  Christian Franke  <fra...@computer.org>
 
 	* Makefile.in: Add missing localedir setting.
 

=== modified file 'include/grub/util/getroot.h'
--- include/grub/util/getroot.h	2009-04-11 09:40:39 +0000
+++ include/grub/util/getroot.h	2010-04-18 14:19:18 +0000
@@ -26,7 +26,6 @@
 };
 
 char *grub_guess_root_device (const char *dir);
-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);
 const char *grub_util_check_block_device (const char *blk_dev);

=== modified file 'util/getroot.c'
--- util/getroot.c	2010-04-10 15:07:33 +0000
+++ util/getroot.c	2010-04-18 14:21:03 +0000
@@ -79,103 +79,6 @@
   return path;
 }
 
-#ifdef __CYGWIN__
-/* Convert POSIX path to Win32 path,
-   remove drive letter, replace backslashes.  */
-static char *
-get_win32_path (const char *path)
-{
-  char winpath[PATH_MAX];
-  cygwin_conv_to_full_win32_path (path, winpath);
-
-  int len = strlen (winpath);
-  if (len > 2 && winpath[1] == ':')
-    {
-      len -= 2;
-      memmove (winpath, winpath + 2, len + 1);
-    }
-
-  int i;
-  for (i = 0; i < len; i++)
-    if (winpath[i] == '\\')
-      winpath[i] = '/';
-  return xstrdup (winpath);
-}
-#endif
-
-char *
-grub_get_prefix (const char *dir)
-{
-  char *saved_cwd;
-  char *abs_dir, *prev_dir;
-  char *prefix;
-  struct stat st, prev_st;
-
-  /* Save the current directory.  */
-  saved_cwd = xgetcwd ();
-
-  if (chdir (dir) < 0)
-    grub_util_error ("cannot change directory to `%s'", dir);
-
-  abs_dir = xgetcwd ();
-  strip_extra_slashes (abs_dir);
-  prev_dir = xstrdup (abs_dir);
-
-  if (stat (".", &prev_st) < 0)
-    grub_util_error ("cannot stat `%s'", dir);
-
-  if (! S_ISDIR (prev_st.st_mode))
-    grub_util_error ("`%s' is not a directory", dir);
-
-  while (1)
-    {
-      if (chdir ("..") < 0)
-	grub_util_error ("cannot change directory to the parent");
-
-      if (stat (".", &st) < 0)
-	grub_util_error ("cannot stat current directory");
-
-      if (! S_ISDIR (st.st_mode))
-	grub_util_error ("current directory is not a directory???");
-
-      if (prev_st.st_dev != st.st_dev || prev_st.st_ino == st.st_ino)
-	break;
-
-      free (prev_dir);
-      prev_dir = xgetcwd ();
-      prev_st = st;
-    }
-
-  strip_extra_slashes (prev_dir);
-  prefix = xmalloc (strlen (abs_dir) - strlen (prev_dir) + 2);
-  prefix[0] = '/';
-  strcpy (prefix + 1, abs_dir + strlen (prev_dir));
-  strip_extra_slashes (prefix);
-
-  if (chdir (saved_cwd) < 0)
-    grub_util_error ("cannot change directory to `%s'", dir);
-
-#ifdef __CYGWIN__
-  if (st.st_dev != (DEV_CYGDRIVE_MAJOR << 16))
-    {
-      /* Reached some mount point not below /cygdrive.
-	 GRUB does not know Cygwin's emulated mounts,
-	 convert to Win32 path.  */
-      grub_util_info ("Cygwin prefix = %s", prefix);
-      char * wprefix = get_win32_path (prefix);
-      free (prefix);
-      prefix = wprefix;
-    }
-#endif
-
-  free (saved_cwd);
-  free (abs_dir);
-  free (prev_dir);
-
-  grub_util_info ("prefix = %s", prefix);
-  return prefix;
-}
-
 #ifdef __MINGW32__
 
 static char *

=== modified file 'util/grub-emu.c'
--- util/grub-emu.c	2010-02-07 16:52:11 +0000
+++ util/grub-emu.c	2010-04-18 14:38:28 +0000
@@ -242,7 +242,7 @@
   if (strcmp (root_dev, "host") == 0)
     dir = xstrdup (dir);
   else
-    dir = grub_get_prefix (dir);
+    dir = make_system_path_relative_to_its_root (dir);
   prefix = xmalloc (strlen (root_dev) + 2 + strlen (dir) + 1);
   sprintf (prefix, "(%s)%s", root_dev, dir);
   free (dir);

=== modified file 'util/sparc64/ieee1275/grub-setup.c'
--- util/sparc64/ieee1275/grub-setup.c	2010-01-16 00:26:52 +0000
+++ util/sparc64/ieee1275/grub-setup.c	2010-04-18 14:38:02 +0000
@@ -635,7 +635,8 @@
 
   find_dest_dev (&ginfo, argv);
 
-  ginfo.prefix = grub_get_prefix (ginfo.dir ? : DEFAULT_DIRECTORY);
+  ginfo.prefix = make_system_path_relative_to_its_root (ginfo.dir ?
+							: DEFAULT_DIRECTORY);
 
   check_root_dev (&ginfo);
 

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to