]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Oops. Commit the changes corresponding to this ChangeLog entry:
authorrobertmh <robertmh@localhost>
Sat, 23 Jun 2007 17:57:42 +0000 (17:57 +0000)
committerrobertmh <robertmh@localhost>
Sat, 23 Jun 2007 17:57:42 +0000 (17:57 +0000)
* 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
util/update-grub_lib.in

index 97c8761faf6489c7b614118201bbc6dbe19e5e6c..1916c180acf16931c797a7884e55c3177cd264b8 100644 (file)
@@ -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} \
index b2a871a1daa697c58bb189b6f59226f476911fdf..938eafc1f5cb59ac873d49cef1f10b46f9ee10d4 100644 (file)
 
 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`
+  path=$1
+  # abort if file doesn't exist
+  if test -e $path ; then : ;else
+    return 1
+  fi
 
-  drive=`${grub_probe} -t drive $dir`
-  if [ "x$drive" = "x" ] ; then
+  # canonicalize
+  if path=`readlink -f $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
+  # 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}
 }