grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] grub-probe -t prefix, fix update-grub_lib for Cygwin


From: Christian Franke
Subject: Re: [PATCH] grub-probe -t prefix, fix update-grub_lib for Cygwin
Date: Sun, 27 Jul 2008 23:57:15 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071128 SeaMonkey/1.1.7

Robert Millan wrote:
On Sun, Jul 20, 2008 at 02:40:14PM +0200, Christian Franke wrote:
The shell function make_system_path_relative_to_its_root() does not work on Cygwin due to path mapping (e.g. /boot/grub/ is actually /cygwin/boot/grub).

This patch adds '-t prefix' to grub-probe. It prints result from grub_get_prefix() which is already extended for Cygwin (svn rev 1584). The result is used in make_system_path_relative_to_its_root(). This keeps the platform dependent code in getroot.c.

Christian

2008-07-20      Christian Franke  <address@hidden>

        * util/grub-probe.c (enum): Add PRINT PREFIX.
        (probe): Add PRINT_PREFIX, prints result of
        grub_get_prefix ().
        (usage): Add `prefix' to `-t' usage text.
        Add some '\n' to avoid excess long lines.
        (main): Add check for `-t prefix' option.

This is different than the usual grub-probe usage in that it doesn't operate
on a device.  Perhaps it would make sense to add the functionality you want in
a separate utility?

I have an increasing feeling that grub-probe is becoming bloated (though I
admit, this is mostly my fault)


Here is a version with works without grub-probe.

Christian

diff --git a/util/update-grub_lib.in b/util/update-grub_lib.in
index 03a96ce..9d0f0c6 100644
--- a/util/update-grub_lib.in
+++ b/util/update-grub_lib.in
@@ -68,7 +68,22 @@ make_system_path_relative_to_its_root ()
     dir=""
   fi
 
-  echo $path | sed -e "s,^$dir,,g"
+  # XXX: This fails if $dir contains ','.
+  path=`echo "$path" | sed -e "s,^$dir,,g"` || return 1
+
+  case "`uname 2>/dev/null`" in
+    CYGWIN*)
+      # Cygwin: Check if regular or emulated mount.
+      if [ -z "$dir" ] || [ "`stat -c %D "$dir/.."`" != 620000 ] ; then
+        # Reached some mount point not below /cygdrive.
+        # GRUB does not know Cygwin's emulated mounts,
+        # convert to Win32 path and remove drive letter.
+        path=`cygpath -m "$path" | sed -n 's,^[A-Za-z]:,,p'`
+        test ! -z "$path" || return 1
+      fi ;;
+  esac
+
+  echo "$path"
 }
 
 is_path_readable_by_grub ()

reply via email to

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