# Helper library for update-grub # Copyright (C) 2007 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA. transform="@program_transform_name@" prefix=@prefix@ exec_prefix=@exec_prefix@ sbindir=@sbindir@ grub_probe=${sbindir}/`echo grub-probe | sed ${transform}` make_system_path_relative_to_its_root () { path=$1 # abort if file doesn't exist if test -e $path ; then : ;else return 1 fi # 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` # this loop sets $dir to the root directory of the filesystem we're inspecting while : ; do 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 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} } font_path () { if [ "x${GRUB_FONT_PATH}" = "x" ] ; then : ; else echo "${GRUB_FONT_PATH}" return 0 fi # Prefer system path for space reasons (/boot/grub might be a very small # partition in case of OpenFirmware, etc). for i in /usr/share/grub/unifont.pff /boot/grub/unifont.pff ; do if path=`convert_system_path_to_grub_path $i` ; then GRUB_FONT_PATH="${path}" echo "${GRUB_FONT_PATH}" return 0 fi done return 1 }