[Top][All Lists]
[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 ()