From 73167f1dc570b1cdef3f54f64bf5463f25fdd730 Mon Sep 17 00:00:00 2001 From: robertmh Date: Sat, 23 Jun 2007 17:57:42 +0000 Subject: [PATCH] Oops. Commit the changes corresponding to this ChangeLog entry: * util/update-grub_lib.in (convert_system_path_to_grub_path): Split code to make path relative to its root into a separate function. * util/i386/pc/grub-install.in: Use newly provided make_system_path_relative_to_its_root() to convert ${grubdir}, then pass the result to grub-install --prefix. that I forgot to apply before. --- util/i386/pc/grub-install.in | 5 ++- util/update-grub_lib.in | 63 ++++++++++++++++++++++++++++-------- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/util/i386/pc/grub-install.in b/util/i386/pc/grub-install.in index 97c8761fa..1916c180a 100644 --- a/util/i386/pc/grub-install.in +++ b/util/i386/pc/grub-install.in @@ -46,6 +46,9 @@ force_lba= recheck=no debug=no +# for make_system_path_relative_to_its_root() +. ${libdir}/grub/update-grub_lib + # Usage: usage # Print the usage. usage () { @@ -227,7 +230,7 @@ fi # _chain is often useful modules="$modules $fs_module $partmap_module _chain" -$grub_mkimage --output=${grubdir}/core.img $modules || exit 1 +$grub_mkimage --output=${grubdir}/core.img --prefix=`make_system_path_relative_to_its_root ${grubdir}` $modules || exit 1 # Now perform the installation. $grub_setup --directory=${grubdir} --device-map=${device_map} \ diff --git a/util/update-grub_lib.in b/util/update-grub_lib.in index b2a871a1d..938eafc1f 100644 --- a/util/update-grub_lib.in +++ b/util/update-grub_lib.in @@ -17,38 +17,75 @@ transform="@program_transform_name@" +prefix=@prefix@ +exec_prefix=@exec_prefix@ sbindir=@sbindir@ grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` -convert_system_path_to_grub_path () +make_system_path_relative_to_its_root () { - dir=$1 - # Abort if file doesn't exist - test -e $dir - dir=`readlink -f $dir` - - drive=`${grub_probe} -t drive $dir` - if [ "x$drive" = "x" ] ; then + path=$1 + # abort if file doesn't exist + if test -e $path ; then : ;else return 1 fi - # Abort if file is in a filesystem we can't read - ${grub_probe} -t fs $dir > /dev/null 2>&1 + # canonicalize + if path=`readlink -f $path` ; then : ; else + return 1 + fi + + # if not a directory, climb up to the directory containing it + if test -d $path ; then + dir=$path + else + dir=`echo $path | sed -e "s,/[^/]*$,,g"` + fi num=`stat -c %d $dir` - relative_path="" + + # this loop sets $dir to the root directory of the filesystem we're inspecting while : ; do - parent=`echo $dir | sed -e "s,/[^/]*$,,g" -e "s,^$,/,g"` + parent=`readlink -f $dir/..` if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else + # $parent is another filesystem; we found it. break fi if [ "x$dir" = "x/" ] ; then + # / is our root. break fi - relative_path=`echo $dir | sed -e "s,^.*/,/,g"`$relative_path dir=$parent done + echo $path | sed -e "s,^$dir,/,g" -e "s,//,/,g" +} + +convert_system_path_to_grub_path () +{ + path=$1 + + # abort if file doesn't exist + if test -e $path ; then : ;else + return 1 + fi + + # abort if file is in a filesystem we can't read + if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else + return 1 + fi + + if drive=`${grub_probe} -t drive $path` ; then : ; else + return 1 + fi + + if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else + return 1 + fi + + # remove any trailing slash, even if that slash is everything we have + relative_path=`echo ${relative_path} | sed -e "s,/*$,,g"` + echo ${drive}${relative_path} }