--- grub2-1.99.orig/debian/copyright +++ grub2-1.99/debian/copyright @@ -0,0 +1,25 @@ +Name: GNU GRUB +Source: http://www.gnu.org/software/grub/ + +Files: * +Copyright: 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc +License: GPL-3+ + + +Files: debian/* +Copyright: 2003, 2004, 2005, 2006, 2007, 2008, 2009, Robert Millan + 2005, 2006, 2007, Otavio Salvador + 2008, 2009, Felix Zielcke + 2009, Jordi Mallach +License: GPL-3+ + +Files: debian/grub-extras/* +Copyright: Nathan Coulson + 2003, 2007 Free Software Foundation, Inc + 2003 NIIBE Yutaka +License: GPL-3+ + +License: GPL-3+ + On Debian systems the full text of the GNU General Public + License can be found in the `/usr/share/common-licenses/GPL' + file. --- grub2-1.99.orig/debian/install.in +++ grub2-1.99/debian/install.in @@ -0,0 +1,7 @@ +../../debian/presubj usr/share/bug/@PACKAGE@ +../../debian/script usr/share/bug/@PACKAGE@ +../../debian/kernel/zz-update-grub etc/kernel/postinst.d +../../debian/kernel/zz-update-grub etc/kernel/postrm.d + +usr/share/man/man8/grub-install.8 +usr/share/man/man8/grub-mknetdir.8 --- grub2-1.99.orig/debian/grub2-common.links +++ grub2-1.99/debian/grub2-common.links @@ -0,0 +1,2 @@ +usr/sbin/update-grub usr/sbin/update-grub2 +usr/share/man/man8/update-grub.8 usr/share/man/man8/update-grub2.8 --- grub2-1.99.orig/debian/grub-common.pm-sleep +++ grub2-1.99/debian/grub-common.pm-sleep @@ -0,0 +1,11 @@ +#!/bin/sh + +# Tell grub that resume was successful + +case "$1" in + thaw) + [ -s /boot/grub/grubenv ] || rm -f /boot/grub/grubenv + mkdir -p /boot/grub + grub-editenv /boot/grub/grubenv unset recordfail + ;; +esac --- grub2-1.99.orig/debian/grub-common.install.i386.in +++ grub2-1.99/debian/grub-common.install.i386.in @@ -0,0 +1,2 @@ +usr/bin/grub-mkrescue +usr/share/man/man1/grub-mkrescue.1 --- grub2-1.99.orig/debian/NEWS +++ grub2-1.99/debian/NEWS @@ -0,0 +1,13 @@ +grub2 (1.96+20090609-1) experimental; urgency=low + + Before this version, grub-efi was 32bit on i386 and 64bit on amd64. + However, EFI can be 32bit even if you have a 64bit CPU, like in the + first MacBook models with Core 2 Duo released in late 2006. Thus, + grub-efi has been split into grub-efi-amd64 and grub-efi-ia32 which are + available on both amd64 and i386. + + If you've experienced problems trying to load grub.efi, please try + again using the package that doesn't match your CPU's architecture. + + -- Felix Zielcke Tue, 09 Jun 2009 19:21:15 +0200 + --- grub2-1.99.orig/debian/grub-common.init +++ grub2-1.99/debian/grub-common.init @@ -0,0 +1,42 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: grub-common +# Required-Start: $all +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: +# Short-Description: Record successful boot for GRUB +# Description: GRUB displays the boot menu at the next boot if it +# believes that the previous boot failed. This script +# informs it that the system booted successfully. +### END INIT INFO + +which grub-editenv >/dev/null 2>&1 || exit 0 + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. +. /lib/lsb/init-functions + +case $1 in + start|restart|force-reload) + [ "$VERBOSE" != no ] && log_action_msg "Recording successful boot for GRUB" + [ -s /boot/grub/grubenv ] || rm -f /boot/grub/grubenv + mkdir -p /boot/grub + grub-editenv /boot/grub/grubenv unset recordfail + [ "$VERBOSE" != no ] && log_end_msg $? + ;; + stop) + ;; + status) + exit 0 + ;; + *) + echo "Usage: $0 {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +exit 0 --- grub2-1.99.orig/debian/config.in +++ grub2-1.99/debian/config.in @@ -0,0 +1,70 @@ +#!/bin/sh +set -e + +case `dpkg --print-architecture` in + kfreebsd-*) + # No migration from GRUB Legacy, no Linux cmdline + exit 0 + ;; +esac + +. /usr/share/debconf/confmodule + +priority=medium + +case @PACKAGE@ in + grub-pc) + if test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst && ! test -e /boot/grub/core.img ; then + + db_input high grub-pc/chainload_from_menu.lst || true + + db_get grub-pc/kopt_extracted || true + # this check ensures we only do this once + if [ "$RET" = "false" ] ; then + kopt=`sed -ne "s/^# kopt=//p" /boot/grub/menu.lst | tr -s " " "\n" | grep -vx "\(ro\|root=[^ ]*\)" | paste -s -d ' '` || true + db_set grub2/linux_cmdline "${kopt}" || true + db_set grub-pc/kopt_extracted true || true + if [ "${kopt}" = "" ] ; then + # something smells bad. give user a chance to correct it. + priority=high + else + # if we got something from menu.lst, it must be correct? + priority=medium + fi + timeout=`sed -ne "s/^timeout[[:space:]][[:space:]]*//p" /boot/grub/menu.lst` || true + if [ "${timeout}" != "" ]; then + db_set grub-pc/timeout "${timeout}" || true + fi + if grep -q '^hiddenmenu\([[:space:]]\|$\)' /boot/grub/menu.lst; then + db_set grub-pc/hidden_timeout true || true + else + db_set grub-pc/hidden_timeout false || true + fi + fi + fi + ;; +esac + +if test -e /etc/default/grub ; then + . /etc/default/grub + + db_set grub2/linux_cmdline "$GRUB_CMDLINE_LINUX" + db_set grub2/linux_cmdline_default "$GRUB_CMDLINE_LINUX_DEFAULT" + + case @PACKAGE@ in + grub-pc) + if [ "${GRUB_TIMEOUT}" != "" ]; then + db_set grub-pc/timeout "$GRUB_TIMEOUT" + fi + if [ "${GRUB_HIDDEN_TIMEOUT}" != "" ]; then + db_set grub-pc/hidden_timeout true + elif egrep -q '^#?[[:space:]]*GRUB_HIDDEN_TIMEOUT=' /etc/default/grub; then + db_set grub-pc/hidden_timeout false + fi + ;; + esac +fi + +db_input ${priority} grub2/linux_cmdline || true +db_input medium grub2/linux_cmdline_default || true +db_go --- grub2-1.99.orig/debian/grub-common.install.sparc.in +++ grub2-1.99/debian/grub-common.install.sparc.in @@ -0,0 +1,3 @@ +usr/sbin/grub-ofpathname +# Restore this in the next upstream snapshot: +#usr/share/man/man8/grub-ofpathname.8 --- grub2-1.99.orig/debian/grub-linuxbios.postinst +++ grub2-1.99/debian/grub-linuxbios.postinst @@ -0,0 +1,19 @@ +#! /bin/sh +set -e + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 1.99-1; then + # Force dpkg to replace this directory with a symlink. + if [ ! -L /usr/share/doc/@PACKAGE@ ] && [ -d /usr/share/doc/@PACKAGE@ ]; then + if rmdir /usr/share/doc/@PACKAGE@ 2>/dev/null; then + ln -sf grub-common /usr/share/doc/@PACKAGE@ + fi + fi + fi + ;; +esac + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-pc.links.in +++ grub2-1.99/debian/grub-pc.links.in @@ -0,0 +1,2 @@ +usr/lib/grub/@CPU_PLATFORM@/grub-ntldr-img usr/bin/grub-ntldr-img +usr/lib/grub/@CPU_PLATFORM@/grub-setup usr/sbin/grub-setup --- grub2-1.99.orig/debian/grub-pc.prerm +++ grub2-1.99/debian/grub-pc.prerm @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +case "$1" in + remove|deconfigure) + . /usr/share/debconf/confmodule + db_get grub-pc/chainload_from_menu.lst + if $RET && test -e /boot/grub/menu.lst ; then + echo "Saving menu.lst backup in /boot/grub/menu.lst_backup_by_grub2_prerm" >&2 + cp /boot/grub/menu.lst{,_backup_by_grub2_prerm} + echo "Running update-grub Legacy to remove our core.img in it" >&2 + /usr/lib/grub-legacy/update-grub 2>&1 | sed -e "s/^/ /g" >&2 + fi + ;; + failed-upgrade|upgrade) + ;; + *) + echo "prerm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-common.install.amd64.in +++ grub2-1.99/debian/grub-common.install.amd64.in @@ -0,0 +1,2 @@ +usr/bin/grub-mkrescue +usr/share/man/man1/grub-mkrescue.1 --- grub2-1.99.orig/debian/grub-common.install.in +++ grub2-1.99/debian/grub-common.install.in @@ -0,0 +1,37 @@ +../../debian/presubj usr/share/bug/grub-common +../../debian/apport/source_grub2.py usr/share/apport/package-hooks/ +../../debian/grub.d etc + +etc/bash_completion.d +etc/grub.d +usr/bin/grub-bin2h +usr/bin/grub-editenv +usr/bin/grub-fstest +usr/bin/grub-kbdcomp +usr/bin/grub-menulst2cfg +usr/bin/grub-mkfont +usr/bin/grub-mkimage +usr/bin/grub-mklayout +usr/bin/grub-mkpasswd-pbkdf2 +usr/bin/grub-mkrelpath +usr/bin/grub-mount +usr/bin/grub-script-check +usr/sbin/grub-mkconfig +usr/sbin/grub-mkdevicemap +usr/sbin/grub-probe +usr/share/grub +usr/share/locale +usr/share/man/man1/grub-bin2h.1 +usr/share/man/man1/grub-editenv.1 +usr/share/man/man1/grub-fstest.1 +usr/share/man/man1/grub-menulst2cfg.1 +usr/share/man/man1/grub-mkfont.1 +usr/share/man/man1/grub-mkimage.1 +usr/share/man/man1/grub-mklayout.1 +usr/share/man/man1/grub-mkpasswd-pbkdf2.1 +usr/share/man/man1/grub-mkrelpath.1 +usr/share/man/man1/grub-mount.1 +usr/share/man/man1/grub-script-check.1 +usr/share/man/man8/grub-mkconfig.8 +usr/share/man/man8/grub-mkdevicemap.8 +usr/share/man/man8/grub-probe.8 --- grub2-1.99.orig/debian/grub-firmware-qemu_grub.cfg +++ grub2-1.99/debian/grub-firmware-qemu_grub.cfg @@ -0,0 +1,37 @@ +set default=0 +set fallback=1 +set timeout=10 + +menuentry "Search & load /boot/multiboot.img" { + search -s -f /boot/multiboot.img + if multiboot /boot/multiboot.img ; then + boot + fi + unset timeout +} + +# For separate /boot partition. +menuentry "Search & load /multiboot.img" { + search -s -f /multiboot.img + if multiboot /multiboot.img ; then + boot + fi + unset timeout +} + +menuentry "Search & source /boot/grub/grub.cfg" { + search -s -f /boot/grub/grub.cfg + source /boot/grub/grub.cfg + unset timeout +} + +# For separate /boot partition. +menuentry "Search & source /grub/grub.cfg" { + search -s -f /grub/grub.cfg + source /grub/grub.cfg + unset timeout +} + +menuentry "Reboot" { + reboot +} --- grub2-1.99.orig/debian/grub2-common.install +++ grub2-1.99/debian/grub2-common.install @@ -0,0 +1,8 @@ +../../debian/default usr/share/grub +../../debian/update-grub usr/sbin + +usr/sbin/grub-reboot +usr/sbin/grub-set-default +usr/share/info +usr/share/man/man8/grub-reboot.8 +usr/share/man/man8/grub-set-default.8 --- grub2-1.99.orig/debian/install-bin.in +++ grub2-1.99/debian/install-bin.in @@ -0,0 +1,6 @@ +../../debian/presubj usr/share/bug/@PACKAGE@ +../../debian/script usr/share/bug/@PACKAGE@ + +usr/lib/grub/@CPU_PLATFORM@/ +usr/sbin/grub-install usr/lib/grub/@CPU_PLATFORM@ +usr/sbin/grub-mknetdir usr/lib/grub/@CPU_PLATFORM@ --- grub2-1.99.orig/debian/update-grub +++ grub2-1.99/debian/update-grub @@ -0,0 +1,3 @@ +#!/bin/sh +set -e +exec grub-mkconfig -o /boot/grub/grub.cfg "$@" --- grub2-1.99.orig/debian/links.in +++ grub2-1.99/debian/links.in @@ -0,0 +1,2 @@ +usr/lib/grub/@CPU_PLATFORM@/grub-install usr/sbin/grub-install +usr/lib/grub/@CPU_PLATFORM@/grub-mknetdir usr/sbin/grub-mknetdir --- grub2-1.99.orig/debian/grub-pc.install.in +++ grub2-1.99/debian/grub-pc.install.in @@ -0,0 +1,4 @@ +../../debian/legacy/update-grub usr/lib/grub-legacy +../../debian/legacy/upgrade-from-grub-legacy usr/sbin + +usr/share/man/man8/grub-setup.8 --- grub2-1.99.orig/debian/changelog +++ grub2-1.99/debian/changelog @@ -0,0 +1,6784 @@ +grub2 (1.99-21ubuntu3.6) precise-proposed; urgency=low + + * Fix backport mistake in patch to install signed images if UEFI Secure + Boot is enabled. + + -- Colin Watson Wed, 05 Dec 2012 16:56:50 +0000 + +grub2 (1.99-21ubuntu3.5) precise-proposed; urgency=low + + * Backport several changes to support Secure Boot patches. + * Add Secure Boot patches from Ubuntu 12.10 and Fedora (LP: #1075181): + - Don't permit loading modules on UEFI secure boot. + - Add efifwsetup module to reboot into firmware setup menu. + - Add "linuxefi" loader which avoids ExitBootServices. + - Only build linuxefi on amd64. + - Make linuxefi refuse to boot without shim. + - Make the linux module call linuxefi when necessary, simplifying + configuration. + - If secure boot is enabled and the kernel is signed, linux will call + linuxefi to hand over to it without calling ExitBootServices. + - Otherwise, linux will fall through to previous code, call + ExitBootServices itself, and boot the kernel normally. + - Change linuxefi to return GRUB_ERR_ACCESS_DENIED rather than + GRUB_ERR_INVALID_COMMAND in the case of an invalid signature, to make + it easier to implement different handling of unsigned kernels in + future if necessary. + - Generate configuration for signed UEFI kernels if available. + - Install signed images if UEFI Secure Boot is enabled. + - Output a menu entry for firmware setup on UEFI FastBoot systems. + - Add some extra debugging to signed/unsigned kernel logic. + - On amd64, build two images for signing: one with prefix /EFI/BOOT for + use on removable media, and one with prefix /EFI/ubuntu (and with the + lvm, mdraid09, and mdraid1x modules added) for use on fixed disks. + + -- Colin Watson Wed, 07 Nov 2012 10:01:33 +0000 + +grub2 (1.99-21ubuntu3.4) precise-proposed; urgency=low + + * Revert 1.99-21ubuntu3.2 again,as it was erroneously included again + in 1.99-21ubuntu3.3. + + -- Clint Byrum Wed, 12 Sep 2012 12:04:59 -0700 + +grub2 (1.99-21ubuntu3.3) precise-proposed; urgency=low + + [ Ben Howard ] + * Parameterization of recordfail setting. This allows users to define the + default time out of GRUB when recordfail has been set. The current + setting causes hangs on headless and appliances where access to the + console is limited or prohibited. (LP: #669481) + + -- Louis Bouchard Tue, 21 Aug 2012 10:51:58 +0200 + +grub2 (1.99-21ubuntu3.2) precise-proposed; urgency=low + + * Revert previous SRU. This caused AMI cloud images to prompt about the + changed configuration file, breaking automated upgrades. (LP: #1009294) + * This reopens bug #978464, which will break Ubuntu 10.04->12.04 upgrades + if user does not opt-in to reinstall grub-pc bootloader when prompted. + + -- Christopher James Halse Rogers Wed, 06 Jun 2012 14:14:48 +1000 + +grub2 (1.99-21ubuntu3.1) precise-proposed; urgency=low + + * Switch to backwards compatible ${} syntax for grub.cfg (LP: #978464) + + -- Dmitrijs Ledkovs Tue, 15 May 2012 09:03:27 -0700 + +grub2 (1.99-21ubuntu3) precise; urgency=low + + * Backport several upstream EFI device discovery patches to fix boot + failures (LP: #975061). + + -- Colin Watson Tue, 17 Apr 2012 16:11:45 +0100 + +grub2 (1.99-21ubuntu2) precise; urgency=low + + [ Andy Whitcroft ] + * Only supply vt.handoff=7 when we are using gfxpayload=keep. Do this + even when the command line is modified before execution. (LP: #942846) + + [ Colin Watson ] + * Don't crash on inaccessible loop device backing paths (LP: #938724). + + -- Colin Watson Thu, 05 Apr 2012 13:36:57 +0100 + +grub2 (1.99-21ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + - Use qemu -no-kvm in tests for now to work around LP #947597. + - Disable cursor as early as possible in grub_main. + + -- Colin Watson Tue, 03 Apr 2012 18:15:58 +0100 + +grub2 (1.99-21) unstable; urgency=low + + * Backport from upstream: + - Fix hook calling for unaligned segments (closes: #666992, + LP: #972250). + + -- Colin Watson Tue, 03 Apr 2012 14:19:18 +0100 + +grub2 (1.99-20ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + - Use qemu -no-kvm in tests for now to work around LP #947597. + - Disable cursor as early as possible in grub_main. + + -- Colin Watson Mon, 02 Apr 2012 22:42:18 +0100 + +grub2 (1.99-20) unstable; urgency=low + + * Backport kFreeBSD support from upstream to 4k_sectors.patch. + + -- Colin Watson Mon, 02 Apr 2012 21:53:02 +0100 + +grub2 (1.99-19) unstable; urgency=low + + [ Colin Watson ] + * Add grub-probe to grub-mount-udeb (LP: #963471). + * Backport from upstream: + - Restore CFLAGS after efiemu check (closes: #665772). + - Include __ctzdi2 and __ctzsi2 from libgcc if present (closes: + #665993). + - Support non-512B sectors and agglomerate reads. + + [ Debconf translations ] + * Croatian (Tomislav Krznar). + + -- Colin Watson Mon, 02 Apr 2012 18:26:09 +0100 + +grub2 (1.99-18ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + - Use qemu -no-kvm in tests for now to work around LP #947597. + - Disable cursor as early as possible in grub_main. + + -- Colin Watson Mon, 19 Mar 2012 20:00:22 +0000 + +grub2 (1.99-18) unstable; urgency=low + + [ Colin Watson ] + * Ensure that /sbin and /usr/sbin are in $PATH when running tests (closes: + #662916). + * mkconfig_loopback.patch: Use different GRUB loop devices for different + OS loop devices (thanks, bcbc; LP: #888281). + * Backport from upstream: + - Add support for LZO compression in btrfs (LP: #727535). + - Fix efiemu configure check. + + [ Ilya Yanok ] + * Backport from upstream: + - Make FAT UUID uppercase to match Linux (LP: #948716). + + [ Debconf translations ] + * Norwegian Bokmål (Hans Fredrik Nordhaug). + * Gujarati (Kartik Mistry). Closes: #663542 + + -- Colin Watson Mon, 19 Mar 2012 18:24:33 +0000 + +grub2 (1.99-17ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + - Use qemu -no-kvm in tests for now to work around LP #947597. + - Disable cursor as early as possible in grub_main. + + -- Colin Watson Tue, 06 Mar 2012 18:42:33 +0000 + +grub2 (1.99-17) unstable; urgency=low + + * efi_disk_cache.patch: Fix incorrect GRUB_DISK_CACHE_BITS (LP: #944347). + + -- Colin Watson Tue, 06 Mar 2012 17:43:42 +0000 + +grub2 (1.99-16ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + * Use qemu -no-kvm in tests for now to work around LP #947597. + * Disable cursor as early as possible in grub_main (LP: #861048). + + -- Colin Watson Tue, 06 Mar 2012 14:06:58 +0000 + +grub2 (1.99-16) unstable; urgency=low + + * Backport from upstream: + - Build with -fno-asynchronous-unwind-tables to save space (closes: + #662787). + + -- Colin Watson Tue, 06 Mar 2012 12:45:42 +0000 + +grub2 (1.99-15) unstable; urgency=low + + [ Adam Conrad ] + * grub.cfg_400.patch: Redirect grep stdout to /dev/null since + grub-mkconfig is "exec > grub.cfg.new", which causes grep's input + and output to be the same FD (LP: #934269) (closes: #652972) + * efi_disk_cache.patch: Bump the disk cache on EFI systems to + dramatically reduce load times for vmlinux/initrd (LP: #944347) + + [ Colin Watson ] + * no_libzfs.patch: Use xasprintf rather than asprintf. + * Backport from upstream: + - Rewrite XFS btree parsing; fixes invalid BMAP (closes: #657776). + - Handle newer autotools, and add some missing quotes in the process. + (Note that this moves grub-mkconfig_lib and update-grub_lib to + /usr/share/grub; I added links in /usr/lib/grub for compatibility.) + - Fix incorrect identifiers in bash-completion (closes: #661415). + - Add support for GRUB_CMDLINE_GNUMACH (closes: #660493). + * Build with GCC 4.6 (closes: #654727). + + [ Debconf translations ] + * Dutch (Jeroen Schot). Closes: #651275 + * Bulgarian (Damyan Ivanov). Closes: #653356 + * Icelandic (Sveinn í Felli). + * Ukrainian (Yatsenko Alexandr). Closes: #654294 + * Italian (Luca Monducci). Closes: #654304 + * Thai (Theppitak Karoonboonyanan). Closes: #656551 + * Uyghur (Abduqadir Abliz) + * Indonesian (Mahyuddin Susanto). Closes: #656705 + * Hebrew (Omer Zak). Closes: #656852 + * Turkish (Atila KOÇ). Closes: #656907 + * Polish (Michał Kułach). Closes: #657265 + * Asturian (Mikel González). + * Dzongkha (Dawa Pemo) + * Tamil (Dr.T.Vasudevan). + * Belarusian (Viktar Siarhiejczyk). Closes: #662615 + + -- Colin Watson Mon, 05 Mar 2012 16:58:01 +0000 + +grub2 (1.99-14ubuntu2) precise; urgency=low + + * no_libzfs.patch: Use xasprintf rather than asprintf. + + -- Colin Watson Mon, 28 Nov 2011 01:37:30 +0000 + +grub2 (1.99-14ubuntu1) precise; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - In recovery mode, add nomodeset to the Linux kernel arguments, and + remove the 'set gfxpayload=keep' command. + - Skip Windows os-prober entries on Wubi systems, and suppress the menu + by default if those are the only other-OS entries. + - Handle probing striped DM-RAID devices. + - Replace 'single' by 'recovery' when friendly-recovery is installed. + + -- Colin Watson Sun, 27 Nov 2011 17:20:49 +0000 + +grub2 (1.99-14) unstable; urgency=low + + * Rewrite no_libzfs.patch using a different approach. (Closes: #648539) + + -- Robert Millan Sun, 13 Nov 2011 00:14:38 +0100 + +grub2 (1.99-13) unstable; urgency=low + + [ Debconf translations ] + * Portuguese (Miguel Figueiredo). Closes: #641226 + * German (Martin Eberhard Schauer). Closes: #641630 + * Sinhala (Danishka Navin). Closes: #644080 + * Uyghur (Gheyret Tohti). Closes: #627011 + + [ Robert Millan ] + * LVM support for GNU/kFreeBSD. + - kfreebsd_lvm.patch + * Cherry-pick several ZFS updates from upstream Bazaar. + - zfs_update.patch + * Build without libzfs. + + -- Robert Millan Fri, 11 Nov 2011 23:04:58 +0100 + +grub2 (1.99-12ubuntu5) oneiric; urgency=low + + * Never use 'set gfxpayload=keep' in recovery mode (LP: #854967). + + -- Colin Watson Sat, 01 Oct 2011 10:30:39 +0100 + +grub2 (1.99-12ubuntu4) oneiric; urgency=low + + * Add ubuntu_recovery_nosingle.patch: + - Replace "single" by "recovery" to trigger friendly-recovery (LP: #575469) + * Mark grub-common as breaking friendly-recovery << 0.2.13 + + -- Stéphane Graber Thu, 15 Sep 2011 16:05:14 -0400 + +grub2 (1.99-12ubuntu3) oneiric; urgency=low + + * Add a GRUB_MOD_LICENSE declaration to hwmatch (LP: #850202). + + -- Colin Watson Thu, 15 Sep 2011 16:18:15 +0100 + +grub2 (1.99-12ubuntu2) oneiric; urgency=low + + * Handle probing striped DM-RAID devices (thanks, Robert Collins; + LP: #803658). + + -- Colin Watson Wed, 14 Sep 2011 13:10:54 +0100 + +grub2 (1.99-12ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - Add nomodeset to Linux kernel arguments in recovery mode. + - Skip Windows os-prober entries on Wubi systems. + * Suppress the menu by default on Wubi systems with no other-OS entries + apart from Windows (LP: #826378). + * Always store hostdisk drive names in canonical form, fixing 'grub-probe + --target=drive' output when device.map is absent (LP: #820500). + + -- Colin Watson Mon, 05 Sep 2011 16:12:50 +0100 + +grub2 (1.99-12) unstable; urgency=low + + [ Robert Millan ] + * Fix grub-probe detection for LSI MegaRAID SAS devices on kFreeBSD. + - kfreebsd_mfi_devices.patch + + [ Colin Watson ] + * Backport from upstream: + - Canonicalise the path argument to grub-probe (closes: #637768). + - Skip */README* as well as README* (LP: #537123). + + -- Colin Watson Mon, 05 Sep 2011 15:17:20 +0100 + +grub2 (1.99-11ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - Add nomodeset to Linux kernel arguments in recovery mode. + - Skip Windows os-prober entries on Wubi systems. + + -- Colin Watson Tue, 09 Aug 2011 13:13:26 +0100 + +grub2 (1.99-11) unstable; urgency=low + + * Backport from upstream: + - Honour GRUB_CMDLINE_LINUX_XEN_REPLACE and + GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT, which replace + GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT (complementing the + existing options which append; closes: #617538). + + -- Colin Watson Mon, 08 Aug 2011 17:55:21 +0100 + +grub2 (1.99-10) unstable; urgency=high + + * Mark la_array as packed. + - zfs_packed_la_array.patch + + -- Robert Millan Sun, 07 Aug 2011 20:16:31 +0000 + +grub2 (1.99-9) unstable; urgency=low + + [ Colin Watson ] + * Adjust apport hook to attach /boot/grub/device.map if it exists. + * Fix regression in gfxterm background_color handling. + * Improve detection of invalid shell syntax in apport hook. + + [ Debconf translations ] + * Esperanto (Felipe E. F. de Castro). Closes: #632157 + * Slovak (Slavko). + + [ Robert Millan ] + * Enable grub-mount on kfreebsd-any. + * Build grub-mount-udeb on kfreebsd-i386 and kfreebsd-amd64. + + -- Robert Millan Mon, 25 Jul 2011 15:36:31 +0200 + +grub2 (1.99-8ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - Add nomodeset to Linux kernel arguments in recovery mode. + * Skip Windows os-prober entries on Wubi systems. + + -- Colin Watson Tue, 21 Jun 2011 13:25:48 +0100 + +grub2 (1.99-8) unstable; urgency=low + + [ Robert Millan ] + * Avoid buggy versions of libgeom-dev (see #630107). Closes: #630197 + * Fix grub-probe detection for ATA devices using `ata' driver on kFreeBSD 9. + - kfreebsd-9_ada_devices.patch + + [ Colin Watson ] + * Update ntldr-img from grub-extras: + - Handle ext3 inode sizes other than 128. + + [ Debconf translations ] + * Kazakh (Baurzhan Muftakhidinov). Closes: #630915 + + -- Colin Watson Tue, 21 Jun 2011 02:10:10 +0100 + +grub2 (1.99-7ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + - Add nomodeset to Linux kernel arguments in recovery mode. + + -- Colin Watson Thu, 16 Jun 2011 01:31:01 +0100 + +grub2 (1.99-7) unstable; urgency=low + + [ Debconf translations ] + * Basque (Iñaki Larrañaga Murgoitio). Closes: #628716 + * Swedish (Martin Bagge / brother). Closes: #628866 + * Czech (Miroslav Kure). Closes: #628978 + * Brazilian Portuguese (Flamarion Jorge). Closes: #629135 + * Spanish (Francisco Javier Cuadrado). Closes: #629633 + + [ Colin Watson ] + * Cope with btrfs / inside an encrypted block device (thanks, alexeagar; + LP: #757631). + * Merge from Ubuntu: + - Give up scanning partitions after ten consecutive open failures + (LP: #787461). + + -- Colin Watson Thu, 16 Jun 2011 00:13:14 +0100 + +grub2 (1.99-6) unstable; urgency=low + + [ Colin Watson ] + * Update Vcs-* fields for Alioth changes. + * Backport from upstream, removing the need for Breaks: udev (<< 168-1): + - Don't stat devices unless we have to. + + [ Debconf translations ] + * Catalan (Jordi Mallach). + * Farsi (Behrad Eslamifar). Closes: #628648 + + -- Colin Watson Tue, 31 May 2011 09:20:54 +0100 + +grub2 (1.99-5) unstable; urgency=low + + [ Colin Watson ] + * Change grub2/linux_cmdline and grub2/kfreebsd_cmdline descriptions to + indicate that the command line is allowed to be empty, since this is a + common source of confusion (thanks, Jordan Uggla). + * On non-Ubuntu-derived systems, add Breaks: udev (<< 168-1) to + grub-common, for the sake of (some?) users without initrds (closes: + #627587). + + [ Debconf translations ] + * French (Christian Perrier) + * Russian (Yuri Kozlov). Closes: #628196 + * Simplified Chinese (YunQiang Su). Closes: #628210 + * Japanese (Hideki Yamane). Closes: #628382 + * Danish (Joe Hansen). Closes: #628427 + + -- Colin Watson Sun, 29 May 2011 21:58:55 +0100 + +grub2 (1.99-4ubuntu2) oneiric; urgency=low + + * Give up scanning partitions after ten consecutive open failures + (LP: #787461). + + -- Colin Watson Fri, 27 May 2011 14:07:30 +0100 + +grub2 (1.99-4ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + * Add nomodeset to Linux kernel arguments in recovery mode, by request of + the X team. + + -- Colin Watson Mon, 23 May 2011 13:55:34 +0100 + +grub2 (1.99-4) unstable; urgency=low + + * Make grub--bin packages depend on grub-common rather than + grub2-common, and add grub2-common dependencies to grub-. + This ensures that grub--bin packages are coinstallable with + grub-legacy, making it easier to use them as build-dependencies. + * Stop trying to install the non-existent grub-ofpathname(8) on sparc for + now. It will exist in the next upstream snapshot. + + -- Colin Watson Thu, 19 May 2011 12:38:45 +0100 + +grub2 (1.99-3) unstable; urgency=low + + * Ship grub-mkrescue on non-Linux amd64/i386 architectures. + * Don't try to ship grub-mkrescue on sparc. + * Drop boot_blocklist_hack.patch, fixed differently upstream some time ago + by being smarter about filesystem-root-relative path conversion. + + -- Colin Watson Wed, 18 May 2011 14:06:51 +0100 + +grub2 (1.99-2ubuntu1) oneiric; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an appropriate background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Update default/grub.md5sum to include maverick's default md5sum. + * Drop grub-rescue-efi-amd64, superseded by grub-efi-amd64-bin. + + -- Colin Watson Tue, 17 May 2011 23:59:10 +0100 + +grub2 (1.99-2) unstable; urgency=low + + * Include both old and new Lintian override styles for + statically-linked-binary tag, since ftp-master has not yet been updated + to 2.5.0~rc1. + + -- Colin Watson Tue, 17 May 2011 01:36:10 +0100 + +grub2 (1.99-1) unstable; urgency=low + + * New upstream release. + - Ensure uniqueness of RAID array numbers even if some elements have a + name (closes: #609804). + - Remove unnecessary brackets from tr arguments (closes: #612564). + - Add grub-mkrescue info documentation (closes: #612585). + - Avoid generating invalid configuration when something that looks like + a Xen hypervisor is present without any Xen kernels (closes: #612898). + - Fix memory alignment when calling 'linux' multiple times on EFI + (closes: #616638). + - Fix grub-install on amd64 EFI systems (closes: #617388). + - Automatically export pager variable (closes: #612995). + - Fix parser error with "time" (closes: #612991). + - Ignore case of bitmap extensions (closes: #611123). + - Skip vmlinux-* on x86 platforms (closes: #536846, #546008). + - Accept old-style Xen kernels (closes: #610428). + - Skip damaged LVM volumes (closes: #544731). + - Handle LVM mirroring (closes: #598441). + - Detect spares and report them as not RAID members (closes: #611561). + - Don't enable localisation unless gfxterm is available (closes: + #604609). + - Fix partitioned RAID support (closes: #595071, #613444). + - Dynamically count the number of lines for the lower banner (closes: + #606494). + - Improve quoting in grub-mkconfig, to support background image file + names containing spaces (closes: #612417). + - Flush BIOS disk devices more accurately (closes: #623124). + - Identify RAID devices by their UUID rather than by their guessed name + (closes: #624232). + - Add "SEE ALSO" sections to most man pages (closes: #551428). + + [ Christian Perrier ] + * Drop extra word in French debconf translation. Thanks to David + Prévôt. + * Fix spelling error in French debconf translation. Thanks to David + Prévôt. + + [ Colin Watson ] + * Set PACKAGE_VERSION and PACKAGE_STRING using configure arguments rather + than sedding configure.ac in debian/rules (which sometimes has annoying + interactions with quilt, etc.). + * Update branch_embed-sectors.patch: + - Detect sector used by HighPoint RAID controller (closes: #394868). + * Add debian/README.source (from quilt). + * Make debian/rules more explicit about when autogen.sh is run. We need + to be careful that all full builds run it, since we use GRUB extras. + * Merge from Ubuntu: + - Handle filesystems loop-mounted on file images. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Add grub-mount-udeb, containing just grub-mount. This can be used by + os-prober and other parts of d-i. + - Artificially bump Replaces: grub-common versioning to account for + grub-reboot/grub-set-default movement in Ubuntu. + * Don't do a separate build pass for grub-common. It will be identical to + the build for the default platform for the CPU architecture anyway, so + reuse that. + * Build with GCC 4.5 on all architectures. + * Update Lintian overrides for changes in Lintian 2.5.0~rc1. + * Invert how files are split among binary packages: rather than code in + debian/rules to remove files we don't want, add dh_install configuration + to declare the files we do want. This means a little more repetition + for platform-specific programs, but it seems less confusing and easier + to extend. + * Drop versioned dependencies on base-files. GPL-3 has been there for two + Debian releases now, and the dependency was never upgrade-critical + anyway. + * Create grub2-common package containing files that are common among GRUB + platform packages but that would break GRUB Legacy, or that are too + confusing when coinstalled with GRUB Legacy (closes: #564167). + * Drop conflict on an ancient (pre-lenny/hardy) version of desktop-base. + * Move /etc/grub.d/05_debian_theme to grub-common, to go with the other + /etc/grub.d/* files. + * Drop redundant Suggests: os-prober from several platform packages, as + grub-common already Recommends: os-prober. + * Create grub--bin packages corresponding to all grub- + packages (except for grub-emu). These do not automatically install the + boot loader or update grub.cfg, and they install their binaries to + /usr/lib/grub/-/; this means that they can be installed + in parallel, making it easier to use them to build GRUB-based disk + images (e.g. d-i). The grub- packages now depend on these and + include symlinks, so their behaviour will remain as before. + * Make grub-emu depend on grub-common. + * Make the documentation directory in most binary packages be a symlink to + that in grub-common. + * Drop lenny compatibility from grub2-common's dpkg/install-info + dependency, since it produces a Lintian warning and using the current + packaging on lenny is probably rather a stretch anyway. + + [ Updated translations ] + * Belarusian (Viktar Siarheichyk). Closes: #606864 + * Danish (Joe Hansen). Closes: #606879 + * Romanian (Andrei POPESCU). Closes: #606888 + * Italian (Luca Monducci). Closes: #606891 + * Brazilian Portuguese (Flamarion Jorge). Closes: #610613 + * Greek (Emmanuel Galatoulas). Closes: #604847 + + -- Colin Watson Mon, 16 May 2011 17:42:07 +0100 + +grub2 (1.99~rc1-13ubuntu3) natty; urgency=low + + * Cherry-pick from upstream: + - Fix grub-install on amd64 EFI systems. + + -- Colin Watson Thu, 21 Apr 2011 12:16:55 +0100 + +grub2 (1.99~rc1-13ubuntu2) natty; urgency=low + + [ Stéphane Graber ] + * Update default/grub.md5sum to include maverick's default md5sum to avoid + prompt during update (LP: #759545). + + [ Colin Watson ] + * Cherry-pick from upstream: + - Support huge btrfs chunks. + - Fix stack pointer handling in 16-bit relocator (LP: #683904). + + -- Colin Watson Thu, 21 Apr 2011 00:11:40 +0100 + +grub2 (1.99~rc1-13ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, just update wubildr rather than asking for an install device. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Add grub-mount-udeb, containing just grub-mount. + * Use /lib/plymouth/themes/default.grub if it exists, rather than + hardcoding an aubergine background (LP: #696915). + + -- Colin Watson Fri, 15 Apr 2011 14:37:43 +0100 + +grub2 (1.99~rc1-13) unstable; urgency=low + + * Cherry-pick from upstream: + - Use correct limits for mips initrd. + * Run grub-install on install or upgrade of grub-yeeloong. + * Update branch_fuse.patch: + - Tell FUSE to run single-threaded, since GRUB code is not thread-safe + (LP: #756297). + + -- Colin Watson Fri, 15 Apr 2011 12:11:21 +0100 + +grub2 (1.99~rc1-12ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, just update wubildr rather than asking for an install device. + - Check hardware support before using gfxpayload=keep. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Add grub-mount-udeb, containing just grub-mount. + * Default to gfxpayload=keep if gfxblacklist.txt is missing (LP: #757603). + * Depend on grub-gfxpayload-lists on i386 and amd64. + + -- Colin Watson Mon, 11 Apr 2011 17:39:23 +0100 + +grub2 (1.99~rc1-12) unstable; urgency=low + + * Update branch_butter.patch: + - Fix filename comparison. + - Take extent offset in account on uncompressed extents. + - Use filled extent size if available. + * Allow use of first sector on btrfs (LP: #757446). + * Merge from Ubuntu: + - Build part_msdos and vfat into EFI boot images (LP: #677758). + + -- Colin Watson Mon, 11 Apr 2011 16:22:08 +0100 + +grub2 (1.99~rc1-11ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Add grub-mount-udeb, containing just grub-mount. + + -- Colin Watson Sun, 10 Apr 2011 23:31:06 +0100 + +grub2 (1.99~rc1-11) unstable; urgency=low + + * Update branch_fuse.patch: + - Make grub-mount exit non-zero if opening the device or filesystem + fails. + - Translate GRUB error codes into OS error codes for FUSE (LP: #756456). + * Merge from Ubuntu: + - Fix use of freed memory when replacing existing loopback device + (LP: #742967). + + -- Colin Watson Sun, 10 Apr 2011 21:52:26 +0100 + +grub2 (1.99~rc1-10ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Fix use of freed memory when replacing existing loopback device. + - Add grub-mount-udeb, containing just grub-mount. + + -- Colin Watson Sun, 10 Apr 2011 00:12:09 +0100 + +grub2 (1.99~rc1-10) unstable; urgency=low + + * Update branch_butter.patch, fixing RAID1/duplicated chunk size + calculation (thanks, Vladimir Serbinenko; LP: #732149). + + -- Colin Watson Sat, 09 Apr 2011 21:22:15 +0100 + +grub2 (1.99~rc1-9ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Fix use of freed memory when replacing existing loopback device. + * Add grub-mount-udeb, containing just grub-mount. This can be used by + os-prober and other parts of d-i. + + -- Colin Watson Sat, 09 Apr 2011 11:33:02 +0100 + +grub2 (1.99~rc1-9) unstable; urgency=low + + * Update branch_parse-color.patch, to blend text when any background is + set as opposed to only when a stretched background is set (closes: + #613120). + * Make update-grub2 a symlink to update-grub, rather than bothering with a + wrapper script. + * Cherry-pick from upstream: + - Check RAID superblock offset (closes: #610184). + - Flush buffer cache on close and not on open (closes: #620663). + - Handle special naming of yeeloong directory (closes: #620420). + * Add grub-mount utility, from the upstream 'fuse' branch. + * efibootmgr is only available on Linux architectures, so only make + grub-efi-ia32 and grub-efi-amd64 depend on it on Linux. + + -- Colin Watson Sat, 09 Apr 2011 03:39:56 +0100 + +grub2 (1.99~rc1-8ubuntu2) natty; urgency=low + + * Make sure to reinstall GRUB on upgrade if Wubi is in use (LP: #742967). + + -- Colin Watson Tue, 05 Apr 2011 19:30:09 +0100 + +grub2 (1.99~rc1-8ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + * Drop patch to use qemu rather than qemu-system-i386, now that qemu-kvm + ships a symlink. + * Rewrite hwmatch.lua in C. Drop lua grub-extras module. + * Update ubuntu_vbe_autodetect.patch, bringing GRUB_GFXMODE documentation + up to date. + * Fix use of freed memory when replacing existing loopback device + (LP: #742967). + + -- Colin Watson Fri, 01 Apr 2011 17:35:59 +0100 + +grub2 (1.99~rc1-8) unstable; urgency=low + + * Cherry-pick from upstream: + - Fix FreeBSD compilation problem. + + -- Colin Watson Tue, 29 Mar 2011 15:13:51 +0100 + +grub2 (1.99~rc1-7) unstable; urgency=low + + * Add /proc/mdstat, LVM information, and listings of /dev/disk/by-id/ and + /dev/disk/by-uuid/ to bug reports, by request of upstream. + * Cherry-pick from upstream: + - Use libgeom on FreeBSD to detect partitions (closes: #612128). + - Copy the partition table zone if floppy support is disabled, even if + no partition table is found (LP: #741867). + - Fix an ext2 overflow affecting inodes past 2TiB. + - Fix RAID-0 disk size calculation for metadata 1.x (LP: #743136). + * Merge from Ubuntu: + - Build with gcc-4.5 on ppc64. + - Add apport hook for ProblemType = 'Package', thanks to Jean-Baptiste + Lallement (LP: #591753). + + -- Colin Watson Tue, 29 Mar 2011 12:30:36 +0100 + +grub2 (1.99~rc1-6ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Build with gcc-4.5 on ppc64. + - Add apport hook for ProblemType = 'Package'. + + -- Colin Watson Fri, 25 Mar 2011 23:44:33 +0000 + +grub2 (1.99~rc1-6) unstable; urgency=low + + * Cherry-pick from upstream: + - Fix crash when extending menu entry line beyond 79 characters (closes: + #615893). + - Account for FreeBSD module headers when calculating allocation size. + - Switch back to framebuffer page zero before loading the kernel + (thanks, Felix Kuehling). + * Merge from Ubuntu: + - If we're upgrading and /boot/grub/core.img doesn't exist, then don't + ask where to install GRUB, since it probably means we're in some kind + of specialised environment such as a live USB stick (LP: #591202). + - Drop the default priority of grub2/linux_cmdline to medium. We only + need to ask it if we're upgrading from GRUB Legacy and found an empty + kopt in menu.lst (LP: #591202). + * Update branch_embed-sectors.patch, avoiding consuming lots of space and + time if the first partition is not near the start of the disk (closes: + #619458, LP: #691569). + + -- Colin Watson Fri, 25 Mar 2011 19:23:04 +0000 + +grub2 (1.99~rc1-5ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Don't ask where to install if upgrading and core.img doesn't exist. + - Drop the default priority of grub2/linux_cmdline to medium. + - Build with gcc-4.5 on ppc64. + - Add apport hook for ProblemType = 'Package'. + + -- Colin Watson Wed, 23 Mar 2011 23:51:04 +0000 + +grub2 (1.99~rc1-5) unstable; urgency=low + + * Update debian/legacy/update-grub to the version from grub 0.97-65. + * Mark binary packages as Multi-Arch: foreign (for example, an amd64 + kernel installed on an i386 system could use the native architecture's + GRUB). + * Rewrite find_root_device_from_mountinfo to cope with move-mounts + (LP: #738345). + + [ Updated translations ] + * Esperanto (Felipe Castro). Closes: #606524 + * Thai (Theppitak Karoonboonyanan). Closes: #607706 + + -- Colin Watson Wed, 23 Mar 2011 15:51:47 +0000 + +grub2 (1.99~rc1-4ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Don't ask where to install if upgrading and core.img doesn't exist. + - Drop the default priority of grub2/linux_cmdline to medium. + - Build with gcc-4.5 on ppc64. + - Add apport hook for ProblemType = 'Package'. + + -- Colin Watson Tue, 15 Mar 2011 13:47:34 +0000 + +grub2 (1.99~rc1-4) unstable; urgency=low + + * Don't touch /boot/grub/grub2-installed if using the --root-directory + option to grub-install (thanks, Nicolas George; closes: #614927). + * Update branch_devmapper.patch, adding partitioned MD RAID support + (untested) and support for probing multipath disks. + * Update ntldr-img from grub-extras: + - Only call ntfs_fix_mmft if the attribute to find is AT_DATA. This + matches GRUB's NTFS module. + - Install grubinst as grub-ntldr-img. + * Fix loading GRUB from lnxboot (LP: #693671). + * Update branch_embed-sectors.patch to avoid straying into first partition + when embedding-area sectors are in use (closes: #613409, LP: #730225). + + -- Colin Watson Tue, 15 Mar 2011 11:01:48 +0000 + +grub2 (1.99~rc1-3ubuntu5) natty; urgency=low + + * Fix loading GRUB from lnxboot (LP: #693671). + + -- Colin Watson Fri, 11 Mar 2011 13:38:53 +0000 + +grub2 (1.99~rc1-3ubuntu4) natty; urgency=low + + * debian/grub-common.install, debian/apport/source_grub2.py: add + apport hook for ProblemType = 'Package', thanks to Jean-Baptiste + Lallement (LP: #591753). + + -- Kees Cook Thu, 10 Mar 2011 14:52:27 -0800 + +grub2 (1.99~rc1-3ubuntu3) natty; urgency=low + + * Blacklist 1440x900x32 from VBE preferred mode handling until a better + solution is available (LP: #701111). + + -- Colin Watson Fri, 04 Mar 2011 15:29:44 +0000 + +grub2 (1.99~rc1-3ubuntu2) natty; urgency=low + + * Build with gcc-4.5 on ppc64. + + -- Colin Watson Mon, 21 Feb 2011 17:59:20 +0000 + +grub2 (1.99~rc1-3ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Don't ask where to install if upgrading and core.img doesn't exist. + - Drop the default priority of grub2/linux_cmdline to medium. + + -- Colin Watson Mon, 21 Feb 2011 16:46:49 +0000 + +grub2 (1.99~rc1-3) unstable; urgency=low + + * Build for ppc64 (except for grub-emu, which doesn't build cleanly yet). + * Suppress output from debconf-communicate in upgrade-from-grub-legacy. + * Refer to the info documentation at the top of /etc/default/grub (closes: + #612538). + * We need at least freebsd-utils (>= 8.0-4) on kFreeBSD architectures for + camcontrol, so depend on it. + * Tolerate camcontrol failing to read capacity of IDE devices, until such + time as we know how to do this properly (see #612128). + * Adjust /etc/default/grub for rename of GRUB_DISABLE_LINUX_RECOVERY to + GRUB_DISABLE_RECOVERY (closes: #612777). + * Update ntldr-img from grub-extras: + - Install g2hdr.bin and g2ldr.mbr (closes: #613245). + + -- Colin Watson Wed, 16 Feb 2011 13:11:11 +0000 + +grub2 (1.99~rc1-2ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + - Don't ask where to install if upgrading and core.img doesn't exist. + - Drop the default priority of grub2/linux_cmdline to medium. + * Fix quoting glitch in ubuntu_gfxpayload_filter.patch. + + -- Colin Watson Tue, 08 Feb 2011 12:42:13 +0000 + +grub2 (1.99~rc1-2) unstable; urgency=low + + * Merge 1.98+20100804-13 and 1.98+20100804-14, updating translations: + - Kazakh (Baurzhan Muftakhidinov / Timur Birsh). + * mkconfig_skip_dmcrypt.patch: Refer to GRUB_PRELOAD_MODULES rather than + suggesting people write a /etc/grub.d/01_modules script (thanks, Jordan + Uggla). + * Handle empty dir passed to grub_find_root_device_from_mountinfo; fixes + grub-mkrelpath on btrfs subvolumes (LP: #712029). + * Add rootflags=subvol= if / is on a btrfs subvolume (LP: #712029). + * Upload to unstable. + + -- Colin Watson Tue, 08 Feb 2011 11:39:26 +0000 + +grub2 (1.99~rc1-1ubuntu2) natty; urgency=low + + * Don't add vt.handoff=7 if splash isn't going to be used (LP: #700686). + + -- Colin Watson Fri, 21 Jan 2011 14:43:05 +0000 + +grub2 (1.99~rc1-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + * Fix logic error in VBE resolution detection that meant EDID information + was never used (LP: #693093). + * Export linux_gfx_mode so that it's usable in submenus (LP: #702594). + * Restore grub_mkdevicemap and associated options to grub-install, since + it's needed when doing EFI installs (thanks, Jason Gunthorpe; + LP: #702707). + * Don't fail when there are no *.lua files in $pkglibdir (thanks, Jason + Gunthorpe; LP: #702707). + * If we're upgrading and /boot/grub/core.img doesn't exist, then don't ask + where to install GRUB, since it probably means we're in some kind of + specialised environment such as a live USB stick (LP: #591202). + * Drop the default priority of grub2/linux_cmdline to medium. We only + need to ask it if we're upgrading from GRUB Legacy and found an empty + kopt in menu.lst (LP: #591202). + + -- Colin Watson Thu, 20 Jan 2011 15:02:53 +0000 + +grub2 (1.99~rc1-1) experimental; urgency=low + + [ Colin Watson ] + * New upstream release candidate. + + [ Alexander Kurtz ] + * 05_debian_theme: + - If we find a background image and no colours were specified, use + upstream defaults for color_normal and color_highlight rather than + setting color_normal to black/black. + - Make the code more readable by replacing code for handling + alternatives. + - Make the code for searching for pictures in /boot/grub more readable + and robust (for example against newlines in the filename). + - Don't try the other alternatives when $GRUB_BACKGROUND is set; you can + now add GRUB_BACKGROUND= to /etc/default/grub to force no background + image (closes: #608263). + + -- Colin Watson Mon, 17 Jan 2011 13:43:06 +0000 + +grub2 (1.99~20110112-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + + -- Colin Watson Thu, 13 Jan 2011 08:58:59 -0600 + +grub2 (1.99~20110112-1) experimental; urgency=low + + * New Bazaar snapshot. + - Disable ieee1275_fb on sparc (closes: #560823). + - Fix pf2 font generation on big-endian platforms (closes: #609818). + * branch_butter.patch: Resolve the device returned by + grub_find_root_device_from_mountinfo or find_root_device_from_libzfs + using grub_find_device (closes: #609590, #609814, LP: #700147). + + -- Colin Watson Thu, 13 Jan 2011 00:12:41 +0000 + +grub2 (1.99~20110111-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + + -- Colin Watson Tue, 11 Jan 2011 16:39:18 -0600 + +grub2 (1.99~20110111-1) experimental; urgency=low + + * New Bazaar snapshot. + - Don't check amount of low memory, as reportedly INT 12h can be broken + and if low memory is too low we wouldn't have gotten into + grub_machine_init anyway (closes: #588293, LP: #513528). + - Submenu default support (LP: #691878). + - Fix optimisation-dependent grub-mklayout crash (closes: #609584). + * branch_butter.patch: Don't free an uninitialised pointer if /proc is + unmounted (LP: #697493). + * Add a po/LINGUAS file listing the translations we've synced from the TP + (closes: #609671). + + -- Colin Watson Tue, 11 Jan 2011 17:11:44 +0000 + +grub2 (1.99~20110106-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + + -- Colin Watson Fri, 07 Jan 2011 14:04:23 +0000 + +grub2 (1.99~20110106-1) experimental; urgency=low + + * New Bazaar snapshot. + - Check that named RAID array devices exist before using them (closes: + #606035). + - Clear terminfo output on initialisation (closes: #569678). + - Fix grub-probe when btrfs is on / without a separate /boot. + + -- Colin Watson Thu, 06 Jan 2011 13:38:57 +0000 + +grub2 (1.99~20110104-2ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel option. + - Bypass menu unless other OSes are installed or Shift is pressed. + - Allow Shift to interrupt 'sleep --interruptible'. + - Reduce visual clutter in normal mode. + - Remove verbose messages printed before reading configuration. + - Suppress kernel/initrd progress messages, except in recovery mode. + - Handle filesystems loop-mounted on file images. + - Ignore devices loop-mounted from files in Linux grub.d scripts. + - Show the boot menu if the previous boot failed. + - Don't generate device.map during grub-install or grub-mkconfig. + - Adjust upgrade version checks for Ubuntu. + - Suppress "GRUB loading" message unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack first. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - Enable lua from grub-extras. + - Incorporate the bitop library into lua. + - Add enum_pci function to grub module in lua. + - Check hardware support before using gfxpayload=keep. + - Build part_msdos and vfat into EFI boot images. + - Put second and subsequent Linux menu entries in a submenu. + - Preferred resolution detection for VBE. + - Set vt.handoff=7 for smooth handoff to kernel graphical mode. + * Update Ubuntu patch tags to DEP-3. + + -- Colin Watson Wed, 05 Jan 2011 17:28:55 +0000 + +grub2 (1.99~20110104-2) experimental; urgency=low + + * Support long command lines as per the 2.06 Linux boot protocol, from the + upstream 'longlinuxcmd' branch. + * Add a background_color command, from the upstream 'parse-color' branch. + * Update branch_devmapper.patch, adding a #include to fix a build failure + on Ubuntu amd64. + * When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a number of known signatures, from the upstream + 'embed-sectors' branch. + + -- Colin Watson Wed, 05 Jan 2011 13:31:05 +0000 + +grub2 (1.99~20110104-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Put second and subsequent Linux menu entries in a submenu. + - Add a background_color command. + - Add preferred resolution detection for VBE. GRUB_GFXMODE now defaults + to "auto". + - Set vt.handoff=7 for as smooth a handoff as possible to kernel + graphical mode. + * Drop patch to disable video_bochs and video_cirrus on PC BIOS systems; + PCI probing should be fixed now. + + -- Colin Watson Tue, 04 Jan 2011 18:42:36 +0000 + +grub2 (1.99~20110104-1) experimental; urgency=low + + * New Bazaar snapshot. + - Don't emit drivemap directive for Windows Server 2008 (closes: + #607687). + - Don't add spurious RAID array members (closes: #605357). + - Improve presentation of Xen menu entries (closes: #607867). + - Fix PCI probing hangs by skipping remaining functions on devices that + do not implement function 0 (closes: #594967). + - Fix typo in descriptions of extract_legacy_entries_source and + extract_legacy_entries_configfile (LP: #696721). + * Merge 1.98+20100804-12: + - Use semicolons rather than commas to separate size from model in + debconf disk and partition descriptions. + * Add full btrfs support, from the upstream 'butter' branch. + * Support partitioned loop devices and improve devmapper support, from the + upstream 'devmapper' branch. + * Add squashfs 4 support, from the upstream 'squash' branch. + + -- Colin Watson Tue, 04 Jan 2011 16:12:45 +0000 + +grub2 (1.99~20101221-1ubuntu2) natty; urgency=low + + * Refresh Ubuntu patches so that they actually apply. Whoops. + + -- Colin Watson Tue, 21 Dec 2010 19:43:19 +0000 + +grub2 (1.99~20101221-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian experimental. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme and an aubergine background for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + - Downgrade "ACPI shutdown failed" error to a debug message, since it + can cause spurious test failures. + - Put second and subsequent Linux menu entries in a submenu. + - Add a background_color command. + - Add preferred resolution detection for VBE. GRUB_GFXMODE now defaults + to "auto". + - Set vt.handoff=7 for as smooth a handoff as possible to kernel + graphical mode. + + -- Colin Watson Tue, 21 Dec 2010 19:17:50 +0000 + +grub2 (1.99~20101221-1) experimental; urgency=low + + * New Bazaar snapshot. + - Initialise next pointer when creating multiboot module (closes: + #605567). + - Fix gettext quoting to work with bash as /bin/sh, and make echo + UTF-8-clean so that (at least) Catalan boot messages are displayed + properly (closes: #605615). + - Fix use of uninitialised memory in Reed-Solomon recovery code + (LP: #686705). + + -- Colin Watson Tue, 21 Dec 2010 17:43:52 +0000 + +grub2 (1.99~20101210-2) experimental; urgency=low + + * Automatically remove MD devices from device.map on upgrade, since the + BIOS cannot read from these and including them in device.map will break + GRUB's ability to read from such devices (LP: #690030). + * Merge 1.98+20100804-9, 1.98+20100804-10, and 1.98+20100804-11: + - Apply debconf template review by debian-l10n-english and mark several + more strings for translation, thanks to David Prévot and Justin B Rye. + - Incorporate rewritten 05_debian_theme by Alexander Kurtz, which works + when /usr is inaccessible by GRUB. + + -- Colin Watson Sun, 19 Dec 2010 13:25:14 +0000 + +grub2 (1.99~20101210-1ubuntu2) natty; urgency=low + + * Use /boot/grub/gfxblacklist.txt for gfxpayload=keep blacklisting rather + than /boot/grub/gfxblacklist.lst, since *.lst files are handled by + grub-install and this turns out to be inconvenient. + + -- Colin Watson Thu, 16 Dec 2010 14:37:30 +0000 + +grub2 (1.99~20101210-1ubuntu1) natty; urgency=low + + [ Colin Watson ] + * Resynchronise with Debian experimental. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + - Downgrade "ACPI shutdown failed" error to a debug message, since it + can cause spurious test failures. + - Put second and subsequent Linux menu entries in a submenu. + * Add a background_color command. + * Disable lua enum_pci on ieee1275 platforms, where isn't + available. + * Add preferred resolution detection for VBE. GRUB_GFXMODE now defaults + to "auto". + * Set an aubergine background, and set vt.handoff=7 for as smooth a + handoff as possible to kernel graphical mode (LP: #386047). + + [ Mario Limonciello ] + * grub-mkrescue efi amd64 images: + When searching for .disk/info, set the 'root' parameter as the regular + search requires the variable being set as an argument. + + -- Colin Watson Wed, 15 Dec 2010 13:54:16 +0000 + +grub2 (1.99~20101210-1) experimental; urgency=low + + * New Bazaar snapshot. + - ZFS moved into grub-core. + - Extend gettext to fall back from ll_CC to ll, and set lang to include + country part by default so that Chinese works (LP: #686788). + * Remove grub-mknetdir from grub-emu. + * Exit silently from zz-update-grub kernel hook if update-grub does not + exist (e.g. if grub-pc has been removed but not purged; closes: + #606184). + + -- Colin Watson Sat, 11 Dec 2010 01:22:26 +0000 + +grub2 (1.99~20101126-1ubuntu3) natty; urgency=low + + * Remove grub-mknetdir from grub-emu (LP: #683130). + + -- Colin Watson Fri, 03 Dec 2010 12:33:19 +0000 + +grub2 (1.99~20101126-1ubuntu2) natty; urgency=low + + * Simplify the auto-generated menu entries for Linux to avoid using + syntax not supported by older GRUB releases. + + -- Evan Broder Tue, 30 Nov 2010 03:08:36 +0000 + +grub2 (1.99~20101126-1ubuntu1) natty; urgency=low + + * Resynchronise with Debian experimental. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + - Downgrade "ACPI shutdown failed" error to a debug message, since it + can cause spurious test failures. + * Put second and subsequent Linux menu entries in a submenu (LP: #540452). + * Don't check the device abstraction before probing all devices, and + restore the normal reinitialisation of LVM and RAID in grub-probe; this + broke RAID probing when a device map exists (LP: #681535). + + -- Colin Watson Fri, 26 Nov 2010 14:34:13 +0000 + +grub2 (1.99~20101126-1) experimental; urgency=low + + * New Bazaar snapshot (mipsel build fix, LVM-on-RAID probing fix). + * Fix comma-separation in handling of grub-pc/install_devices. + + -- Colin Watson Fri, 26 Nov 2010 13:08:52 +0000 + +grub2 (1.99~20101124-1ubuntu1) natty; urgency=low + + [ Colin Watson ] + * Resynchronise with Debian experimental. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + * Downgrade "ACPI shutdown failed" error to a debug message, since it can + cause spurious test failures. + + [ Evan Broder ] + * Enable lua from grub-extras. + * Incorporate the bitop library into lua. + * Add enum_pci function to grub module in lua. + * Switch back to gfxpayload=keep by default, unless the video hardware + is known to not support it. + + [ Mario Limonciello ] + * Built part_msdos and vfat into bootx64.efi (LP: #677758) + + -- Colin Watson Wed, 24 Nov 2010 13:59:55 +0000 + +grub2 (1.99~20101124-1) experimental; urgency=low + + * New Bazaar snapshot (command priorities, build fixes, grub-mkdevicemap + segfault). + * Don't try to build grub-efi-amd64 on kfreebsd-i386 or hurd-i386 + (requires gcc-4.4-multilib). + + -- Colin Watson Wed, 24 Nov 2010 12:12:33 +0000 + +grub2 (1.99~20101123-1) experimental; urgency=low + + * New Bazaar snapshot (build fixes). + * Build-depend on qemu-utils and parted on non-Hurd architectures. + * qemu_img_exists.patch: Skip partmap test if qemu-img doesn't exist (as + is the case on the Hurd). + * Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + * Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ (where is an + identifier based on GRUB_DISTRIBUTOR, e.g. 'debian') already exists. + * Re-expand a couple of dpkg architecture wildcards to exclude certain + special cases: gcc-4.4-multilib is not available on kfreebsd-i386 or + hurd-i386, and qemu-system is not available on hurd-i386. + + -- Colin Watson Tue, 23 Nov 2010 10:51:23 +0000 + +grub2 (1.99~20101122-1) experimental; urgency=low + + [ Colin Watson ] + * New Bazaar snapshot. Too many changes to list in full, but some of the + more user-visible ones are as follows: + - GRUB script: + + Function parameters, "break", "continue", "shift", "setparams", + "return", and "!". + + "export" command supports multiple variable names. + + Multi-line quoted strings support. + + Wildcard expansion. + - sendkey support. + - USB hotunplugging and USB serial support. + - Rename CD-ROM to cd on BIOS. + - Add new --boot-directory option to grub-install, grub-reboot, and + grub-set-default; the old --root-directory option is still accepted + but was often confusing. + - Basic btrfs detection/UUID support (but no file reading yet). + - bash-completion for utilities. + - If a device is listed in device.map, always assume that it is + BIOS-visible rather than using extra layers such as LVM or RAID. + - Add grub-mknetdir script (closes: #550658). + - Remove deprecated "root" command. + - Handle RAID devices containing virtio components. + - GRUB Legacy configuration file support (via grub-menulst2cfg). + - Keyboard layout support (via grub-mklayout and grub-kbdcomp). + - Check generated grub.cfg for syntax errors before saving. + - Pause execution for at most ten seconds if any errors are displayed, + so that the user has a chance to see them. + - Support submenus. + - Write embedding zone using Reed-Solomon, so that it's robust against + being partially overwritten (closes: #550702, #591416, #593347). + - GRUB_DISABLE_LINUX_RECOVERY and GRUB_DISABLE_NETBSD_RECOVERY merged + into a single GRUB_DISABLE_RECOVERY variable. + - Fix loader memory allocation failure (closes: #551627). + - Don't call savedefault on recovery entries (closes: #589325). + - Support triple-indirect blocks on ext2 (closes: #543924). + - Recognise DDF1 fake RAID (closes: #603354). + + [ Robert Millan ] + * Use dpkg architecture wildcards. + + [ Updated translations ] + * Slovenian (Vanja Cvelbar). Closes: #604003 + * Dzongkha (dawa pemo via Tenzin Dendup). Closes: #604102 + + -- Colin Watson Mon, 22 Nov 2010 12:24:56 +0000 + +grub2 (1.98+20100804-14) unstable; urgency=low + + [ Updated translations ] + * Kazakh (Baurzhan Muftakhidinov / Timur Birsh). Closes: #609187 + + [ Alexander Kurtz ] + * 05_debian_theme: + - If we find a background image and no colours were specified, use + upstream defaults for color_normal and color_highlight rather than + setting color_normal to black/black. + - Don't try the other alternatives when $GRUB_BACKGROUND is set; you can + now add GRUB_BACKGROUND= to /etc/default/grub to force no background + image (closes: #608263). + + -- Colin Watson Mon, 17 Jan 2011 23:19:38 +0000 + +grub2 (1.98+20100804-13) unstable; urgency=low + + * Backport from upstream: + - Don't add spurious RAID array members (closes: #605357). + + -- Colin Watson Tue, 04 Jan 2011 14:07:14 +0000 + +grub2 (1.98+20100804-12) unstable; urgency=low + + * Backport from upstream: + - Support big ext2 files (closes: #543924). + - Fix gettext quoting to work with bash as /bin/sh, and make echo + UTF-8-clean so that (at least) Catalan boot messages are displayed + properly (closes: #605615). + - Initialise next pointer when creating multiboot module (closes: + #605567). + - Fix PCI probing hangs by skipping remaining functions on devices that + do not implement function 0 (closes: #594967). + * Use semicolons rather than commas to separate size from model in debconf + disk and partition descriptions; commas are too easily confused with the + multiselect choice separator, and in particular make it impossible to + answer questions properly in the editor frontend (closes: #608449). + Unfuzzy all translations where possible. + + -- Colin Watson Tue, 04 Jan 2011 00:42:29 +0000 + +grub2 (1.98+20100804-11) unstable; urgency=low + + * Exit silently from zz-update-grub kernel hook if update-grub does not + exist (e.g. if grub-pc has been removed but not purged; closes: + #606184). + * Apply debconf template review by debian-l10n-english and mark several + more strings for translation, thanks to David Prévot and Justin B Rye + (closes: #605748). + * Unfuzzy some translations that were not updated in this round (thanks, + David Prévot; closes: #606921). + * Incorporate rewritten 05_debian_theme by Alexander Kurtz, which works + when /usr is inaccessible by GRUB (closes: #605705). + * Backport from upstream: + - Recognise DDF1 DM-RAID (closes: #603354). + + [ Updated translations ] + * Chinese (YunQiang Su). Closes: #606426 + * Indonesian (Arief S Fitrianto). Closes: #606431 + * Slovenian (Vanja Cvelbar). Closes: #606445 + * Swedish (Martin Bagge / brother). Closes: #606455 + * Ukrainian (Yatsenko Alexandr). Closes: #606538 + * Basque (Iñaki Larrañaga Murgoitio). Closes: #606644 + * Slovak (Slavko). Closes: #606663 + * Catalan (Jordi Mallach). + * Bulgarian (Damyan Ivanov). Closes: #606452 + * Persian (Morteza Fakhraee). Closes: #606672 + * Russian (Yuri Kozlov). Closes: #606753 + * Dutch (Paul Gevers). Closes: #606807 + * Japanese (Hideki Yamane). Closes: #606836 + * French (Christian Perrier). Closes: #606842 + * Czech (Miroslav Kure). Closes: #606854 + * Spanish (Francisco Javier Cuadrado). Closes: #606903 + * Portuguese (Tiago Fernandes / Miguel Figueiredo). Closes: #606908 + * German (Martin Eberhard Schauer). Closes: #606896 + + -- Colin Watson Sat, 18 Dec 2010 17:20:09 +0000 + +grub2 (1.98+20100804-10) unstable; urgency=low + + * fix_crash_condition_in_kfreebsd_loader.patch: Import from upstream. + Fixes crash condition in case kfreebsd_* commands are used after + kfreebsd has (gracefully) failed. + + -- Robert Millan Tue, 30 Nov 2010 19:40:11 +0100 + +grub2 (1.98+20100804-9) unstable; urgency=low + + [ Robert Millan ] + * Import from upstream: + - refuse_embedingless_cross_disk.patch: Refuse to do a cross-disk + embeddingless install rather than creating a broken install. + - fix_grub_install_error_msg.patch: Replace useless recomendation to + pass --modules with a recomendation to report a bug. + - message_refresh.patch: Make error messages visible again. (Closes: #605485) + + [ Jordi Mallach ] + * Update Catalan translation with latest file from the Translation Project. + + [ Updated translations ] + * Slovenian (Vanja Cvelbar). Closes: #604003 + * Dzongkha (dawa pemo via Tenzin Dendup). Closes: #604102 + + -- Robert Millan Tue, 30 Nov 2010 15:44:02 +0100 + +grub2 (1.98+20100804-8) unstable; urgency=low + + [ Robert Millan ] + * increase_disk_limit.patch: Increase SCSI/IDE disk limits to cope with + Sun Fire X4500. + * linux_mdraid_1x.patch: Support for Linux MD RAID v1.x. (Closes: #593652) + * yeeloong_boot_info.patch: On Yeeloong, pass machine type information + to Linux. + + [ Updated translations ] + * Portuguese fixed by Christian Perrier (variable names + were translated) + + -- Robert Millan Fri, 05 Nov 2010 23:43:15 +0100 + +grub2 (1.98+20100804-7ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - Extend EFI initialisation code to understand (,$partition)-style + prefixes. If the EFI System Partition is on the same disk as + /boot/grub, use this rather than allowing GRUB to set the prefix to + the EFI System Partition by default. + - Handle partition devices without corresponding disk devices. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + + -- Colin Watson Sun, 24 Oct 2010 20:34:29 +0100 + +grub2 (1.98+20100804-7) unstable; urgency=low + + [ Robert Millan ] + * zfs_fix_mkrelpath.patch: Replace with proper fix from upstream Bazaar. + (Closes: #601087) + + [ Updated translations ] + * Vietnamese (Clytie Siddall). Closes: #598327 + * Icelandic (Sveinn í Felli). Closes: #600126 + + -- Robert Millan Sun, 24 Oct 2010 16:35:37 +0200 + +grub2 (1.98+20100804-6ubuntu1) natty; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - Extend EFI initialisation code to understand (,$partition)-style + prefixes. If the EFI System Partition is on the same disk as + /boot/grub, use this rather than allowing GRUB to set the prefix to + the EFI System Partition by default. + - Handle partition devices without corresponding disk devices. + - On Wubi, don't ask for an install device, but just update wubildr + using the diverted grub-install. + - When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures. + - Disable video_bochs and video_cirrus on PC BIOS systems, as probing + PCI space seems to break on some systems. + + -- Colin Watson Fri, 22 Oct 2010 12:50:13 +0100 + +grub2 (1.98+20100804-6) unstable; urgency=low + + [ Robert Millan ] + * zfs_v23.patch: Accept ZFS up to v23 (no changes required). + * fix_usb_boot.patch: Fix boot on USB devices, for BIOSes that + expose them as floppies. (Closes: #600580) + * zfs_fix_mkrelpath.patch: Fix grub-mkrelpath for non-root ZFS. + (Closes: #600578) + + [ Updated translations ] + * Kazakh (kk.po) by Baurzhan Muftakhidinov via Timur Birsh (closes: + #598188). + * Portuguese (pt.po) by Tiago Fernandes via Rui Branco (closes: #599767). + * Catalan (ca.po) by Jordi Mallach. + + -- Robert Millan Thu, 21 Oct 2010 23:45:23 +0200 + +grub2 (1.98+20100804-5ubuntu3) maverick; urgency=low + + * Improve message if too many embedding area sectors need to be avoided + (thanks, Vladimir Serbinenko). + * Expand on "sector already in use" message to note that the software in + question may cause other problems and suggest reporting a bug (thanks, + Vladimir Serbinenko). + * Disable video_bochs and video_cirrus on PC BIOS systems, as probing PCI + space seems to break on some systems (LP: #641259). + + -- Colin Watson Wed, 06 Oct 2010 11:55:58 +0100 + +grub2 (1.98+20100804-5ubuntu2) maverick; urgency=low + + * When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of a list of known signatures (mitigates LP + #441941; more work may be required). + + -- Colin Watson Mon, 27 Sep 2010 18:42:42 +0100 + +grub2 (1.98+20100804-5ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb. + - Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image + for EFI-AMD64. + - Extend EFI initialisation code to understand (,$partition)-style + prefixes. If the EFI System Partition is on the same disk as + /boot/grub, use this rather than allowing GRUB to set the prefix to + the EFI System Partition by default. + - Handle partition devices without corresponding disk devices. + * Extend ubuntu_linux_no_loopmount.patch to ignore devices loop-mounted + from files in /etc/grub.d/20_linux_xen as well as /etc/grub.d/10_linux, + quelling a warning message on Wubi. + * On Wubi, don't ask for an install device, but just update wubildr using + the diverted grub-install (LP: #581760). + + -- Colin Watson Mon, 20 Sep 2010 09:13:08 +0100 + +grub2 (1.98+20100804-5) unstable; urgency=low + + [ Updated translations ] + * Hebrew (he.po) by Omer Zak and Lior Kaplan (closes: #593855). + * Romanian (ro.po) by ioan-eugen STAN (closes: #595727). + * Esperanto (eo.po) by Felipe Castro (closes: #596171). + + [ Colin Watson ] + * Make grub-efi-amd64 conflict with grub-pc as well as the other way + round. + * Backport upstream patches to fix DM-RAID support (closes: #594221, + LP: #634840). + + [ Robert Millan ] + * enable_zfs.patch: Fix grub-fstest build problem. + * zfs_fix_label_arg.patch: Fix kfreebsd_device initialization on ZFS + for non-main filesystems. + + -- Colin Watson Fri, 17 Sep 2010 23:45:10 +0100 + +grub2 (1.98+20100804-4ubuntu6) maverick; urgency=low + + * Handle partition devices without corresponding disk devices + (LP: #623609). + + -- Colin Watson Fri, 10 Sep 2010 18:35:49 +0100 + +grub2 (1.98+20100804-4ubuntu5) maverick; urgency=low + + [ Colin Watson ] + * Make grub-efi-amd64 conflict with grub-pc as well as the other way round + (LP: #632642). + * Extend EFI initialisation code to understand (,$partition)-style + prefixes. If the EFI System Partition is on the same disk as + /boot/grub, use this rather than allowing GRUB to set the prefix to the + EFI System Partition by default (LP: #632775). (If they're on different + disks, grub-install already used a UUID to find /boot/grub.) + + [ Mario Limonciello ] + * Modify ubuntu_efi_install to check for case-insensitive EFI distributor. + (LP: #632706) + + -- Colin Watson Wed, 08 Sep 2010 13:41:18 +0100 + +grub2 (1.98+20100804-4ubuntu4) maverick; urgency=low + + * Adjust the EFI-AMD64 rescue CD image to find itself at boot time by + looking for /.disk/info, rather than by UUID. This is a temporary + measure to allow parts of this image to be incorporated into other CD + images. + + -- Colin Watson Wed, 25 Aug 2010 22:58:53 +0100 + +grub2 (1.98+20100804-4ubuntu3) maverick; urgency=low + + * Build-depend on mtools for grub-rescue-efi-amd64 build. + * Only build grub-rescue-efi-amd64 on architectures where we build + grub-efi-amd64. + + -- Colin Watson Wed, 25 Aug 2010 15:23:31 +0100 + +grub2 (1.98+20100804-4ubuntu2) maverick; urgency=low + + * Add a grub-rescue-efi-amd64 package containing a rescue CD-ROM image for + EFI-AMD64. For the moment, the purpose of this is mainly to deliver + files to debian-installer. + + -- Colin Watson Wed, 25 Aug 2010 13:45:56 +0100 + +grub2 (1.98+20100804-4ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb. + * Go back to gfxpayload=text by default for Ubuntu 10.10, as the kernel + needs more work to avoid lockups with some video cards + (LP: #605614, #608429, #612626). + + -- Colin Watson Mon, 23 Aug 2010 13:11:28 +0100 + +grub2 (1.98+20100804-4) unstable; urgency=low + + [ Updated translations ] + * Italian (it.po) by Luca Monducci (closes: #593685). + * Finnish (fi.po) by Esko Arajärvi (closes: #593921). + + [ Colin Watson ] + * Run update-grub from kernel hooks if DEB_MAINT_PARAMS is unset, for + compatibility with old kernel packages. This may produce duplicate runs + of update-grub, but that's better than not running it at all (closes: + #594037). + + -- Colin Watson Mon, 23 Aug 2010 12:11:55 +0100 + +grub2 (1.98+20100804-3) unstable; urgency=low + + [ Updated translations ] + * Brazilian Portuguese (pt_BR.po) by Flamarion Jorge (closes: #592156). + * Asturian (ast.po) by Maacub (closes: #592313). + * Galician (gl.po) by Jorge Barreiro (closes: #592816). + + [ Robert Millan ] + * Backport ZFS bugfixes from upstream Bazaar: + - zfs_fix_chroot.patch: Fix breakage when running grub-probe inside chroot. + - zfs_fix_label_arg.patch: Fix grub-probe fs_label argument. + - zfs_fix_pathname.patch: Fix pathname for non-root ZFS filesystems. + - zfs_fix_segfault.patch: Fix segfault when /dev is not mounted. + + [ Colin Watson ] + * Escape single quotes when removing them from $mode in zz-update-grub, so + that this works when /bin/sh is bash (thanks, Will Dyson; closes: + #593242). + * Add support for ext2 root on GNU/kFreeBSD (thanks, Aurelien Jarno; + closes: #593467). + + -- Colin Watson Thu, 19 Aug 2010 18:21:45 +0100 + +grub2 (1.98+20100804-2) unstable; urgency=low + + [ Colin Watson ] + * Make /etc/kernel/postrm.d/zz-update-grub a real file rather than a + symlink (closes: #592076). + + [ Updated translations ] + * Norwegian Bokmål (nb.po) by Hans Nordhaug (closes: #591569). + + -- Colin Watson Sat, 07 Aug 2010 17:53:34 +0100 + +grub2 (1.98+20100804-1) unstable; urgency=low + + * New Bazaar snapshot. + - Fix grub-emu build on GNU/kFreeBSD (closes: #591490). + + [ Colin Watson ] + * Add kernel hook scripts and remove any uses of update-grub as a + postinst_hook or postrm_hook in /etc/kernel-img.conf (closes: #554175). + Thanks to Ben Hutchings for advice and to Harald Braumann for an early + implementation. + * Extend the existing GRUB_LEGACY_0_BASED_PARTITIONS handling to avoid + new-style partition naming when generating output for GRUB Legacy + (closes: #590554). + + [ Updated translations ] + * Slovak (sk.po) by Slavko (closes: #591458). + + -- Colin Watson Wed, 04 Aug 2010 04:48:11 +0100 + +grub2 (1.98+20100802-1) unstable; urgency=low + + * New Bazaar snapshot. + - Remove compatibility with terminal.mod prior to + terminal_input/terminal_output separation (LP: #519358). + - Enable `grub-probe -t device' resolution on ZFS. + - Don't use UUID for LVM root when generating Xen entries (closes: + #591093). + - Restore missing whitespace to commands' --help output (closes: + #590874). + - Select unique numbers for named RAID arrays, for use as keys in the + disk cache. + + [ Updated translations ] + * German (Martin Eberhard Schauer). Closes: #590108 + * Spanish (Francisco Javier Cuadrado). Closes: #590448 + * Traditional Chinese (Tetralet). Closes: #591191 + * Danish (Joe Hansen). Closes: #591223 + * Dutch (Paul Gevers). Closes: #590864 + * Japanese (Hideki Yamane). Closes: #591058 + + [ Robert Millan ] + * postinst.in: Fill in device size and model information on GNU/kFreeBSD, + using camcontrol. + * patches/enable_zfs.patch: New patch. Link ZFS from grub-extras into + grub-probe and grub-setup. + * control: Build-Depend on libzfs-dev and libnvpair-dev on kfreebsd-*. + + [ Colin Watson ] + * Offer RAID devices as GRUB installation targets if they contain /, + /boot, or /boot/grub. + + -- Colin Watson Tue, 03 Aug 2010 02:13:07 +0100 + +grub2 (1.98+20100722-1ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb, and return to + enabling gfxpayload=keep by default if the kernel has the necessary + support built-in. + + -- Colin Watson Thu, 22 Jul 2010 21:44:52 +0100 + +grub2 (1.98+20100722-1) unstable; urgency=low + + * New Bazaar snapshot. + - Don't count named RAID arrays when looking for unused array numbers. + + [ Colin Watson ] + * Merge from Ubuntu: + - grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage + syntax change (lupin-support isn't in Debian, but this is harmless + anyway). + + -- Colin Watson Thu, 22 Jul 2010 14:33:34 +0100 + +grub2 (1.98+20100720-1ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage + syntax change. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + - Program vesafb on BIOS systems rather than efifb, and return to + enabling gfxpayload=keep by default if the kernel has the necessary + support built-in. + + -- Colin Watson Wed, 21 Jul 2010 10:10:21 +0100 + +grub2 (1.98+20100720-1) unstable; urgency=low + + * New Bazaar snapshot. + - Link to Info documentation on changes from GRUB Legacy in README + (closes: #502623). + - Add support for mdadm metadata formats 1.x (closes: #492897). + + [ Aaron M. Ucko ] + * Compare -trunk kernels earlier than numeric ABIs (closes: #568160). + + [ Colin Watson ] + * Remove /boot/grub/device.map, /boot/grub/grubenv, + /boot/grub/installed-version, and /boot/grub/locale/ on purge, if + permitted (closes: #547679). + * Convert from CDBS to dh. + * Use exact-version dependencies in grub2 and grub-efi, to reduce + potential confusion. + * Raise priority of grub-common and grub-pc to optional (also done in + archive overrides). + * Copy-edit debian/presubj. + * Use 'mktemp -t' rather than hardcoding /tmp (closes: #589537). + + [ Mario 'BitKoenig' Holbe ] + * Update /etc/grub.d/05_debian_theme to handle multiple entries in + GRUB_TERMINAL_OUTPUT (closes: #589322). + + [ Updated translations ] + * Simplified Chinese (zh_CN.po) by YunQiang Su (closes: #589013). + * Russian (ru.po) by Yuri Kozlov (closes: #589244). + * Swedish (sv.po) by Martin Bagge / brother (closes: #589259). + * Bulgarian (bg.po) by Damyan Ivanov (closes: #589272). + * Indonesian (id.po) by Arief S Fitrianto (closes: #589318). + * Arabic (ar.po) by Ossama M. Khayat. + * Basque (eu.po) by Iñaki Larrañaga Murgoitio (closes: #589489). + * Persian (fa.po) by Bersam Karbasion (closes: #589544). + * Czech (cs.po) by Miroslav Kure (closes: #589568). + * Belarusian (be.po) by Viktar Siarheichyk (closes: #589634). + + -- Colin Watson Wed, 21 Jul 2010 09:11:14 +0100 + +grub2 (1.98+20100710-1ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Change priority to optional to match the priority of grub. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage + syntax change. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + * Canonicalise device paths when building a device map on the fly. + * Program vesafb on BIOS systems rather than efifb, and return to enabling + gfxpayload=keep by default if the kernel has the necessary support + built-in. + + -- Colin Watson Mon, 12 Jul 2010 15:02:28 +0100 + +grub2 (1.98+20100710-1) unstable; urgency=low + + * New Bazaar snapshot. + - Handle degraded RAID arrays in grub-probe and grub-setup. + - Fix gfxterm pager handling. + + [ Fabian Greffrath ] + * Get value of correct debconf question when deciding whether to purge + /boot/grub (closes: #588331). + + [ Colin Watson ] + * Generate device.map in something closer to the old ordering (thanks, + Vadim Solomin). + + [ Updated translations ] + * Croatian (hr.po) by Josip Rodin, closes: #588350. + * French (fr.po) by Christian Perrier (closes: #588695). + + -- Colin Watson Mon, 12 Jul 2010 11:46:53 +0100 + +grub2 (1.98+20100706-1) unstable; urgency=low + + * New Bazaar snapshot. + - USB hub support. + - Fix GRUB_BACKGROUND configuration ordering. + - Fix corruption of first entry name in a reiserfs directory. + - Don't include MD devices when generating device.map (if you're using + RAID and upgraded through 1.98+20100702-1 or 1.98+20100705-1, you may + need to fix this up manually). + + -- Colin Watson Tue, 06 Jul 2010 18:06:40 +0100 + +grub2 (1.98+20100705-1ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Adjust upgrade version checks for Ubuntu. + - Change priority to optional to match the priority of grub. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage + syntax change. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + - Extend the EFI version of grub-install to be able to install into an + EFI System Partition mounted on /boot/efi in a location that complies + with the EFI specification. + - Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + - Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + + -- Colin Watson Mon, 05 Jul 2010 10:28:07 +0100 + +grub2 (1.98+20100705-1) unstable; urgency=medium + + * New Bazaar snapshot. + - Bidi and diacritics support. + + Use terminfo for ieee1275 terminals (closes: #586953). + - Don't use empty grub_device in EFI grub-install (closes: #587838). + - Fix grub-setup core.img comparison when not embedding (thanks, Matt + Kraai and M. Vefa Bicakci; closes: #586621). + + * Update Source: in debian/copyright (thanks, Jörg Sommer). + * Convert by-id disk device names from device.map to traditional device + names for display (closes: #587951). + * Set urgency=medium. We've cleared out most of the apparent regressions + at this point, and #550704 is getting more and more urgent to fix in + testing. + + -- Colin Watson Mon, 05 Jul 2010 02:09:58 +0100 + +grub2 (1.98+20100702-1) unstable; urgency=low + + * New Bazaar snapshot. + - Use video functions in Linux loader rather than hardcoding UGA; load + all available video backends (closes: #565576, probably). + - Add support for initrd images on Fedora 13. + - Output grub.cfg stanzas for Xen (closes: #505517). + - Add 'cat --dos' option to treat DOS-style "\r\n" line endings as + simple newlines (closes: #586358). + - Change grub-mkdevicemap to emit /dev/disk/by-id/ names where possible + on Linux. + - Return CF correctly in mmap e820/e801 int15 hook (closes: #584846). + - The info documentation now has no broken references, although of + course it could still use more work (closes: #553460). + - Support GRUB_BADRAM in grub-mkconfig. + - Skip LVM snapshots (closes: #574863). + + [ Colin Watson ] + * Mention grub-rescue-usb.img in grub-rescue-pc description (closes: + #586462). + * Add instructions for using grub-rescue-usb.img (closes: #586463). + * Remove /usr/lib/grub/mips-* from grub-common rather than the incorrect + /usr/lib/grub/mipsel-*, so that it stops clashing with grub-yeeloong; + add a versioned Replaces to grub-yeeloong just in case (closes: + #586526). + * Remove qemu-system build-dependency on hurd-i386, where it doesn't seem + to exist. Disable tests if qemu-system-i386 isn't available. + * Mark "upgrade-from-grub-legacy" paragraph in + grub-pc/chainload_from_menu.lst as untranslatable. + * Update Homepage field (thanks, Sedat Dilek). + * On Linux, if /boot/grub/device.map exists on upgrade to this version, + regenerate it to use stable device names in /dev/disk/by-id/. If it had + more than one entry, then display a critical-priority debconf note + (sorry, but it's better than silently breaking boot menu entries) + advising people to check custom boot menu entries and update them if + necessary (closes: #583271). + * Use 'set -e' rather than '#! /bin/sh -e' or '#! /bin/bash -e', to avoid + accidents when debugging with 'sh -x'. + * Store grub-pc/install_devices as persistent device names under + /dev/disk/by-id/ (closes: #554790). Migrate previous device names to + that, with explicit confirmation in non-trivial cases to make sure we + got the right ones. If the devices we were told to install to ever go + away, ask again. (This is based on the implementation in Ubuntu.) + * If grub-install fails during upgrade-from-grub-legacy, allow the user to + try again with a different device, but failing that cancel the upgrade + (closes: #587790). + * Remove numbering from patch files. The order is now explicit in a quilt + series file, and renumbering from time to time is tedious. + + [ Updated translations ] + * Ukrainian (uk.po) by Yatsenko Alexandr / Borys Yanovych (closes: + #586611). + * Indonesian (id.po) by Arief S Fitrianto (closes: #586799). + * Swedish (sv.po) by Martin Bagge (closes: #586827). + * Persian (fa.po) by Behrad Eslamifar (closes: #587085). + * French (fr.po) by Christian Perrier (closes: #587383). + * Galician (gl.po) by Jorge Barreiro (closes: #587796). + + [ Robert Millan ] + * Add commented GRUB_BADRAM example in debian/default/grub. + + -- Colin Watson Fri, 02 Jul 2010 17:42:56 +0100 + +grub2 (1.98+20100617-1) unstable; urgency=low + + * New Bazaar snapshot. + - Fix i386-pc prefix handling with nested partitions (closes: #585068). + + * When running grub-pc.postinst from upgrade-from-grub-legacy, tell it to + disregard the fact that /boot/grub/stage2 and /boot/grub/menu.lst still + exist (closes: #550477). + * Touch a marker file when grub-install is run but GRUB Legacy files are + still around. If that marker file is present, pretend that GRUB Legacy + files are missing when upgrading. + * If GRUB Legacy files are present when upgrading, scan boot sectors of + all disks for GRUB 2. If we find GRUB 2 installed anywhere, then ask + the user if they want to finish conversion to GRUB 2, and warn them that + not doing so may render the system unbootable (closes: #586143). Thanks + to Sedat Dilek for helping to narrow down this bug. + * Leaving grub-pc/install_devices empty makes sense in some situations, + but more often than not is a mistake. On the other hand, automatically + selecting all disk devices would upset some people too. Compromise by + simply asking for explicit confirmation if grub-pc/install_devices is + left empty, defaulting to false so that simply selecting all the + defaults in debconf can't leave you with an unbootable system (closes: + #547944, #557425). + + -- Colin Watson Sat, 19 Jun 2010 01:31:40 +0100 + +grub2 (1.98+20100614-2ubuntu4) maverick; urgency=low + + * Rearrange postinst install_devices logic so that preparatory code is run + only once and the while loop only encloses actual asking of questions, + and so that the question being asked is always marked for redisplay when + going round the while loop again (LP: #580408). + * Only offer partitions containing /, /boot, or /boot/grub for + grub-install; installing to other partitions may have harmful effects + such as making Windows unbootable, and installing GRUB to every single + partition is likely to result in confusion anyway (LP: #576724). + + -- Colin Watson Thu, 01 Jul 2010 18:26:37 +0100 + +grub2 (1.98+20100614-2ubuntu3) maverick; urgency=low + + * Hide errors from grub-install if efivars is built-in. + * Source /usr/lib/grub/grub-mkconfig_lib in EFI grub-install, for + make_system_path_relative_to_its_root. + + -- Colin Watson Wed, 23 Jun 2010 08:53:25 +0100 + +grub2 (1.98+20100614-2ubuntu2) maverick; urgency=low + + * Set have_grubenv=true when $prefix/grubenv exists, which should fix + recordfail. This was lost as part of the savedefault upstream merge. + * Extend the EFI version of grub-install to be able to install into an EFI + System Partition mounted on /boot/efi in a location that complies with + the EFI specification. + * Upgrade the installed core image when upgrading grub-efi-ia32 or + grub-efi-amd64, although only if /boot/efi/EFI/ubuntu already exists. + * Make grub-efi-ia32 and grub-efi-amd64 depend on efibootmgr so that + grub-install works properly. + + -- Colin Watson Fri, 18 Jun 2010 15:19:03 +0100 + +grub2 (1.98+20100614-2ubuntu1) maverick; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Store grub-pc/install_devices as persistent device names under + /dev/disk/by-id/. + - Change priority to optional to match the priority of grub. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Don't run /etc/grub.d/README, even if it somehow ended up being + executable. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + - grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage + syntax change. + - Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + - Use qemu rather than qemu-system-i386. + + -- Colin Watson Wed, 16 Jun 2010 18:22:38 +0100 + +grub2 (1.98+20100614-2) unstable; urgency=low + + * Build-depend on gcc-4.4-multilib on i386 and kopensolaris-i386 too, in + order to build grub-efi-amd64. + * Ignore non-option arguments in grub-mkconfig (closes: #586056). + + -- Colin Watson Wed, 16 Jun 2010 17:58:48 +0100 + +grub2 (1.98+20100614-1ubuntu2) maverick; urgency=low + + * Build-depend on gcc-4.4-multilib on i386 and kopensolaris-i386 too, in + order to build grub-efi-amd64. + + -- Colin Watson Wed, 16 Jun 2010 13:28:11 +0100 + +grub2 (1.98+20100614-1ubuntu1) maverick; urgency=low + + * Resynchronise with Debian: + - Add btrfs probing support, currently only in the single-device case + (LP: #450260). + - Insert partmap module in prepare_grub_to_access_device to handle + cross-partmap setups (LP: #451585). + - Fix verbose error output when device-mapper isn't supported by the + running kernel (LP: #526045). + Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Don't generate /boot/grub/device.map during grub-install or + grub-mkconfig by default. + - Store grub-pc/install_devices as persistent device names under + /dev/disk/by-id/. + - Change priority to optional to match the priority of grub. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Fix LVM/RAID probing in the absence of /boot/grub/device.map. + - Look for .mo files in /usr/share/locale-langpack as well, in + preference. + - Don't run /etc/grub.d/README, even if it somehow ended up being + executable. + - Make sure GRUB_TIMEOUT isn't quoted unnecessarily. + - Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing. + - Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes. + * grub-common Breaks: lupin-support (<< 0.30) due to a grub-mkimage syntax + change. + * Renumber Ubuntu patches to start from 950 with no gaps. + * Build-depend on qemu-kvm rather than qemu-system for grub-pc tests. + * Use qemu rather than qemu-system-i386 (see LP #594888). + * Fix quoting in failed_boot_menu and quick_boot patches. + + -- Colin Watson Wed, 16 Jun 2010 12:13:14 +0100 + +grub2 (1.98+20100614-1) unstable; urgency=low + + * New Bazaar snapshot. + - Make target-related error messages from grub-mkimage slightly more + helpful (closes: #584415). + - Fix underquoting that broke savedefault (thanks, Mario 'BitKoenig' + Holbe; closes: #584812). + - Expand 'info grub' substantially, including a new section on + configuring authentication (closes: #584822). + - Give all manual pages proper NAME sections (closes: #496706). + + * Update 915resolution from grub-extras: + - Fix a hang with 945GME (thanks, Sergio Perticone; closes: #582142). + + [ Colin Watson ] + * Disable grub-emu on sparc for the time being. We're currently trying to + use TARGET_* flags to build it, which won't work. + * Don't build-depend on libsdl1.2-dev on hurd-i386. Although + libsdl1.2-dev exists there, it's currently uninstallable due to missing + libpulse-dev, and we can happily live without it for now. + * kfreebsd-amd64 needs gcc-4.4-multilib too (closes: #585668). + * Warn and return without error from prepare_grub_to_access_device if + /boot is a dm-crypt device (thanks, Marc Haber; closes: #542165). + * Make /etc/grub.d/05_debian_theme usable by shells other than bash + (thanks, Alex Chiang; closes: #585561). + * Remove grub-mkisofs leftovers from debian/copyright. + * Fix reversed sense of DEB_BUILD_OPTIONS=nocheck handling. + * Build-depend on qemu-system for grub-pc tests. + + -- Colin Watson Tue, 15 Jun 2010 12:45:35 +0100 + +grub2 (1.98+20100602-2) unstable; urgency=low + + * Only build-depend on libdevmapper-dev on Linux architectures. + * Don't build-depend on libusb-dev on hurd-i386, where it doesn't seem to + be available. + * Fix printf format mismatch in disk/usbms.c (closes: #584474). + * Fix verbose error output when device-mapper isn't supported by the + running kernel (closes: #584196). + * Prepend "part_" to partmap module names in grub-mkconfig, in line with + grub-install (closes: #584426). + + -- Colin Watson Fri, 04 Jun 2010 14:01:58 +0100 + +grub2 (1.98+20100602-1) unstable; urgency=low + + * New Bazaar snapshot. + - Add btrfs probing support, currently only in the single-device case + (closes: #540786). + - Fix grub-emu build on mips/powerpc/sparc. + - Add safety check to make sure that /boot/grub/locale exists before + trying to probe it (closes: #567211). + - Several 'info grub' improvements, including a new section on + configuration file generation using grub-mkconfig which documents the + available keys in /etc/default/grub (closes: #497085). + - Many USB fixes. + + [ Colin Watson ] + * Reorganise configure and build targets in debian/rules to use stamp + files. configure/* never existed and build/* was always a directory, so + make never considered either of them up to date (closes: #450505). + * Remove config.h.in from AUTOGEN_FILES, since autoheader doesn't + necessarily update it. + * Remove conf/gcry.mk from AUTOGEN_FILES, and conf/gcry.rmk from their + dependencies. autogen.sh runs util/import_gcry.py after autoconf et al, + so conf/gcry.rmk's timestamp will be later than some of the + autogenerated outputs. + * Go back to shipping rescue images in the grub-rescue-pc .deb itself + rather than generating them in the postinst. This means that (a) they + get removed when the package is removed (closes: #584176); (b) they are + listed in package metadata, as is proper for files in /usr (closes: + #584218); (c) grub-rescue-pc can potentially be used as a + build-dependency for other packages that need to build GRUB images into + installation media etc., without having to build-depend on grub-pc which + isn't coinstallable with other platform variants and does invasive + things in its postinst. + * Add grub-mkrescue patch from Thomas Schmitt to allow reducing the size + of xorriso-created images. Use this to ensure that + grub-rescue-floppy.img fits well within size limits (closes: #548320). + + -- Colin Watson Thu, 03 Jun 2010 11:24:41 +0100 + +grub2 (1.98+20100527-2) unstable; urgency=low + + * Always override statically-linked-binary Lintian tag for kernel.img; + dynamic linking makes no sense here. + * kernel.img is stripped upstream where it can be, but override Lintian's + error for the cases where it can't. + * Override binary-from-other-architecture for kernel.img as well as *.mod + when building grub-efi-amd64 on i386. + + -- Colin Watson Tue, 01 Jun 2010 13:48:14 +0100 + +grub2 (1.98+20100527-1) unstable; urgency=low + + * New Bazaar snapshot. + - Support multiple terminals in grub-mkconfig, e.g. + GRUB_TERMINAL='serial console' (closes: #506707). + - Speed up consecutive hostdisk operations on the same device (closes: + #508834, #574088). + - Fix grammar error in grub-setup warning (closes: #559005). + - Use xorriso for image creation rather than embedding a modified copy + of mkisofs (closes: #570156). + - Issue an error rather than segfaulting if only some LVM component + devices are in device.map (closes: #577808). + - Fix typo in make_device_name which caused grub-probe problems on + systems with BSD disk labels (closes: #578201). + - Add DM-RAID probe support (closes: #579919). + - Include all gnumach kernels on Hurd, not just gnumach and gnumach.gz + (closes: #581584). + + [ Colin Watson ] + * Restore TEXTDOMAINDIR correction in grub.d files, lost by mistake in a + merge. Noticed by Anthony Fok. + * Don't fail on purge if the ucf association has already been taken over + by a different grub package (closes: #574176). + * Add debian/grub-extras/*/conf/*.mk to AUTOGEN_FILES. + * Remove support for the lpia architecture, now removed from Ubuntu. + * Conflict with grub (<< 0.97-54) as well as grub-legacy. + * Build-depend on libdevmapper-dev for DM-RAID probe support. + * Switch to quilt. + * Suggest xorriso (>= 0.5.6.pl00) in grub-common, since grub-mkrescue now + needs it. Depend on it in grub-rescue-pc. + * Move grub-mkimage to grub-common, now that it only has one + implementation. + * Clean up temporary files used while building grub-firmware-qemu. + * Make grub-probe work with symlinks under /dev/mapper (closes: #550704). + * When upgrading a system where GRUB 2 is chainloaded from GRUB Legacy and + upgrade-from-grub-legacy has not been run, upgrade the chainloaded image + rather than confusing the user by prompting them where they want to + install GRUB (closes: #546822). + * Build-depend on libsdl1.2-dev for SDL support in grub-emu. + * Don't leak debconf's file descriptor to update-grub, so that the LVM + tools called from os-prober don't complain about it (closes: #549976). + Other leaks are not this package's fault, may not be bugs at all, and in + any case os-prober 1.36 suppresses the warnings. + * Build-depend on flex (>= 2.5.35). + * Build-depend on gcc-4.4-multilib on amd64. + + [ Updated translations ] + * Slovenian (sl.po) by Vanja Cvelbar (closes: #570110). + * Vietnamese (vi.po) by Clytie Siddall (closes: #574578). + * Tamil (ta.po) by Tirumurti Vasudevan (closes: #578282). + * Portuguese (pt.po) by Tiago Fernandes (closes: #580140). + * Romanian (ro.po) by Eddy Petrișor / Andrei Popescu (closes: #583185). + + -- Colin Watson Tue, 01 Jun 2010 11:24:38 +0100 + +grub2 (1.98-1ubuntu6) lucid-proposed; urgency=low + + * When migrating from the old grub-pc/install_devices scheme, check if the + old value indicated installation to a single partition on a single disk. + In that case, if there is only one disk present and it has a matching + partition number, then we can install to that partition without asking + (LP: #508173). + + -- Colin Watson Wed, 28 Apr 2010 15:48:02 +0100 + +grub2 (1.98-1ubuntu5) lucid; urgency=low + + * Enclose all translated strings in grub.cfg in single quotes, and escape + them appropriately (LP: #552921). + + -- Colin Watson Tue, 13 Apr 2010 14:29:45 +0100 + +grub2 (1.98-1ubuntu4) lucid; urgency=low + + * Only use the first word of GRUB_DISTRIBUTOR for --class, to avoid + problems if somebody puts spaces in GRUB_DISTRIBUTOR (LP: #557606). + * Probe all devices in 'grub-probe --target=drive' if + /boot/grub/device.map is missing (LP: #549980). + * Adjust hostdisk id for hard disks, allowing grub-setup to use its + standard workaround for broken BIOSes (thanks to TJ for detailed + investigation; LP: #555500). + + -- Colin Watson Fri, 09 Apr 2010 09:46:44 +0100 + +grub2 (1.98-1ubuntu3) lucid; urgency=low + + * Make sure GRUB_TIMEOUT isn't quoted unnecessarily (LP: #544890). + + -- Colin Watson Tue, 30 Mar 2010 10:23:42 +0100 + +grub2 (1.98-1ubuntu2) lucid; urgency=low + + * Fix LVM/RAID probing in the absence of /boot/grub/device.map + (LP: #525085, #527401). + * Backport my upstream patch to copy .mo files from /usr/share/locale to + match where 'make install' puts them (LP: #537998). + * Look for .mo files in /usr/share/locale-langpack as well, in preference + (LP: #537998). + * Don't generate /boot/grub/device.map during grub-mkconfig (we already + suppressed it during grub-install, but then grub-mkconfig generated it + shortly afterwards, producing confusing results). + * Don't run /etc/grub.d/README, even if it somehow ended up being + executable (LP: #537123). + + -- Colin Watson Mon, 22 Mar 2010 19:57:10 +0000 + +grub2 (1.98-1ubuntu1) lucid; urgency=low + + * Resynchronise with Debian (bug-fixes relative to previous snapshot + release). Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Improve DM-RAID probing support. + - Don't generate /boot/grub/device.map during grub-install by default. + - Store grub-pc/install_devices as persistent device names under + /dev/disk/by-id/. + - Change priority to optional to match the priority of grub. + - Shave eight bytes off the pre-partition-table part of boot.img. + - Don't display "GRUB loading" unless Shift is held down. + - Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split. + - Optimise hostdisk device handling, substantially speeding up + grub-probe filesystem reads. + + -- Colin Watson Tue, 09 Mar 2010 22:18:14 +0000 + +grub2 (1.98-1) unstable; urgency=low + + * New upstream release (closes: #572898). + - Fix grub-script-check to handle empty lines (closes: #572302). + - Fix offset computation when reading last sectors. Partition reads and + writes within and outside a partition (closes: #567469, #567884). + - Fix script execution error handling bug that meant that an error in a + menuentry's last statement caused the whole menuentry to fail (closes: + #566538, LP: #464743). + - Support GRUB_GFXPAYLOAD_LINUX (closes: #536453, LP: #416772). + + [ Samuel Thibault ] + * Add GRUB_INIT_TUNE example to /etc/default/grub (closes: #570340). + + [ Colin Watson ] + * Build-depend on libusb-dev so that grub-emu is reliably built with USB + support (closes: #572854). + * Update directions in debian/rules on exporting grub-extras to account + for it being maintained in Bazaar nowadays. + * Add myself to Uploaders. + * Acknowledge NMUs, thanks to Torsten Landschoff and Julien Cristau. + + -- Colin Watson Tue, 09 Mar 2010 13:25:35 +0000 + +grub2 (1.98~20100128-1.2) unstable; urgency=low + + * Non-maintainer upload. + * Stop setting gfxpayload=keep (closes: #567245). + + -- Julien Cristau Sun, 14 Feb 2010 20:37:51 +0100 + +grub2 (1.98~20100128-1.1) unstable; urgency=low + + * Non-maintainer upload. + * Apply trivial patch (already merged upstream) fixing the offset + computation for non-cached reads (closes: #567637). + + -- Torsten Landschoff Mon, 08 Feb 2010 22:15:01 +0100 + +grub2 (1.98~20100128-1ubuntu4) lucid; urgency=low + + [ Colin Watson ] + * Update DM-RAID probing patch, removing some configure.ac cruft. + * Add patch from Colin King to shave eight bytes off the + pre-partition-table part of boot.img. + * Don't display "GRUB loading" unless Shift is held down. + * Use light-gray as the default background for highlighted menu entries; + white is not safe because some systems interpret the top bit as blink + (thanks, proski; LP: #527334). + * Adjust versions of grub-doc and grub-legacy-doc conflicts to tolerate + our backport of the grub-doc split (LP: #493968). + * Optimise hostdisk device handling, substantially speeding up grub-probe + filesystem reads (LP: #425650). + + -- Colin Watson Wed, 03 Mar 2010 20:33:03 +0000 + +grub2 (1.98~20100128-1ubuntu3) lucid; urgency=low + + * Stop forcing gfxpayload=keep when CONFIG_FB_EFI=y, which it always is on + Ubuntu kernels; this apparently causes trouble with some KMS + framebuffers. + + -- Colin Watson Thu, 04 Feb 2010 18:23:39 -0800 + +grub2 (1.98~20100128-1ubuntu2) lucid; urgency=low + + [ Michael Vogt ] + * Change the priority to optional to match the priority of grub. This + prevents grub-pc getting removed in favour of grub (LP: #449679). + + [ Colin Watson ] + * Stop the postinst failing if there are no devices. + + -- Colin Watson Thu, 04 Feb 2010 12:44:29 -0800 + +grub2 (1.98~20100128-1ubuntu1) lucid; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Suppress progress messages as the kernel and initrd load for + non-recovery kernel menu entries. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + - Improve DM-RAID probing support. + * Don't generate /boot/grub/device.map during grub-install by default. + * Store grub-pc/install_devices as persistent device names under + /dev/disk/by-id/ (LP: #496435). Migrate previous device names to that, + with explicit confirmation in non-trivial cases to make sure we got the + right ones. If the devices we were told to install to ever go away, ask + again. + * If the user opts to install GRUB nowhere, make sure they really mean it. + * Backport disk read fixes from upstream. + + -- Colin Watson Wed, 03 Feb 2010 16:53:33 -0800 + +grub2 (1.98~20100128-1) unstable; urgency=low + + * New Bazaar snapshot. + - Fix corruption problem when reading files from CDROM. (Closes: #567219) + + [ Felix Zielcke ] + * Never strip kernel.img in rules. Upstream already does it when it + can be done. (Closes: #561933) + * Bump Standards-Version to 3.8.4. + + [ Robert Millan ] + * rules: Run the testsuite (make check) when building grub-pc. + + -- Robert Millan Thu, 28 Jan 2010 16:28:45 +0100 + +grub2 (1.98~20100126-1) unstable; urgency=low + + * New Bazaar snapshot. + - Includes mipsel-yeeloong port. + + [ Robert Millan ] + * config.in: Lower priority of grub2/linux_cmdline_default. + + [ Felix Zielcke ] + * Drop `CFLAGS=-O0' workaround on powerpc. Should be fixed correctly now. + * Ship grub-bin2h and grub-script-check in grub-common. + * Terminate NEWS.Debian with a blank line like lintian would suggest + if that check would be working correctly. + + -- Felix Zielcke Tue, 26 Jan 2010 19:26:25 +0100 + +grub2 (1.98~20100115-1ubuntu3) lucid; urgency=low + + * Build-depend on libdevmapper-dev for DM-RAID probing patch. + * Handle conversion of DM-RAID disk paths (as well as partition paths) to + GRUB drive names. + + -- Colin Watson Mon, 01 Feb 2010 15:31:07 +0000 + +grub2 (1.98~20100115-1ubuntu2) lucid; urgency=low + + * Restore patch to suppress progress messages as the kernel and initrd + load for non-recovery kernel menu entries. The messages were just moved + into the configuration file upstream, not removed entirely as I'd + mistakenly thought. + + -- Colin Watson Thu, 28 Jan 2010 18:31:37 +0000 + +grub2 (1.98~20100115-1ubuntu1) lucid; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + * Improve DM-RAID probing support; grub-probe and grub-mkdevicemap should + both now do something reasonable. + + -- Colin Watson Thu, 28 Jan 2010 14:04:48 +0000 + +grub2 (1.98~20100115-1) unstable; urgency=low + + * New Bazaar snapshot. + - Includes savedefault / grub-reboot branch. + - Includes Multiboot video support (from latest 1.x draft). + + -- Robert Millan Fri, 15 Jan 2010 18:15:26 +0100 + +grub2 (1.98~20100110-1) unstable; urgency=low + + * New Bazaar snapshot. + + [ Robert Millan ] + * grub-rescue-pc.postinst: Fix image generation during upgrades. + (Closes: #564261) + + -- Robert Millan Sun, 10 Jan 2010 02:45:52 +0100 + +grub2 (1.98~20100107-1) unstable; urgency=low + + * New Bazaar snapshot. + + [ Robert Millan ] + * grub-rescue-pc.postinst: Use grub-mkrescue for floppy as well. + + [ Updated translations ] + * Chinese (zh_TW.po) by Tetralet. (Closes: #564044) + + -- Robert Millan Thu, 07 Jan 2010 17:56:10 +0100 + +grub2 (1.98~20100101-1ubuntu2) lucid; urgency=low + + * Renumber Ubuntu patches to start from 950 with no gaps. + * Don't record failed boots when using grub-reboot, as that can leave + remote users stranded at a timeout=-1 menu (thanks, Jordan Uggla). + + -- Colin Watson Fri, 15 Jan 2010 12:29:50 +0000 + +grub2 (1.98~20100101-1ubuntu1) lucid; urgency=low + + * Resynchronise with Debian. Remaining changes: + - Adjust for default Ubuntu boot options ("quiet splash"). + - Default to hiding the menu; holding down Shift at boot will show it. + - Set a monochromatic theme for Ubuntu. + - Apply Ubuntu GRUB Legacy changes to legacy update-grub script: title, + recovery mode, quiet option, tweak how memtest86+ is displayed, and + use UUIDs where appropriate. + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + - Fix backslash-escaping in merge_debconf_into_conf. + - Remove "GNU/Linux" from default distributor string. + - Add crashkernel= options if kdump and makedumpfile are available. + - If other operating systems are installed, then automatically unhide + the menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus + if available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, then + fall back to a short delay interruptible with Escape. + - Allow Shift to interrupt 'sleep --interruptible'. + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + - Remove some verbose messages printed before reading the configuration + file. + - If the environment variable "quiet" is set to something other than 0, + suppress progress messages as the kernel and initrd load. Set this for + non-recovery kernel menu entries. + - Add GRUB_DEFAULT=saved, as well as grub-set-default and grub-reboot + utilities. Provides functionality essentially equivalent to GRUB + Legacy's savedefault. + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + - Ignore devices loop-mounted from files in 10_linux. + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + - Handle RAID devices containing virtio components. + * Update savedefault patch from current Bazaar branch, fixing grub-reboot + to have distinct behaviour from grub-set-default (LP: #497326). + * Fix grub-mkisofs compilation error with FORTIFY_SOURCE. + * Convert recordfail boilerplate in each menu entry to use a function. + + -- Colin Watson Mon, 11 Jan 2010 11:12:55 +0000 + +grub2 (1.98~20100101-1) unstable; urgency=high + + * New Bazaar snapshot. + - Fix FTBS on sparc. + + [ Robert Millan ] + * rules: Auto-update version from debian/changelog. + + [ Felix Zielcke ] + * Add -O0 to CFLAGS on powerpc to avoid the `_restgpr_31_x in boot is + not defined' FTBFS. + + -- Felix Zielcke Fri, 01 Jan 2010 00:31:37 +0100 + +grub2 (1.98~20091229-1) unstable; urgency=high + + * New Bazaar snapshot. + - Fix slowness when $prefix uses an UUID. + (Closes: #541145, LP: #420933) + - Correctly set TARGET_CFLAGS. (Closes: #562953) + + [ Robert Millan ] + * grub-rescue-pc.postinst: Build USB rescue image. + * rules: Invoke configure with relative path. This makes binaries smaller, + since dprintf strings are constructed using this path. + + [ Felix Zielcke ] + * Urgency=high due to RC bug fix. + * Fix version comparison in grub-common.preinst for handling obsolete + /etc/grub.d/10_freebsd. (Closes: #562921) + + -- Felix Zielcke Tue, 29 Dec 2009 16:05:00 +0100 + +grub2 (1.98~20091222-1) unstable; urgency=low + + * New Baazar snapshot. + - Make 30_os-prober again dash compatible. (Closes: #562034) + + -- Felix Zielcke Tue, 22 Dec 2009 12:50:57 +0100 + +grub2 (1.98~20091221-1) unstable; urgency=low + + * New Bazaar snapshot. + - Fix search command failing on some broken BIOSes. (Closes: #530357) + + [ Felix Zielcke ] + * Add Replaces:/Conflicts: grub-linuxbios to grub-coreboot. (Closes: #561811) + * Delete obsolete /etc/grub.d/10_freebsd if it has not been modified, + else disable it. (Closes: #560346) + + -- Robert Millan Mon, 21 Dec 2009 22:04:17 +0100 + +grub2 (1.98~20091210-1) unstable; urgency=low + + * Version bump. + + -- Robert Millan Mon, 14 Dec 2009 14:52:59 +0100 + +grub2 (1.97+20091210-1) unstable; urgency=low + + * New Bazaar snapshot. + - patches/02_fix_mountpoints_in_mkrelpath.diff: Remove (merged). + - Fixes FTBFS on powerpc (again) and sparc. + - patches/903_grub_legacy_0_based_partitions.diff: Resync (merged into + debian branch). + + * Fix dpkg dependency for lenny compatibility. + + -- Robert Millan Thu, 10 Dec 2009 00:35:20 +0100 + +grub2 (1.97+20091130-1ubuntu1) lucid; urgency=low + + * Resynchronise with Debian (LP: #485457). Remaining changes: + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu; holding down Shift at boot will show it. + + debian/templates.in: + - Change default value of grub2/linux_cmdline_default to "quiet + splash". + + debian/config.in, debian/postinst.in, debian/grub-pc.templates.in: + - Migrate timeout settings from menu.lst. + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/control: + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + + debian/postinst.in: + - Fix backslash-escaping in merge_debconf_into_conf. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - Add crashkernel= options if kdump and makedumpfile are available. + + debian/patches/951_quick_boot.diff: + - If other operating systems are installed, then automatically unhide + the menu. + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, + then fall back to a short delay interruptible with Escape. + + debian/patches/952_sleep_shift.diff: + - Allow Shift to interrupt 'sleep --interruptible'. + + debian/patches/954_normal_quiet.diff: + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + + debian/patches/955_really_quiet.diff: + - Remove some verbose messages printed before reading the + configuration file. + + debian/patches/956_linux_quiet.diff: + - If the environment variable "quiet" is set to something other than + 0, suppress progress messages as the kernel and initrd load. Set + this for non-recovery kernel menu entries. + + debian/patches/957_savedefault.diff, debian/rules: + - Add GRUB_DEFAULT=saved, as well as grub-set-default and grub-reboot + utilities. Provides functionality essentially equivalent to GRUB + Legacy's savedefault. + + debian/patches/959_loopback_root.diff: + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + + debian/patches/961_handle_loopback.diff: + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + + debian/patches/963_linux_no_loopmount.diff: + - Ignore devices loop-mounted from files in 10_linux. + + debian/patches/965_failed_boot_menu.diff, debian/grub-common.init, + debian/grub-common.pm-sleep, debian/grub-common.dirs, debian/rules: + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + + debian/patches/968_raid_virtio.diff: + - Handle RAID devices containing virtio components. + * debian/patches/957_savedefault.diff: Fix --version output from + grub-reboot and grub-set-default (see LP #480571). + * debian/patches/957_savedefault.diff: Cope with /boot being on a separate + filesystem (LP: #478035). + * debian/patches/957_savedefault.diff, 965_failed_boot_menu.diff: Use 'set + var=val' rather than plain 'var=val'. + * debian/patches/969_format_errors.diff: Fix compilation errors due to + gettext work. + + -- Colin Watson Mon, 07 Dec 2009 20:04:28 +0000 + +grub2 (1.97+20091130-1) unstable; urgency=low + + * New Bazaar snapshot. + * Enable ntldr-img from grub-extras. + + -- Robert Millan Mon, 30 Nov 2009 02:33:03 +0100 + +grub2 (1.97+20091125-2) unstable; urgency=low + + [ Updated translations ] + * Bulgarian (bg.po) by Damyan Ivanovi (Closes: #558039) + + [ Robert Millan ] + * control: Remove genisoimage from Build-Depends/Suggests (no longer + used). + * grub.d/05_debian_theme: Make output string distro-agnostic. + + [ Felix Zielcke ] + * patches/02_fix_mountpoints_in_mkrelpath.diff: New patch to handle + mount points like the old shell function did. (Closes: #558042) + + -- Felix Zielcke Sun, 29 Nov 2009 21:38:00 +0100 + +grub2 (1.97+20091125-1) unstable; urgency=low + + [ Robert Millan ] + * New upstream snapshot. + - Fixes script parser load error. + + * Add gettext to Build-Depends and gettext-base to grub-common's + Depends. + + -- Felix Zielcke Wed, 25 Nov 2009 19:22:51 +0100 + +grub2 (1.97+20091124-1) unstable; urgency=low + + * New upstream snapshot. + - Fix grub-mkisofs related FTBFS on powerpc. (Closes: #557704) + - Create fake GRUB devices for devices not listed in device.map. + This also makes dmraid and multipath work as long as + search --fs-uuid works. (Closes: #442382, #540549, LP: #392136) + - rules: grub-emu is now built as a port. + + [ Felix Zielcke ] + * Change the bt-utf-source build dependency to xfonts-unifont. It's + more complete, better maintained and grub-mkfont supports actually + more then BDF fonts as input, thanks to libfreetype. + * Use grub-probe to get the GRUB device of /boot/grub instead of + passing (hd0) to grub-install when creating the core.img with + chainloading. This avoids the (UUID=) hack slowness in case + /boot/grub is on a different disk then (hd0) in device.map. + * patches/903_grub_legacy_0_based_partitions.diff: Update. + * Add a build dependency on automake and python. + * Set TARGET_CC=$(CC) to really use gcc-4.4 everywhere. Also pass it + and CC as arguments to ./configure instead of env vars so they get + preserved. + * Ship grub-mkrelpath in grub-common. + * Ship the locale files in grub-common. + * Add a dependency on 'dpkg (>= 1.15.4) | install-info' for grub-common + as recommended by Policy and lintian. + + + -- Felix Zielcke Tue, 24 Nov 2009 21:20:00 +0100 + +grub2 (1.97+20091115-1) unstable; urgency=low + + * New upstream snapshot. + - Fix security problem with password checking. (Closes: #555195) + - Fix the generated GNU/Hurd menu entries and also add support for + it in 30_os-prober. (Closes: #555188) + - Same grub-mkrescue for grub-pc and grub-coreboot, used by + grub-rescue-pc during postinst now. (Closes: #501867) + + [ Felix Zielcke ] + * Ship grub-mkisofs in grub-common. + * patches/002_grub.d_freebsd.in.diff: Remove (merged upstream). + * patches/906_grub_extras.diff: Remove. Superseded by GRUB_CONTRIB variable + in recent upstream trunk. + * rules: Export GRUB_CONTRIB to enable grub-extras add-ons. + * Pass --force to grub-install in the postinst. (Closes: #553415) + * Don't strip debug symbols from grub-emu. It's meant for debugging + and with them it's much more useful. + * Ship grub-mkfloppy in grub-pc. + * Revert the Replaces: grub-common to (<= 1.96+20080413-1) on the + grub-pc package. It was wrongly modified long ago. + + [ Robert Millan ] + * copyright: Document mkisofs. + * control: Update Vcs- fields (moved to Bazaar). + * rules: Update debian/legacy/update-grub rule to Bazaar. + + -- Felix Zielcke Sun, 15 Nov 2009 19:13:31 +0100 + +grub2 (1.97-1) unstable; urgency=low + + [ Robert Millan ] + * patches/905_setup_force.diff: Remove, no longer needed as of + grub-installer >= 1.47. + * grub.d/05_debian_theme: Attempt to source grub_background.sh from + desktop-base (Needed for #495282, #495616, #500134, see also + #550984). + + [ Felix Zielcke ] + * Add a build dependency on texinfo. + * Fix little typo in /etc/default/grub. (LP: #457703) + + [ Updated translations ] + * Finnish (fi.po) by Esko Arajärvi. (Closes: #551912) + + -- Felix Zielcke Sun, 25 Oct 2009 19:50:21 +0100 + +grub2 (1.97~beta4-1ubuntu4) karmic-proposed; urgency=low + + * New patch, 969_os_prober_separate_boot, fixes wrong kernel/initrd + pathnames and wrong partition UUID/GRUB path when generating menuentries + from os-prober output of a detected system with a separate /boot; thanks + Colin Watson; LP: #462961. + + -- Loïc Minier Thu, 29 Oct 2009 02:30:35 +0000 + +grub2 (1.97~beta4-1ubuntu3) karmic; urgency=low + + * Backport from Debian (Felix Zielcke): + - Add a build dependency on texinfo (LP: #453442). + * debian/patches/968_raid_virtio.diff: Handle RAID devices containing + virtio components (LP: #457687). + + -- Colin Watson Fri, 23 Oct 2009 21:58:13 +0100 + +grub2 (1.97~beta4-1ubuntu2) karmic; urgency=low + + * debian/patches/967_no_mmx_sse.diff: Build with -mno-mmx -mno-sse + -mno-sse2 on i386/lpia, since otherwise lpia is unbootable (LP: + #444562). + + -- Colin Watson Fri, 16 Oct 2009 16:31:12 +0100 + +grub2 (1.97~beta4-1ubuntu1) karmic; urgency=low + + * Resynchronise with Debian. Remaining changes: + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu; holding down Shift at boot will show it. + + debian/templates.in: + - Change default value of grub2/linux_cmdline_default to "quiet + splash". + + debian/config.in, debian/postinst.in, debian/grub-pc.templates.in: + - Migrate timeout settings from menu.lst. + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/control: + - Conflict with grub (<< 0.97-54) as well as grub-legacy. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - Add crashkernel= options if kdump and makedumpfile are available. + + debian/patches/951_quick_boot.diff: + - If other operating systems are installed, then automatically unhide + the menu. + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, + then fall back to a short delay interruptible with Escape. + + debian/patches/952_sleep_shift.diff: + - Allow Shift to interrupt 'sleep --interruptible'. + + debian/patches/954_normal_quiet.diff: + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + + debian/patches/955_really_quiet.diff: + - Remove some verbose messages printed before reading the + configuration file. + + debian/patches/956_linux_quiet.diff: + - If the environment variable "quiet" is set to something other than + 0, suppress progress messages as the kernel and initrd load. Set + this for non-recovery kernel menu entries. + + debian/patches/957_savedefault.diff, debian/rules: + - Add GRUB_DEFAULT=saved, as well as grub-set-default and grub-reboot + utilities. Provides functionality essentially equivalent to GRUB + Legacy's savedefault. + + debian/patches/959_loopback_root.diff: + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + + debian/patches/961_handle_loopback.diff: + - Change prepare_grub_to_access_device to handle filesystems + loop-mounted on file images. + + debian/patches/963_linux_no_loopmount.diff: + - Ignore devices loop-mounted from files in 10_linux. + + debian/patches/965_failed_boot_menu.diff, debian/grub-common.init, + debian/rules: + - Show the boot menu if the previous boot failed, that is if it failed + to get to the end of one of the normal runlevels. + * debian/patches/957_savedefault.diff, + debian/patches/965_failed_boot_menu.diff: Silently ignore zero-sized + environment blocks (thanks, Felix Zielcke; LP: #439784). + * debian/grub-common.pm-sleep, debian/grub-common.dirs, debian/rules: + Record a successful boot on resume from hibernate (thanks, Maxim + Levitsky; LP: #447725). + * debian/postinst.in: Fix backslash-escaping in merge_debconf_into_conf + (LP: #448413). + * debian/patches/966_mkconfig_probe_option.diff: Backport upstream patch + to make the grub-install --grub-probe option work, which is useful for + vm-builder. + + -- Colin Watson Wed, 14 Oct 2009 12:07:42 +0100 + +grub2 (1.97~beta4-1) unstable; urgency=low + + * New upstream beta release. + + [ Felix Zielcke ] + * Change the Recommends: os-prober to (>= 1.33). + * patches/907_grub.cfg_400.diff: Really add it. Somehow it was a 0 byte file. + (Closes: #547409) + * Convert newlines back to spaces when parsing kopt from + GRUB Legacy's menu.lst, before giving the value to Debconf. + Thanks to Colin Watson. (Closes: #547649) + * Ship the info docs in grub-common. (Closes: #484074) + * Remove generated /usr/share/info/dir* files. + * Update the presubj bug file and also install it for grub-common. + + [ Robert Millan ] + * Enable ZFS and 915resolution in grub-extras (now requires explicit + switch). + * grub-common conflicts with grub-doc (<< 0.97-32) and grub-legacy-doc + (<< 0.97-59). + * Move grub-emu to a separate package. + + [ Updated translations ] + * Japanese (ja.po) by Hideki Yamane. (Closes: #549599) + + -- Robert Millan Mon, 05 Oct 2009 20:03:04 +0200 + +grub2 (1.97~beta3-1ubuntu8) karmic; urgency=low + + [ Colin Watson ] + * debian/control: Conflict with grub (<< 0.97-54) as well as grub-legacy + (see LP #410886). + * debian/grub-common.init: Create /boot/grub if it doesn't exist, to avoid + noise on fresh installations. + + [ Tormod Volden ] + * debian/grub-common.init: do not call log_end_msg if not VERBOSE + (LP: #440879) + + -- Colin Watson Tue, 06 Oct 2009 23:32:54 +0100 + +grub2 (1.97~beta3-1ubuntu7) karmic; urgency=low + + * debian/grub-common.init: /boot/grub/grubenv sometimes seems to end up + zero-sized for some reason. If it is, just delete it (LP: #439784). + + -- Colin Watson Sun, 04 Oct 2009 21:52:10 +0100 + +grub2 (1.97~beta3-1ubuntu6) karmic; urgency=low + + * debian/patches/965_failed_boot_menu.diff, debian/grub-common.init, + debian/rules: Show the boot menu if the previous boot failed, that is if + it failed to get to the end of one of the normal runlevels. + + -- Colin Watson Mon, 28 Sep 2009 09:29:34 +0100 + +grub2 (1.97~beta3-1ubuntu5) karmic; urgency=low + + * debian/patches/957_savedefault.diff: Quote the value assigned to + 'default', in case it contains spaces (LP: #431179). + * debian/patches/964_os-prober_errors.diff: Don't throw away errors from + os-prober; it makes things hard to debug. + + -- Colin Watson Fri, 18 Sep 2009 18:47:06 +0100 + +grub2 (1.97~beta3-1ubuntu4) karmic; urgency=low + + * debian/patches/963_linux_no_loopmount.diff: Ignore devices loop-mounted + from files in 10_linux. + + -- Colin Watson Wed, 16 Sep 2009 17:46:10 +0100 + +grub2 (1.97~beta3-1ubuntu3) karmic; urgency=low + + * debian/patches/962_os-prober_windows_7.diff: Cope with Windows 7 in + os-prober output. + + -- Colin Watson Tue, 15 Sep 2009 06:48:13 +0100 + +grub2 (1.97~beta3-1ubuntu2) karmic; urgency=low + + * debian/config.in: Fix logic if GRUB_HIDDEN_TIMEOUT is entirely missing + from /etc/default/grub. + * debian/patches/961_handle_loopback.diff: Change + prepare_grub_to_access_device to handle filesystems loop-mounted on file + images. + + -- Colin Watson Tue, 15 Sep 2009 00:34:11 +0100 + +grub2 (1.97~beta3-1ubuntu1) karmic; urgency=low + + * Resynchronise with Debian. Remaining changes: + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu; holding down Shift at boot will show it. + + debian/templates.in: + - Change default value of grub2/linux_cmdline_default to "quiet + splash". + + debian/config.in, debian/postinst.in, debian/grub-pc.templates.in: + - Migrate timeout settings from menu.lst. + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - Add crashkernel= options if kdump and makedumpfile are available. + + debian/patches/951_quick_boot.diff: + - If other operating systems are installed, then automatically unhide + the menu. + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, + then fall back to a short delay interruptible with Escape. + + debian/patches/952_sleep_shift.diff: + - Allow Shift to interrupt 'sleep --interruptible'. + + debian/patches/954_normal_quiet.diff: + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. Don't clear the screen just before + booting if we never drew the menu in the first place. + + debian/patches/955_really_quiet.diff: + - Remove some verbose messages printed before reading the + configuration file. + + debian/patches/956_linux_quiet.diff: + - If the environment variable "quiet" is set to something other than + 0, suppress progress messages as the kernel and initrd load. Set + this for non-recovery kernel menu entries. + + debian/patches/957_savedefault.diff, debian/rules: + - Add GRUB_DEFAULT=saved, as well as grub-set-default and grub-reboot + utilities. Provides functionality essentially equivalent to GRUB + Legacy's savedefault. + + debian/patches/959_loopback_root.diff: + - Keep the loopback file open so that subsequent changes to the "root" + environment variable don't affect it. + * debian/patches/960_test_invalid_fs.diff: Fix test crash if loopback + device does not contain a filesystem. + + -- Colin Watson Mon, 14 Sep 2009 10:52:59 +0100 + +grub2 (1.97~beta3-1) unstable; urgency=high + + * New upstream beta release. + - Make it more clear how to use /etc/grub.d/40_custom. (Closes: #545153) + - fix a serious memory corruption in the graphical subsystem. + (Closes: #545364, #544155, #544639, #544822, LP: #424503) + - patches/003_grub_probe_segfault.diff: Remove (merged). + + * Change the watch file so upstream beta releases are recognized. + * Include /etc/default/grub in bug reports. + * Recommend os-prober (>= 1.32). (Closes: #491872) + * Change the gcc-multilib [sparc] build dependency to gcc-4.4-multilib + [sparc]. + * patches/907_grub.cfg_400.diff: New patch to make grub.cfg again mode + 444 if it does not contain a password line. + * Use `su' in the bug reporting script to read grub.cfg in case the user + is not allowed to read it. + * Readd grub-pc/kopt-extracted template. + + [ Updated translations ] + * Brazilian Portuguese (pt_BR.po) by Flamarion Jorge. + * Japanese (ja.po) by Hideki Yamane. (Closes: #545331) + * Spanish (es.po) by Francisco Javier Cuadrado. (Closes: #545566) + * Italian (it.po) by Luca Monducci. (Closes: #546035) + + -- Felix Zielcke Sat, 12 Sep 2009 15:28:20 +0200 + +grub2 (1.97~beta2-2ubuntu2) karmic; urgency=low + + * debian/patches/951_quick_boot.diff: Only do the hidden-timeout checks if + timeout is not already set to -1 (i.e. show menu, no timeout). + * debian/patches/954_normal_quiet.diff: Don't clear the screen just before + booting if we never drew the menu in the first place. + * debian/patches/955_really_quiet.diff: Remove "Booting" message; it turns + out to be hard to suppress any other way. + * debian/patches/956_linux_quiet.diff: Don't try to suppress "Booting" + based on the value of "quiet", as the menu entry commands aren't run + until after this message. + * debian/patches/958_ntfs_64bit.diff: Handle 64-bit file sizes in NTFS. + * debian/patches/959_loopback_root.diff: Keep the loopback file open so + that subsequent changes to the "root" environment variable don't affect + it. + * debian/config.in, debian/postinst.in, debian/grub-pc.templates.in: + Migrate timeout settings from menu.lst (LP: #386789). + * debian/grub-pc.templates.in: Add grub-pc/kopt_extracted template. + + -- Colin Watson Fri, 11 Sep 2009 15:40:38 +0100 + +grub2 (1.97~beta2-2ubuntu1) karmic; urgency=low + + * Resynchronise with Debian. Remaining changes: + + debian/control: + - Recommend rather than Suggest os-prober. + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu; holding down Shift at boot will show it. + + debian/templates.in: + - Change default value of grub2/linux_cmdline_default to "quiet + splash". + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - Add crashkernel= options if kdump and makedumpfile are available. + + debian/patches/951_quick_boot.diff: + - If other operating systems are installed, then automatically unhide + the menu. + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, + then fall back to a short delay interruptible with Escape. + + debian/patches/952_sleep_shift.diff: + - Allow Shift to interrupt 'sleep --interruptible'. + + debian/patches/954_normal_quiet.diff: + - Don't display introductory message about line editing unless we're + actually offering a shell prompt. + + debian/patches/955_really_quiet.diff: + - Remove some verbose messages printed before reading the + configuration file. + + debian/patches/956_linux_quiet.diff: + - If the environment variable "quiet" is set to something other than + 0, suppress progress messages as the kernel and initrd load. Set + this for non-recovery kernel menu entries. + + debian/patches/957_savedefault.diff, debian/rules: + - Add GRUB_DEFAULT=saved, as well as grub-set-default and grub-reboot + utilities. Provides functionality essentially equivalent to GRUB + Legacy's savedefault. + * Drop 953_no_eh_frame.diff, merged upstream. + + -- Colin Watson Mon, 07 Sep 2009 13:33:12 +0100 + +grub2 (1.97~beta2-2) unstable; urgency=low + + [ Updated translations ] + * Dutch (nl.po) by Paul Gevers. (Closes: #545050) + + [ Felix Zielcke ] + * Move GRUB Legacy's grub-set-default to /usr/lib/grub-legacy in + preparation for GRUB 2's grub-set-default. + * Remove password lines in bug script. + + [ Robert Millan ] + * Do not conflict with `grub' dummy package (this prevented upgrades). + * patches/003_grub_probe_segfault.diff: Disable file test codepath, which + wasn't normally used before. + + -- Felix Zielcke Sat, 05 Sep 2009 00:27:22 +0200 + +grub2 (1.97~beta2-1) unstable; urgency=low + + * New upstream beta release. + - Fix loading of FreeBSD modules. (Closes: #544305) + + [ Updated translations ] + * French (fr.po) by Christian Perrier. (Closes: #544320) + * Czech (cs.po) by Miroslav Kure. (Closes: #544327) + * Belarusian (be.po) by Hleb Rubanau. + * Arabic (ar.po) by Ossama M. Khayat. + * Catalan (ca.po) by Juan Andrés Gimeno Crespo. + * Russian (ru.po) by Yuri Kozlov. (Closes: #544730) + * Swedish (sv.po) by Martin Ågren. (Closes: #544759) + * Brazilian Portuguese (pt_BR.po) by Flamarion Jorge. (Closes: #544810) + * German (de.po) by Helge Kreutzmann. (Closes: #544912) + + [ Robert Millan ] + * Build with GCC 4.4. + + -- Robert Millan Fri, 04 Sep 2009 14:40:20 +0200 + +grub2 (1.97~beta1-1ubuntu4) karmic; urgency=low + + * Move grub-reboot and grub-set-default to grub-$platform, since + grub-common is also used by GRUB Legacy (LP: #424425). + + -- Colin Watson Fri, 04 Sep 2009 17:54:10 +0100 + +grub2 (1.97~beta1-1ubuntu3) karmic; urgency=low + + * Restore legacy version of grub-set-default, now moved to + /usr/lib/grub-legacy. + + -- Colin Watson Fri, 04 Sep 2009 15:35:19 +0100 + +grub2 (1.97~beta1-1ubuntu2) karmic; urgency=low + + * debian/patches/953_no_eh_frame.diff: Build with -fno-dwarf2-cfi-asm to + stop gcc-4.4 generating .eh_frame sections that cause core.img to be too + big to embed in some common cases (LP: #423412). + * debian/patches/954_normal_quiet.diff: Don't display introductory message + about line editing unless we're actually offering a shell prompt. + * debian/patches/955_really_quiet.diff: Remove some verbose messages + printed before reading the configuration file. In some ways this is + awkward because it makes debugging harder, but it's a requirement for a + smooth-looking boot process; we may be able to do better in future (LP: + #386922). + * debian/patches/956_linux_quiet.diff: If the environment variable "quiet" + is set to something other than 0, suppress progress messages as the + kernel and initrd load. Set this for non-recovery kernel menu entries + (LP: #386922). + * debian/patches/957_savedefault.diff: Add GRUB_DEFAULT=saved, as well as + grub-set-default and grub-reboot utilities. Provides functionality + essentially equivalent to GRUB Legacy's savedefault (LP: #216178). + * debian/rules, debian/grub-pc.install.in: Install grub-reboot and + grub-set-default only in grub-common. + * Add tag information to old Ubuntu patches. + + -- Colin Watson Fri, 04 Sep 2009 15:02:36 +0100 + +grub2 (1.97~beta1-1ubuntu1) karmic; urgency=low + + * Resynchronise with Debian. Remaining changes: + + debian/control: + - Recommend rather than Suggest os-prober. + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu; holding down Shift at boot will show it. + + debian/templates.in: + - Change default value of grub2/linux_cmdline_default to "quiet + splash". + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - Add crashkernel= options if kdump and makedumpfile are available. + + debian/patches/951_quick_boot.diff: + - If other operating systems are installed, then automatically unhide + the menu. + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the + menu, otherwise boot immediately. If keystatus is not available, + then fall back to a short delay interruptible with Escape. + + debian/patches/952_sleep_shift.diff: + - Allow Shift to interrupt 'sleep --interruptible'. + * Drop 950_getkeystatus.diff, merged upstream. + + -- Colin Watson Tue, 01 Sep 2009 17:37:19 +0100 + +grub2 (1.97~beta1-1) unstable; urgency=low + + * New upstream beta release. + + [ Updated translations ] + * German (de.po) by Helge Kreutzmann. (Closes: #544261) + * Asturian (ast.po) by Marcos. + * Georgian (ka.po) by Aiet Kolkhi. + + [ Robert Millan ] + * Merge config, templates, postinst, postrm, dirs and install files + into a single source. + * Disable Linux-specific strings on GNU/kFreeBSD. Enable translations + in grub2/linux_cmdline_default. Add grub2/kfreebsd_* strings (still + unused). + + -- Felix Zielcke Sun, 30 Aug 2009 18:01:40 +0200 + +grub2 (1.96+20090829-1) unstable; urgency=low + + * New SVN snapshot. + - Fix filesystem mapping on GNU/kFreeBSD. (Closes: #543950) + + * New grub-extras SVN snapshot. + - Add 915resolution support to the GMA500 (poulsbo) graphics chipset. + Thanks to Pedro Bulach Gapski. (Closes: #543917) + + * Use `cp -p' to copy /usr/share/grub/default/grub to the temporary + file to preverse permissions. + * Remove also efiemu files from /boot/grub on purge if requested. + * Check that GRUB_CMDLINE_LINUX and GRUB_CMDLINUX_LINUX_DEFAULT is at + the start of line in *.postinst. + * Don't check that $GRUB_CMDLINE_LINUX{,DEFAULT} are non empty strings + in *.config. + * Add empty GRUB_CMDLINE_LINUX to /usr/share/grub/default/grub. + * Factorise the editing of the temporary file. Thanks to Martin F + Krafft. + * Read in /etc/default/grub in *.config files. + + [ Updated translations ] + * French (fr.po) by Christian Perrier. (Closes: #544023) + * Russian (ru.po) by Yuri Kozlov. (Closes: #544077) + * Italian (it.po) by Luca Monducci. (Closes: #544200) + + -- Felix Zielcke Sat, 29 Aug 2009 17:01:17 +0200 + +grub2 (1.96+20090826-3ubuntu3) karmic; urgency=low + + * 951_quick_boot.diff: Always initialise timeout from GRUB_TIMEOUT, + otherwise there'll be no timeout when other operating systems are + installed. + + -- Colin Watson Thu, 27 Aug 2009 14:13:03 +0100 + +grub2 (1.96+20090826-3ubuntu2) karmic; urgency=low + + * 952_sleep_shift.patch: New patch. Allow Shift to interrupt 'sleep + --interruptible', for consistency with the quick-boot scheme. + * debian/*.templates: Change default value of grub2/linux_cmdline_default + to 'quiet splash', to match debian/default/grub. + + -- Colin Watson Thu, 27 Aug 2009 11:29:24 +0100 + +grub2 (1.96+20090826-3ubuntu1) karmic; urgency=low + + * Resynchronise with Debian (LP: #413151). Remaining changes: + + debian/control: + - Recommend rather than Suggest os-prober. + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + - Default to hiding the menu with a three-second timeout. Pressing + Escape during this time will show the menu. + + debian/grub.d/05_debian_theme: + - Set a monochromatic theme for Ubuntu. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - add crashkernel= options if kdump and makedumpfile + is available (part of the kernel-crashdump spec) + * Drop 950_hidden_timeout.diff, merged upstream. + * Drop 951_gfxpayload_keep.diff. It doesn't make as much sense as I + thought, and it needs better kernel support anyway. + * 950_getkeystatus.diff: New patch. Add getkeystatus terminal method, and + add a new keystatus command to query it. + * 951_quick_boot.diff: New patch: + - If other operating systems are installed, then automatically unhide + the menu (LP: #411584). + - Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the menu, + otherwise boot immediately. If keystatus is not available, then fall + back to a short delay interruptible with Escape. + * debian/default/grub: Adjust defaults to match new quick-boot code. + + -- Colin Watson Thu, 27 Aug 2009 00:35:22 +0100 + +grub2 (1.96+20090826-3) unstable; urgency=low + + * Add missing quotes in grub-pc.config and *.postinst. + + -- Felix Zielcke Wed, 26 Aug 2009 19:14:23 +0200 + +grub2 (1.96+20090826-2) unstable; urgency=low + + * Really use the correct templates in grub-pc.config. ARGS. + + -- Felix Zielcke Wed, 26 Aug 2009 14:10:41 +0200 + +grub2 (1.96+20090826-1) unstable; urgency=low + + * New SVN snapshot. + + * Use the right templates in grub-pc.config. (Closes: #543615) + + -- Felix Zielcke Wed, 26 Aug 2009 11:00:36 +0200 + +grub2 (1.96+20090825-1) unstable; urgency=low + + * New SVN snapshot. + - Enable gfxterm only if there's a suitable video backend and don't + print an error if not. (Closes: #520846) + + [ Felix Zielcke ] + * Copy unicode.pf2 instead of ascii.pf2 to /boot/grub in grub-pc + postinst (Closes: #542314). + * Update Standards version to 3.8.3. + * Use DEB_HOST_ARCH_CPU for the generation of the lintian overrides. + * Fix calling the grub-pc/postrm_purge_boot_grub template in + grub-pc.postinst. + * Handle GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT via + debconf. Thanks to Martin F. Krafft and Colin Watson for idea and + hints. + * Use ucfr --force when /etc/default/grub is registered to a grub-* package. + * Use #!/bin/sh in *.config and fix a small bashism in grub-pc.config. + + [ Robert Millan ] + * patches/907_terminal_output_workaround.diff: Remove. It seems that + it wasn't really necessary. + * grub-pc.postinst: Avoid printing an error if /etc/kernel-img.conf + doesn't exist, because it is misleading. We simply refrain from + fixing it and move along. + * grub-pc.postinst: Don't schedule generation of grub.cfg via "grub-install" + code path unless we actually run grub-install. + * grub-pc.postinst: Only copy unicode.pf2 and moreblue-orbit-grub.png when + /boot/grub/grub.cfg is scheduled to be generated. + * legacy/upgrade-from-grub-legacy: Reset grub-pc/install_devices. + Thanks Colin Watson. (Closes: #541230) + + -- Felix Zielcke Tue, 25 Aug 2009 21:45:24 +0200 + +grub2 (1.96+20090808-1) unstable; urgency=low + + * New SVN snapshot. + - Fix XFS with inode size different then 256. (Closes: #528761) + - Add support for multiple LVM metadata areas. (LP: #408580) + - patches/008_dac_palette_width.diff: Remove. (merged) + - Prefer unicode over ascii font. (LP: #352034) + + [ Felix Zielcke ] + * Fix the generation of the lintian override for efiemu64.o. + * Remove the Conflicts dmsetup. + * Use ?= for setting DEB_HOST_ARCH. + * Document GRUB_DISABLE_LINUX_RECOVERY in /etc/default/grub. + (Closes: #476536 LP: #190207) + * Add docs/grub.cfg to examples. + * patches/01_uuids_and_lvm_dont_play_along_nicely.diff: Updated to + also disable UUIDs on LVM over RAID. + * Add a debconf prompt to remove all grub2 files from /boot/grub on + purge. (Closes: #527068, #470400) + * Move the Suggests: os-prober from grub-pc to grub-common. + * patches/901_dpkg_version_comparison.diff: Updated. + * Update the Replaces on grub-common for the other packages to (<< + 1.96+20080831-1). (Closes: #540492) + + [ Robert Millan ] + * Reorganize grub-pc.{config,postinst} logic. The idea being that if there's + no trace of GRUB Legacy, the grub-pc/install_devices template will be + shown even if this is the first install. + * When setting grub-pc/install_devices, obtain input dynamically from + grub-mkdevicemap (rather than devices.map). (Closes: #535525) + * Add a note to grub-pc/install_devices template that it's also possible + to install GRUB to a partition boot record. + * patches/002_grub.d_freebsd.in.diff: New patch. Reimplement + 10_freebsd.in to handle multiple kernel versions & acpi.ko. + + -- Robert Millan Mon, 10 Aug 2009 18:49:52 +0200 + +grub2 (1.96+20090725-1ubuntu2) karmic; urgency=low + + * 950_hidden_timeout.diff: New patch. Add GRUB_HIDDEN_TIMEOUT support. + Move the timeout setting to the end so that the sleep comes after + terminal setup. + * debian/default/grub: Default to hiding the menu with a three-second + timeout. Pressing Escape during this time will show the menu. + grub-installer will unhide it if other operating systems are installed. + * debian/grub.d/05_debian_theme: Set a monochromatic theme for Ubuntu. + * 951_gfxpayload_keep.diff: New patch. If gfxpayload starts with "keep" or + if GRUB_ASSUME_LINUX_HAS_FB_SUPPORT is defined, then tell Linux to use + the current video mode. + + -- Colin Watson Mon, 10 Aug 2009 13:08:21 +0100 + +grub2 (1.96+20090725-1ubuntu1) karmic; urgency=low + + * New upstream version. + + Fixes offering Windows (LP: #402795) + + Fixes Vista/Win7 fails to boot (LP: #402154) + + Fixes installation onto VFAT (LP: #401971) + * Merge from debian unstable, remaining changes: + + debian/control: + - Depend on rather than Suggest os-prober; Ubuntu version does not + suffer from the mount problem that prevents Debian from marking this + Depends. + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use new GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + + debian/patches/10_crashkernel.patch: + - add crashkernel= options if kdump and makedumpfile + is available (part of the kernel-crashdump spec) + * Update 10_crashkernel.patch for changes upstream. + * Drop 999_os-prober_drivemap_root.diff, upstream. + + -- Mario Limonciello Thu, 30 Jul 2009 12:41:19 -0500 + +grub2 (1.96+20090725-1) unstable; urgency=high + + * New SVN snapshot. + - Don't add drivemap call with Windows Vista/7. It breaks Win 7. + (LP: #402154) + + [ Felix Zielcke ] + * Don't build grub-efi-amd64 on hurd-i386. + * Change DEB_BUILD_ARCH to DEB_HOST_ARCH in the check for sparc. + * Don't add the lintian override for kernel.img for sparc and grub-pc. + * Add a lintian override for binary-from-other-architecture for + grub-efi-amd64 and grub-pc on i386. + * Use wildcards in the lintian overrides. + * Add a Conflicts/Replaces for all packages except grub-common. + (Closes: #538177) + + [ Robert Millan ] + * 008_dac_palette_width.diff: New patch. Fix blank screen when booting + Linux with vga= parameter set to a packed color mode (<= 8-bit). + (Closes: #535026) + * Set urgency=high because #535026 affects 1.96+20090709-1 which is in + testing now. + * patches/907_terminal_output_workaround.diff: Work around recent regression + with terminal_output command (not critical, just breaks gfxterm). + + -- Robert Millan Sat, 25 Jul 2009 19:00:53 +0200 + +grub2 (1.96+20090721-4) unstable; urgency=low + + * Place grub-ofpathname only in grub-common. (Closes: #537999) + + -- Felix Zielcke Wed, 22 Jul 2009 13:38:24 +0200 + +grub2 (1.96+20090721-3) unstable; urgency=low + + * Don't strip kernel.img on sparc. + * Suggest efibootmgr on grub-efi-{amd64,ia32}. + * Pass --disable-grub-fstest to configure. (Closes: #537897) + + -- Felix Zielcke Tue, 21 Jul 2009 21:46:01 +0200 + +grub2 (1.96+20090721-2) unstable; urgency=low + + * Add back Conflicts/Replaces grub. + + -- Felix Zielcke Tue, 21 Jul 2009 11:24:45 +0200 + +grub2 (1.96+20090721-1) unstable; urgency=low + + * New SVN snapshot. + + * Change License of my update-grub(8) and update-grub2(8) manpages to + GPL3+ to match new copyright file. + * Merge from Ubuntu: Don't build grub-efi-amd64 on lpia. + * Don't pass `--enable-efiemu' to configure. On kfreebsd-i386 it won't + compile and it should be now auto detected if it's compilable. + (Closes: #536783) + * Don't build grub-efi-amd64 on kfreebsd-i386. It lacks 64bit compiler + support. + * Rename the lintian override for kernel.elf to kernel.img. + * Strip kernel.img not kernel.elf, but not in the case of grub-pc. + * Rename the Conflicts/Replaces grub to grub-legacy. (Closes: #537824) + + -- Felix Zielcke Tue, 21 Jul 2009 10:50:20 +0200 + +grub2 (1.96+20090709-1) unstable; urgency=low + + * New SVN snapshot. + + * control (Build-Depends): Add gcc-multilib [sparc]. + * copyright: Rewrite using DEP-5 format. + * Merge grub-extras into the package, and integrate it with GRUB's + build system. + - patches/906_grub_extras.diff + - rules + - copyright + + -- Robert Millan Thu, 09 Jul 2009 00:26:49 +0200 + +grub2 (1.96+20090702-1) unstable; urgency=low + + * New SVN snapshot. + * rules: Remove duplicated files in sparc64-ieee1275 port. + * rules: Comment out -DGRUB_ASSUME_LINUX_HAS_FB_SUPPORT=1 setting. We'll + re-evaluate using it when it's more mature. (Closes: #535026). + + -- Robert Millan Thu, 02 Jul 2009 13:23:51 +0200 + +grub2 (1.96+20090629-1) unstable; urgency=low + + * New SVN snapshot. + - Misc fixes in Linux loader. + + * control (grub-firmware-qemu): Make it buildable only on i386/amd64. + * control: Add sparc (grub-ieee1275), remove remnants of ppc64. + * rules: Include all modules in grub-firmware-qemu build. + + -- Robert Millan Mon, 29 Jun 2009 19:22:37 +0200 + +grub2 (1.96+20090628-1) unstable; urgency=low + + * New SVN snapshot. + * Re-enable QEMU port. + + -- Robert Millan Sun, 28 Jun 2009 01:11:10 +0200 + +grub2 (1.96+20090627-2) unstable; urgency=low + + * Disable QEMU port untill it goes through NEW. + * Upload to unstable. + + -- Robert Millan Sat, 27 Jun 2009 18:40:17 +0200 + +grub2 (1.96+20090627-1) experimental; urgency=low + + * New SVN snapshot. + - Fix parsing of --output in grub-mkconfig. (Closes: #532956) + + [ Felix Zielcke ] + * Use ucfr --force in grub-ieee1275.postinst in case we're upgrading + from previous version. It registered /etc/default/grub wrongly with + package iee1275. + * Drop the build dependency on libc6-dev-i386. + * Remove ppc64 from the Architectures. It's totally dead. + * Add a note to /etc/default/grub that update-grub needs to be run to + update grub.cfg. (Closes: #533026) + * Fix the svn-snapshot rule. + * Update Standards version to 3.8.2. No changes needed. + + [ Robert Millan ] + * legacy/upgrade-from-grub-legacy: Invoke grub-pc.postinst directly rather + than dpkg-reconfigure. Since we pretend we're upgrading, it will DTRT. + * Add grub-firmware-qemu package. + - patches/008_qemu.diff: QEMU port (patch from upstream). + - control (grub-firmware-qemu): New package. + - rules: Add grub-firmware-qemu targets. + - debian/grub-firmware-qemu.dirs + - debian/grub-firmware-qemu.install + * patches/906_revert_to_linux16.diff: Remove, now that gfxpayload is + supported. + + -- Robert Millan Sat, 27 Jun 2009 00:46:23 +0200 + +grub2 (1.96+20090611-1ubuntu4) karmic; urgency=low + + * debian/patches/10_crashkernel.diff: + - make crashkernel= commandline appear before the other options + to workaround a bug in the crashkernel parser + (http://lists.infradead.org/pipermail/kexec/2009-July/003444.html) + + -- Michael Vogt Thu, 16 Jul 2009 11:37:05 +0200 + +grub2 (1.96+20090611-1ubuntu3) karmic; urgency=low + + * Drop os-prober to a Recommends at Felix Zielcke's suggestion. + * Don't build grub-efi-amd64 on lpia for the moment, since we don't seem + to have sufficient compiler support. + + -- Colin Watson Wed, 08 Jul 2009 16:25:58 +0100 + +grub2 (1.96+20090611-1ubuntu2) karmic; urgency=low + + * 10_crashkernel.patch: + - add crashkernel= options if kdump and makedumpfile + is available (part of the kernel-crashdump spec) + + -- Michael Vogt Wed, 24 Jun 2009 10:19:57 +0200 + +grub2 (1.96+20090611-1ubuntu1) karmic; urgency=low + + * Resynchronise with Debian. Remaining changes: + + debian/control: + - Depend on rather than Suggest os-prober; Ubuntu version does not + suffer from the mount problem that prevents Debian from marking this + Depends. + + debian/default/grub: + - Adjust for default Ubuntu boot options. + - Use new GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + + debian/legacy/update-grub: + - Apply Ubuntu branding: title, recovery mode, quiet option, and tweak + how memtest86+ is displayed. + - Use UUIDs where appropriate. + + debian/patches/03_ubuntu_grub_standards: + - Remove GNU/Linux from default string. + * debian/patches/999_os-prober_drivemap_root.diff: + - Backport r2333 from upstream to fix chain-loading of operating systems + detected by os-prober. + + -- Colin Watson Wed, 17 Jun 2009 12:05:47 +0100 + +grub2 (1.96+20090611-1) experimental; urgency=low + + * New SVN snapshot. + + * Append .diff to patches/01_uuids_and_lvm_dont_play_along_nicely so + it gets really applied. + * Drop completely the build dependency on gcc-multilib. + * Instead of arborting in the preinst if /etc/kernel-img.conf still + contains /sbin/update-grub, change the file with sed. Policy allows + thisi, because it's not a conffile, according to Colin Watson. + * Change /etc/default/grub to an ucf managed file instead of dpkg + conffile. + + -- Felix Zielcke Fri, 12 Jun 2009 11:46:24 +0200 + +grub2 (1.96+20090609-1) experimental; urgency=low + + * New SVN snapshot. + - Fix variable parsing inside strings. (Closes: #486180) + - Add `true' command. (Closes: #530736) + + [ Robert Millan ] + * Split grub-efi in grub-efi-ia32 and grub-efi-amd64, both available + on i386 and amd64. (Closes: #524756) + * Add kopensolaris-i386 to arch list. + + [ Felix Zielcke ] + * Add a NEWS entry about the grub-efi split. + * Drop the build dependency on gcc-multilib for all *i386. + * Change upgrade-from-grub-legacy to use `dpkg-reconfigure grub-pc' to + install grub2 into MBR. + + [ New translations ] + * Catalan (ca.po) by Jordi Mallach. + + [ Updated translations ] + * Spanish (es.po) by Francisco Javier Cuadrado. (Closes: #532407) + + -- Jordi Mallach Tue, 09 Jun 2009 19:21:15 +0200 + +grub2 (1.96+20090603-1) unstable; urgency=low + + * New SVN snapshot. + + * Abort the install of grub-pc if /etc/kernel-img.conf still contains + /sbin/update-grub (Closes: #500631). + + -- Felix Zielcke Wed, 03 Jun 2009 20:01:11 +0200 + +grub2 (1.96+20090602-1) unstable; urgency=low + + * New SVN snapshot. + + [ Felix Zielcke ] + * Skip floopies in the grub-install debconf prompt in grub-pc postinst. + Patch by Fabian Greffrath. (Closes: #530848) + + [ Robert Millan ] + * Change Vcs-Browser field to viewsvn. + + [ Felix Zielcke ] + * Change Vcs-Svn field to point to the trunk. (Closes: #531391) + * patches/01_uuids_and_lvm_dont_play_along_nicely: New patch. + On Debian root=UUID= with lvm still doestn't work so disable it. + (Closes: #530357) + * Remove Otavio Salvador from Uploaders with his permission. + * add grub-pc.preinst + + -- Felix Zielcke Wed, 03 Jun 2009 14:42:11 +0200 + +grub2 (1.96+20090523-1ubuntu1) karmic; urgency=low + + [ Colin Watson ] + * Resynchronise with Debian. Remaining changes: + + debian/control: + - Depend on rather than Suggest os-prober; Ubuntu version does not + suffer from the mount problem that prevents Debian from marking this + Depends. + + debian/default/grub + - Adjust for default Ubuntu boot options. + - Use new GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + + debian/patches/03_ubuntu_grub_standards + - Remove GNU/Linux from default string. + * debian/legacy/update-grub: Apply Ubuntu branding: title, recovery mode, + quiet option, and tweak how memtest86+ is displayed. + + [ Andy Whitcroft ] + * debian/legacy/update-grub: fix generation to use the uuid command for + the root specifier when the groot is a UUID. Use the same test as is + used in the 'grub' package. LP: #376879 + + -- Colin Watson Thu, 04 Jun 2009 11:20:12 +0100 + +grub2 (1.96+20090523-1) unstable; urgency=low + + * New SVN snapshot. + - Add drivemap command, similar to grub-legacy's map command. + (Closes: 503630) + - Export GRUB_TERMINAL_INPUT in grub-mkconfig. (Closes: #526741) + + [ Robert Millan ] + * rules: Set GRUB_ASSUME_LINUX_HAS_FB_SUPPORT=1 in CFLAGS. + * patches/905_setup_force.diff: Relax blocklist warnings. + * patches/906_revert_to_linux16.diff: Keep using linux16 for now. + + [ Felix Zielcke ] + * patches/07_core_in_fs.diff: Updated. + * Remove /etc/grub.d/10_hurd on non-Hurd systems in the grub-common + preinst. Likewise for 10_freebsd for non kFreebsd and 10_linux on + kFreebsd and Hurd. (Closes: #523777) + + -- Felix Zielcke Sat, 23 May 2009 20:05:10 +0200 + +grub2 (1.96+20090504-1) experimental; urgency=low + + * New SVN snapshot. + - Add support for parttool command, which can be used to hide partitions. + (Closes: #505905) + - Fix a segfault with LVM on RAID. (Closes: #520637) + - Add support for char devices on (k)FreeBSD. (Closes: #521292) + - patches/08_powerpc-ieee1275_build_fix.patch: Remove (merged). + + [ Updated translations ] + * Basque (eu.po) by Piarres Beobide. (Closes: #522457) + * German (de.po) by Helge Kreutzmann. (Closes: #522815) + + [ Robert Millan ] + * Update my email address. + * Remove 04_uuids_and_abstraction_dont_play_along_nicely.diff now that + bugs #435983 and #455746 in mdadm and dmsetup have been fixed. + + [ Felix Zielcke ] + * Place new grub-dumpbios in grub-common. + * Add lpia to the archictectures to reduce the ubuntu delta. + * Add a manpage for the update-grub and update-grub2 stubs, written by + me. (Closes: #523876) + * Suggest genisoimage on grub-pc and grub-ieee1275, because grub-mkrescue + needs it to create a cd image. (Closes: #525845) + * Add a dependency on $(AUTOGEN_FILES) for the configure/grub-common target, + this is needed now that upstream removed the autogenerated files from SVN. + * Add `--enable-efiemu to' `./configure' flags. + * Add a build dependency on gcc-multilib for i386. + * Drop alternate build dependency on gcc-4.1 (<< 4.1.2). + + -- Felix Zielcke Mon, 04 May 2009 21:01:22 +0200 + +grub2 (1.96+20090402-1) experimental; urgency=low + + * New SVN snapshot. + - Fix regression in disk/raid.c. (Closes: #521897, #514338) + - Fix handling of filename string lengths in HFS. + (Really closes: #516458). + * Add myself to Uploaders. + * Add patch 08_powerpc-ieee1275_build_fix.patch to fix powerpc-ieee1275 + builds which were lacking header files for kernel_elf_HEADERS. Thanks + Vladimir Serbinenko. + + -- Jordi Mallach Fri, 03 Apr 2009 20:58:37 +0200 + +grub2 (1.96+20090401-1) experimental; urgency=low + + [ Felix Zielcke ] + * New SVN snapshot. + - Pass grub's gfxterm mode to Linux kernel. (Closes: #519506) + - Fix ext4 extents on powerpc. (Closes: #520286) + + [ Robert Millan ] + * Remove grub-of transitional package (Lenny had grub-ieee1275 already). + * Fix kopt parsing in grub-pc.config. Thanks Marcus Obst. (Closes: #514837) + * Add debconf template to automatically run grub-install during upgrades + (prior user confirmation). (Closes: #514705) + + -- Robert Millan Wed, 01 Apr 2009 01:19:45 +0200 + +grub2 (1.96+20090317-1) unstable; urgency=low + + * New SVN snapshot. + - Fix loading of files with underscore in HFS. (Closes: #516458) + + * Update Standards version to 3.8.1. No changes needed. + + [ Updated translations ] + * Brazilian Portuguese (pt_BR.po) by Flamarion Jorge. (Closes: #519417) + + -- Felix Zielcke Tue, 17 Mar 2009 14:42:10 +0100 + +grub2 (1.96+20090309-1) unstable; urgency=low + + * New SVN snapshot. + + -- Felix Zielcke Mon, 09 Mar 2009 10:03:13 +0100 + +grub2 (1.96+20090307-1) unstable; urgency=low + + * New SVN snapshot. + - Add support for /dev/md/dNNpNN mdraid devices. (Closes: #509960) + - Add new PF2 fontengine. (Closes: #510344) + - Avoid mounting ext2 partitions with backward-incompatible features. + (Closes: #502333) + - Try to avoid false positives with FAT. (Closes: #514263) + + [ Felix Zielcke ] + * Remove build-dependency on unifont package and add one for bf-utf-source + package and libfreetype6-dev + * grub-pc.postinst: Copy new ascii.pf2 instead of old ascii.pff to /boot/grub. + * Add `--enable-grub-mkfont' to configure flags. + * Put new grub-mkfont in grub-common package. + * Add a dependency for ${misc:Depends} to all packages to make lintian a bit + more happy. + * Detect when grub-setup leaves core.img in filesystem, and include that + info in bug report templates. + - debian/patches/07_core_in_fs.diff + - debian/script + * Add myself to Uploads and add `DM-Upload-Allowed: yes' tag. + + [ Updated translations ] + * Asturian (ast.po) by Marcos Alvarez Costales. (Closes: #511144) + * Traditional Chinese (zh_TW.po) by Tetralet. (Closes: #513918) + * Belarusian (be.po) by Pavel Piatruk. (Closes: #516243) + + -- Felix Zielcke Sat, 07 Mar 2009 11:54:43 +0100 + +grub2 (1.96+20081201-1) experimental; urgency=low + + * New SVN snapshot. + + -- Robert Millan Mon, 1 Dec 2008 00:07:31 +0100 + +grub2 (1.96+20081120-1) experimental; urgency=low + + * New SVN snapshot. + + * Update to new debian theme. + - grub-pc.postinst: Switch to moreblue-orbit-grub.png. + - grub.d/05_debian_theme: Likewise. + * grub.d/05_debian_theme: + - Update to use new grub-mkconfig_lib instead of the deprecated + update-grub_lib. + - Update to check if `GRUB_TERMINAL_OUTPUT' is `gfxterm' instead of + `GRUB_TERMINAL'. + + [ Updated translations ] + * Romanien (ro.po) by Eddy Petrișor. (Closes: #506039) + + -- Felix Zielcke Thu, 20 Nov 2008 20:25:56 +0100 + +grub2 (1.96+20081108-1) experimental; urgency=low + + * New SVN snapshot. + - Add support for /dev/md/N style mdraid devices. (Closes: #475585) + - Handle LVM dash escaping. (Closes: #464215) + - Use case insensitive match in NTFS. (Closes: #497889) + - Use hd%d drive names in grub-mkdevicemap for all architectures. + (Closes: #465365) + - Handle LVM circular metadata. (Closes: #462835, #502953) + - Fix NULL dereference and failure paths in LVM. Thanks Guillem Jover. + (Closes: #500482) + - Provides GRUB header files (only in grub-common). + + [ Updated translations ] + * Dutch (nl.po) by Paul Gevers. (Closes: #500514) + * French (fr.po) by Christian Perrier. (Closes: #503708) + * Georgian (ka.po) by Aiet Kolkhi. (Closes: #503715) + * Czech (cs.po) by Miroslav Kure. (Closes: #503809) + * German (de.po) by Helge Kreutzmann. (Closes: #503841) + * Japanese (ja.po) by Hideki Yamane. (Closes: #503869) + * Italian (it.po) by Luca Monducci. (Closes: #504076) + * Swedish (sv.po) by Martin Ågren. (Closes: #504207) + * Arabic (ar.po) by Ossama Khayat. (Closes: #504254) + * Portuguese (pt.po) by Miguel Figueiredo. (Closes: #504280) + * Russian (ru.po) by Yuri Kozlov. (Closes: #504324) + * Finnish (fi.po) by Esko Arajärvi. (Closes: #504310) + * Basque (eu.po) by Piarres Beobide. (Closes: #504466) + * Dutch (nl.po) by Paul Gevers. (Closes: #504683) + + [ Felix Zielcke ] + * patches/01_grub_legacy_0_based_partitions.diff: Rename to + * patches/903_grub_legacy_0_based_partitions.diff: this and adapt for + s/biosdisk.c/hostdisk.c/ rename upstream. + * patches/03_disable_floppies.diff + patches/904_disable_floppies.diff: Likewise. + * update-grub has been renamed to grub-mkconfig, so provide a stub for + compatibility. + * Make grub-pc/linux_cmdline debconf template translatable. (Closes: #503478) + * Remove ro.po and ta.po. They don't contain a single translated + message. + + [ Robert Millan ] + * control: Make grub-common dependency = ${binary:Version}. + * default/grub: Set GRUB_CMDLINE_LINUX=quiet to syncronize with + default D-I settings. + + -- Robert Millan Sat, 8 Nov 2008 13:54:10 +0100 + +grub2 (1.96+20080831-1) experimental; urgency=low + + * New SVN snapshot. + - patches/00_fix_double_prefix.diff: Remove (merged). (Closes: #487565) + - patches/00_getline.diff: Remove (merged). (Closes: #493289) + - Handle errors in RAID/LVM scan routine (rather than letting the upper + layer cope with them). (Closes: #494501, #495049) + - patches/901_linux_coreboot.diff: Remove (replaced). + - Add support for GFXMODE variable (Closes: #493106) + - Skips /dev/.* in grub-probe. (Closes: #486624) + - RAID code has various fixes. (Closes: #496573) + - Buffered file read is now used to read the background image faster. + (Closes: #490584) + + * We are already using LZMA, because upstream includes it's own lzma encoder, + so drop completely the liblzo handling in control and rules files. + + [ Felix Zielcke ] + * Remove the 1.95 partition numbering transition debconf warning + from grub2 package and removed it from all languages (*.po). + (Closes: #493744) + * Add a comment for the new GFXMODE in default/grub. + * debian/rules: + - Remove 2 ./configure options which it didn't understand. + - New grub-mkelfimage belongs to grub-common. + * debian/control: + - Change debhelper compat level to 7 and build depend on it >= 7. + - Remove ${misc:Depend} dependency on all packages except grub-pc which is + the only one using debconf. + - Replace deprecated ${Source-Version} with ${source:Version} for << + dependency and with ${build:Version} for = ones. + - Remove versioned dependency of Build-Depends patchutils and cdbs, + because etch has newer versions then the one used. + - Remove dpkg-dev completely from Build-Depends because it's + build-essentail and a non versioned dependency results in a lintian error. + - Remove Conflict/Replaces pupa, it has been removed from Debian 2004. + - Change build-dependency of unifont-bin to unifont (>= 1:5.1.20080820), + it's the new package containing unifont.hex and that version to avoid + licensing problems (Closes: #496061) + - Remove Jason Thomas from Uploaders with his permission. + * Preserve arguments in update-grub2 stub. (Closes: #496610) + + [ Updated translations ] + * Japanese (ja.po) by Hideki Yamane (Closes: #493347) + + [ Robert Millan ] + * Move a few files to grub-common and remove them from the arch- + specific packages. + * patches/02_old_linux_version_comparison.diff: Replace with ... + * patches/901_dpkg_version_comparison.diff: ... this. + Use dpkg --compare-versions in update-grub. (Closes: #494158) + * patches/03_disable_floppies.diff: Free .drive struct member when skipping + floppy drives. (Closes: #496040) + * patches/902_boot_blocklist_hack.diff: Support separate /boot when using + blocklists. (Closes: #496820, #489287, #494589) + + -- Robert Millan Sun, 31 Aug 2008 18:40:09 +0200 + +grub2 (1.96+20080730-1) experimental; urgency=low + + * New SVN snapshot. + - patches/00_fix_overflow.diff: Remove (merged). + - patches/00_uuid_boot.diff: Remove (merged). + - patches/00_raid_duped_disks.diff: Remove (merged). + - patches/00_xfs.diff: Remove (merged). + - patches/00_strengthen_apple_partmap_check.diff: Remove (merged). + - patches/00_skip_dev_dm.diff: Remove (merged). + + * patches/901_linux_coreboot.diff: Implements Linux load on Coreboot + (patch from Coresystems). + + * grub-linuxbios -> grub-coreboot rename again. + + -- Robert Millan Wed, 30 Jul 2008 22:12:07 +0200 + +grub2 (1.96+20080724-12ubuntu2) jaunty; urgency=low + + * Build for lpia. + + -- Colin Watson Wed, 25 Feb 2009 18:28:37 +0000 + +grub2 (1.96+20080724-12ubuntu1) jaunty; urgency=low + + * Merge from Debian Unstable (LP: #298872, LP: #256578). + Remaining Ubuntu changes: + + debian/control: + - Depend on rather than Suggest os-prober; Ubuntu version does not + suffer from the mount problem that prevents Debian from marking this + Depends. + + debian/default/grub + - Adjust for default Ubuntu boot options. + - Use new GRUB_CMDLINE_LINUX_DEFAULT option to set "quiet splash" for + default items only. These options won't be set in single user mode. + + debian/patches/03_ubuntu_grub_standards + - Remove GNU/Linux from default string. + * New upstream snapshot includes ext4 extents support (LP: #294763) + * Debian patch 02_dpkg_version_comparison.diff fixes kernel ordering + (LP: #215513) + * debian/patches/04_uuids_and_abstraction_dont_play_along_nicely: + + Drop. Ubuntu's mdadm and lvm properly populate /dev/disk/by-uuid, so + this workaround is unnecessary. + * debian/changelog: + + Drop duplicated 1.96+20080203-1ubuntu2 and 1.96+20080203-1ubuntu1 + entries. We only really need them in there once! + * Drop debian/patches/04_convert_root_uuid: + - GRUB2 upstream now uses UUIDs when possible. + + -- Christopher James Halse Rogers Mon, 17 Nov 2008 10:06:18 +1100 + +grub2 (1.96+20080724-4) unstable; urgency=high + + * patches/00_fix_overflow.diff: fix overflow with a big grub.cfg. + (Closes: #473543) + + -- Felix Zielcke Tue, 29 Jul 2008 17:10:59 +0200 + +grub2 (1.96+20080724-3) unstable; urgency=low + + [ Felix Zielcke ] + * changed dependency for debconf to also support debconf-2.0. (Closes: #492543) + * patches/00_xfs.diff: Fix "out of partition" error with XFS. + (Closes: #436943) + + [ Robert Millan ] + * patches/00_raid_duped_disks.diff: Do not abort when two RAID disks with + the same number are found. (Closes: #492656) + * patches/00_strengthen_apple_partmap_check.diff: Be more strict when probing + for Apple partition maps (this prevents false positives on i386-pc + installs). (Closes: #475718) + + -- Robert Millan Tue, 29 Jul 2008 00:48:01 +0200 + +grub2 (1.96+20080724-2) unstable; urgency=high + + [ Felix Zielcke ] + * fixed lintian override for kernel.elf + * debian/rules: changed cvs targets to use svn + + [ Robert Millan ] + * patches/00_skip_dev_dm.diff: Skip /dev/dm-[0-9] devices also (implicitly) + for RAID. (Closes: #491977) + * patches/00_uuid_boot.diff: Fix cross-disk installs by using UUIDs. + (Closes: #492204) + + -- Robert Millan Sat, 26 Jul 2008 01:06:07 +0200 + +grub2 (1.96+20080724-1) unstable; urgency=high + + * New SVN snapshot. + - Support for ext4dev extents. + - patches/00_speed_up_font_load.diff: Remove (merged). + + [ Felix Zielcke ] + * upgrade-from-grub-legacy now calls update-grub if grub.cfg doestn't exist + and prints a big warning if it failed. + * Update Standards version to 3.8.0. No changes need. + * Added Build-Dep for po-debconf and a lintian override, to make it happy. + + [ Updated translations ] + * Swedish (sv.po) by Martin Ågren (Closes: #492056) + + [ Robert Millan ] + * Revert r844. grub-coreboot is stuck on NEW, and it was too early + for branching. + + -- Robert Millan Thu, 24 Jul 2008 13:27:53 +0200 + +grub2 (1.96+20080717-1) experimental; urgency=low + + * New SVN snapshot. + - Provides LZMA support (not yet used in the package). + - Fix grub-mkrescue manpage generation. (Closes: #489440) + + * Rename grub-linuxbios to grub-coreboot (and leave a dummy grub-linuxbios + package to handle upgrades). + + [ Updated translations ] + * Spanish (es.po) by Maria Germana Oliveira Blazetic (Closes: #489877) + * Portuguese (pt.po) by Ricardo Silva (Closes: #489807) + + -- Robert Millan Sat, 12 Jul 2008 17:47:09 +0200 + +grub2 (1.96+20080704-2) unstable; urgency=high + + * patches/02_old_linux_version_comparison.diff: Set interpreter to /bin/bash. + (Closes: #489426, #489446) + + -- Robert Millan Mon, 7 Jul 2008 15:17:58 +0200 + +grub2 (1.96+20080704-1) unstable; urgency=high + + * New SVN snapshot. + * default/grub: Add commented example to disable graphical terminal. + * Use substvars to support linking with liblzo1. + * Bring 03_disable_floppies.diff to pre-r805 state. (Closes: #488375) + * patches/02_old_linux_version_comparison.diff: New patch. Steal version + comparison code from GRUB Legacy's update-grub. (Closes: #464086, #489133) + * patches/00_speed_up_font_load.diff: New patch. Generate font files with + only the needed characters. (Closes: #476479, #477083) + + -- Robert Millan Fri, 4 Jul 2008 21:39:07 +0200 + +grub2 (1.96+20080626-1) unstable; urgency=high + + * New CVS snapshot. + - Avoids passing UUID to Linux when not using initrd. (Closes: #484228) + - patches/04_uuids_and_abstraction_dont_play_along_nicely.diff: Resync. + + -- Robert Millan Thu, 26 Jun 2008 16:43:48 +0200 + +grub2 (1.96+20080621-1) unstable; urgency=high + + * Urgency set to "high" because of #482688. + * New CVS snapshot. + - Fix module load hook in prepare_grub_to_access_device(). + (Closes: #486804) + - Call prepare_grub_to_access_device() before accessing devices, never + afterwards. (Closes: #487198) + * grub.d/05_debian_theme: Prefer /boot/grub over /usr for image + loading, since chances are it's less LVMed. + + -- Robert Millan Sat, 21 Jun 2008 15:52:48 +0200 + +grub2 (1.96+20080617-1) unstable; urgency=low + + * New CVS snapshot. + - Supports IDA block devices. (Closes: #483858) + - Fixes some problems in ext2/ext3. (Closes: #485068, #485065) + - Uses EUID instead of UID in update-grub. (Closes: #486043, #486039, + #486040, #486041). + - Fixes incomplete I2O device support. Thanks Sven Mueller. + (Closes: #486505) + - Fixes recent regressions in fs/ext2.c. (Closes: #485279) + - Only use UUIDs when requested device is not the same as the one + providing /boot. (Closes: #486119) + - patches/02_libgcc_powerpc_hack.diff: Remove. Probably not needed + anymore. + - patches/04_uuids_and_abstraction_dont_play_along_nicely.diff: Update. + * patches/06_olpc_prefix_hack.diff: Hardcode prefix to (sd,1) on OLPC. + * Refurbish 03_disable_floppy_support_in_util_biosdisk.diff into + 03_disable_floppies.diff. + + -- Robert Millan Tue, 17 Jun 2008 01:07:52 +0200 + +grub2 (1.96+20080601-2) unstable; urgency=low + + * 04_run_grub_mkdevicemap_when_grub_probe_fails.diff: Remove. Argueably + makes grub-probe unreliable and is quite annoying. + * 04_uuids_and_abstraction_dont_play_along_nicely.diff: New patch. Disable + UUID parameter to Linux when LVM or dmRAID is in use. (Closes: #484228) + This is a workaround for bug #484297 in udev. + + -- Robert Millan Tue, 3 Jun 2008 16:29:53 +0200 + +grub2 (1.96+20080601-1) unstable; urgency=low + + * New CVS snapshot. + - patches/06_backward_compat_in_uuid_support.diff: Merged. + - Fixes NULL pointer dereference in biosdisk.c. (Closes: #483895, #483900) + - Extends UUID support for XFS and ReiserFS. + + -- Robert Millan Sun, 1 Jun 2008 15:44:08 +0200 + +grub2 (1.96+20080531-1) unstable; urgency=low + + * New CVS snapshot. + - Work around BIOS bug affecting keyboard on macbooks. (Closes: #482860) + - Adjust grub.d/05_debian_theme to use the new UUID-compatible API. + - default/grub: Add commented GRUB_DISABLE_LINUX_UUID variable. + - patches/06_backward_compat_in_uuid_support.diff: New. Make update-grub + generate code that is compatible with older GRUB installs. + - util/biosdisk.c no longer complains about duplicated device.map entries. + (Closes: #481236) + + [ Updated translations ] + * Galician (gl.po) by Jacobo Tarrio (Closes: #480977) + + -- Robert Millan Sat, 31 May 2008 00:02:54 +0200 + +grub2 (1.96+20080512-1ubuntu2) intrepid; urgency=low + + [ Onkar Shinde ] + * debian/patches: + - Add 03_ubuntu_grub_standards to remove GNU/Linux from the + default string. (LP: #192955) Don't show splash screen or quiet mode + in single user mode. + - Add 04_convert_root_uuid.diff to default to using UUIDs + on new GRUB2 installations. (LP: #192956) + * debian/control: + - Move os-prober to 'Depends' since Ubuntu version does not suffer from + the mount problem in Debian version. 'os-prober' is needed for probing + other operating systems. (LP: #214642) + * Other bugs fixed - LP: #219580 + + [ Mario Limonciello ] + * Add items from missed merge bug (LP: #234288) + + -- Onkar Shinde Fri, 23 May 2008 14:28:36 +0530 + +grub2 (1.96+20080512-1ubuntu1) intrepid; urgency=low + + * Merge from debian unstable, remaining changes: + - Adjust debian/default/grub for default Ubuntu boot options. + + -- Mario Limonciello Tue, 27 May 2008 11:32:41 -0500 + +grub2 (1.96+20080512-1) unstable; urgency=low + + * New CVS snapshot. + - Adds support for default-only Linux cmdline options. (Closes: #460843) + - Supports Xen virtual block devices. (Closes: #456777) + - Supports Virtio block devices. (Closes: #479056) + - Supports CCISS block devices. (Closes: #479735) + - Fixes handling of more LVM abnormal conditions. (Closes: #474343, + #474931, #477175) + + * Switch to liblzo2 now that it's GPLv3-compatible. (Closes: #466375) + * grub-pc.postinst: Escape \ and / in cmdline sed invokation. + (Closes: #479279) + + [ Updated translations ] + * Italian (it.po) by Luca Monducci (Closes: #480740) + + -- Robert Millan Mon, 12 May 2008 17:46:38 +0200 + +grub2 (1.96+20080429-1) unstable; urgency=high + + * New CVS snapshot. + - Includes sample grub.cfg file; we use it for grub-rescue-pc. + (Closes: #478324) + * grub-common: Upgrade Replaces to << 1.96+20080426-3. (Closes: #478224, + #478353, #478144) + + [ Updated translations ] + * French (fr.po) by Christian Perrier (Closes: #471291) + + -- Robert Millan Tue, 29 Apr 2008 13:27:52 +0200 + +grub2 (1.96+20080426-1) unstable; urgency=high + + * New CVS snapshot. + - Fixes syntax error when setting GRUB_PRELOAD_MODULES. (Closes: #476517) + * Move os-prober to Suggests, to avoid trouble with #476184. + (Closes: #476684) + * patches/04_run_grub_mkdevicemap_when_grub_probe_fails.diff: New patch, + does what its name says. (Closes: #467127) + - Also move grub-mkdevicemap from grub-pc to grub-common, so that GRUB + Legacy can use it. + + [ Updated translations ] + * Basque (eu.po) by Piarres Beobide (Closes: #476708) + + -- Robert Millan Sat, 26 Apr 2008 20:06:55 +0200 + +grub2 (1.96+20080413-1) unstable; urgency=high + + * New CVS snapshot. + - Provides 30_os-prober update-grub add-on. Thanks Fabian Greffrath. + (Closes: #461442) + - Improves robustness when handling LVM. + (Closes: #474931, #474343) + * patches/03_disable_floppy_support_in_util_biosdisk.diff: New. Does + what its name says. (Closes: #475177) + + -- Robert Millan Sun, 13 Apr 2008 13:53:28 +0200 + +grub2 (1.96+20080408-1) unstable; urgency=low + + * New CVS snapshot. + - grub-probe skips non-existant devices when processing device.map. + (Closes: #473209) + * control: Fix syntax error. + + [ Updated translations ] + * Finnish (fi.po) by Esko Arajärvi (Closes: #468641) + + -- Robert Millan Tue, 8 Apr 2008 15:45:25 +0200 + +grub2 (1.96+20080228-1) unstable; urgency=low + + * New CVS snapshot. + * Split grub-probe into grub-common package. Make all flavours depend on it. + (Closes: #241972) + * Suggest multiboot-doc. + * patches/01_grub_legacy_0_based_partitions.diff: New patch. Add a hack that + tells grub-probe you want 0-based partition count + (GRUB_LEGACY_0_BASED_PARTITIONS variable) + * Stop depending on lsb-release (too heavy! we don't need python in base). + Instead of assuming it's there, try calling it and otherwise just echo + Debian. + + -- Robert Millan Thu, 28 Feb 2008 16:43:40 +0100 + +grub2 (1.96+20080219-3) unstable; urgency=low + + * default/grub: Use lsb_release to support Debian derivatives. + (Closes: #466561) + * grub.d/05_debian_theme: Only setup background image when a reader for it + is present in /boot/grub. (Closes: #467111) + + [ Updated translations ] + * Russian (ru.po) by Yuri Kozlov (Closes: #467181) + + -- Robert Millan Sun, 24 Feb 2008 15:39:50 +0100 + +grub2 (1.96+20080219-2) unstable; urgency=high + + * grub-pc.postinst: Create /boot/grub if it doesn't exist. + + -- Robert Millan Wed, 20 Feb 2008 07:15:14 +0100 + +grub2 (1.96+20080219-1) unstable; urgency=high + + * New CVS snapshot. + - Improves GPT support, allowing it to work without blocklists. + + -- Robert Millan Tue, 19 Feb 2008 15:05:10 +0100 + +grub2 (1.96+20080216-1) unstable; urgency=high + + * New CVS snapshot. + - Fixes offset calculation issue when installing on GPT (urgency set + to high because of this). + * Fix Vcs-Browser tag. Thanks James. (Closes: #465697) + * Only process grub-pc/linux_cmdline if /boot/grub/menu.lst exists. + (Closes: #465708) + + [ Updated translations ] + * French (fr.po) by Christian Perrier (Closes: #465706) + + -- Robert Millan Sat, 16 Feb 2008 23:30:55 +0100 + +grub2 (1.96+20080213-1) unstable; urgency=low + + * New CVS snapshot. + - Failure to read one device in a RAID-1 array no longer causes boot + to fail (so long as there's a member that works). (Closes: #426341) + * script: For /proc/mounts, only report lines that start with /dev/. + * Add new upgrade-from-grub-legacy script for the user to complete the upgrade + process from GRUB Legacy, and advertise it prominently in menu.lst. + (Closes: #464912) + * Add a hack to support gfxterm / background_image on systems where /usr + isn't accessible. (Closes: #464911, #463144) + - grub-pc.postinst + - grub.d/05_debian_theme + * Fix a pair of spelling mistakes in debconf. (Closes: #465296) + * Migrate kopt from menu.lst. (Closes: #461164, #464918) + + [ Updated translations ] + * Portuguese (pt.po) by Ricardo Silva (Closes: #465137) + * German (de.po) by Helge Kreutzmann (Closes: #465295) + + -- Robert Millan Wed, 13 Feb 2008 16:37:13 +0100 + +grub2 (1.96+20080210-1) unstable; urgency=high + + * New CVS snapshot. + - Errors that cause GRUB to enter rescue mode are displayed now. + (Closes: #425149) + - Build LVM/RAID modules into a few commands that were missing them + (notably, grub-setup). (Closes: #465033) + * Fix license violation (incompatibility between GRUB and LZO2). + (Closes: #465056) + - Urgency set to high. + - control: Move liblzo2-dev from Build-Depends to Build-Conflicts + (leaving liblzo-dev as the only option). + + -- Robert Millan Sun, 10 Feb 2008 17:09:15 +0100 + +grub2 (1.96+20080209-1) unstable; urgency=low + + * New CVS snapshot. + - Fix a root device setting issue in grub-setup. (Closes: #463391) + - Fix partmap detection under LVM/RAID. + - Add scripting commands that would allow user to implement hiddenmenu-like + functionality (http://grub.enbug.org/Hiddenmenu). + - Provide manpages for grub-setup, grub-emu, grub-mkimage and others. + (Closes: #333516, #372890) + * Fix a pair of spelling errors in debconf templates. Thanks Christian + Perrier. (Closes: #464133) + * Run debconf-updatepo. (Closes: #463918) + * Lower base-files versioned dependency to >= 4.0.1~bpo40+1. + + -- Robert Millan Sat, 9 Feb 2008 13:43:49 +0100 + +grub2 (1.96+20080203-1ubuntu2) hardy; urgency=low + + * Update 03_ubuntu_grub_standards. + - Don't show splash screen or quiet mode in single user mode. + + -- Mario Limonciello Wed, 05 Mar 2008 19:05:04 -0600 + +grub2 (1.96+20080203-1ubuntu1) hardy; urgency=low + + * debian/default/grub + - Show lsb_release rather than statically displaying "Debian" (LP: #192955) + - Include Ubuntu specific "quiet splash" on default grub command line. + (LP: #193024) + * debian/patches: + - Add 03_ubuntu_grub_standards to remove GNU/Linux from the + default string. (LP: #192955) + - Add 04_convert_root_uuid.diff to default to using UUIDs + on new GRUB2 installations. (LP: #192956) + * debian/control: + - Update maintainer per XSBC-Original-Maintainer spec. + + -- Mario Limonciello Mon, 18 Feb 2008 14:05:06 -0600 + +grub2 (1.96+20080203-1) unstable; urgency=low + + * New CVS snapshot (and release, but we skipped that ;-)) + - patches/01_regparm.diff: Delete. + - Improved XFS support. + - util/grub.d/00_header.in: Add runtime error detection (for gfxterm). + - Fixes problem when chainloading to Vista. + * Fix po-debconf errors. Thanks Thomas Huriaux. (Closes: #402972) + * grub.d/05_debian_theme: + - Add runtime error detection. + - Detect/Enable PNG background when it is present. + * control (grub-ieee1275): Remove versioned dependency on powerpc-ibm-utils. + + -- Robert Millan Sun, 3 Feb 2008 19:31:23 +0100 + +grub2 (1.95+20080201-1) unstable; urgency=low + + * New CVS snapshot. + * presubj: Improve notice. + * patches/01_regparm.diff: Fix CPU context corruption affecting fs/xfs.c. + (Closes: #463081, #419766, #462159) + * patches/02_libgcc_powerpc_hack.diff: Fix FTBFS on powerpc. (Closes: #457491) + * patches/disable_xfs.diff: Actually remove this time... + + -- Robert Millan Fri, 1 Feb 2008 17:06:00 +0100 + +grub2 (1.95+20080128-1) unstable; urgency=low + + * New CVS snapshot. + - Fixes bogus CLAIM problems on Apple firmware. (Closes: #449135, #422729) + - grub-probe performs sanity checks to make sure our filesystem drivers + are usable. (Closes: #462449) + - patches/disable_ata.diff: Remove. ATA module isn't auto-loaded in + rescue floppies now. + - patches/disable_xfs.diff: Remove. See above (about grub-probe). + * Bring back grub-emu; it can help a lot with debugging feedback. + - control + - rules + + -- Robert Millan Mon, 28 Jan 2008 00:01:11 +0100 + +grub2 (1.95+20080116-2) unstable; urgency=low + + * grub.d/05_debian_theme: Enable swirlish beauty. + * rules: Obtain debian/legacy/update-grub dynamicaly from GRUB Legacy svn. + + -- Robert Millan Sat, 19 Jan 2008 13:16:18 +0100 + +grub2 (1.95+20080116-1) unstable; urgency=low + + * New CVS snapshot. + - update-grub ignores stale *.dpkg-* files. (Closes: #422708, #424223) + - LVM/RAID now working properly (except when it affects /boot). + (Closes: #425666) + - Fixes flickery in timeout message. (Closes: #437275) + * grub-pc.postinst: Use `--no-floppy' whenever possible. Die, floppies, + die! + * Resync with latest version of GRUB Legacy's update-grub. This time, + using the $LET_US_TRY_GRUB_2 hack to reuse the same script both for + addition of core.img and its removal. + * grub-*.install: Add update-grub2 stub. Packages providing /etc/grub.d/ + scripts should invoke update-grub2 in both postinst and postrm (whenever + it is found, of course). + * control: Reorganize a bit, including a complete rewrite of the + package descriptions. + * control (grub-ieee1275): Enable for i386/amd64. + + -- Robert Millan Wed, 16 Jan 2008 15:00:54 +0100 + +grub2 (1.95+20080107-1) unstable; urgency=low + + * New CVS snapshot. + - Supports ReiserFS. (Closes: #430742) + - patches/disable_ata.diff: Resync. + + -- Robert Millan Mon, 7 Jan 2008 12:46:39 +0100 + +grub2 (1.95+20080105-2) unstable; urgency=low + + * grub-pc.postinst: Fix covered assumption that menu.lst exists. + (Closes: #459247) + * copyright: Fix copyright/license reference. + + -- Robert Millan Sun, 6 Jan 2008 18:02:28 +0100 + +grub2 (1.95+20080105-1) unstable; urgency=low + + * New CVS snapshot. + - Fixes install on non-devfs systems with devfs-style paths (ouch). + (Closes: #450709). + - Fixes boot of "Linux" zImages (including memtest86+). (Closes: #436113). + - Corrects usage message in grub-setup. (Closes: #458600). + - patches/menu_color.diff: Remove. Made obsolete by `menu_color_normal' + and `menu_color_highlight' variables. Add/install grub.d/05_debian_theme + to make use of them. + * Reestructure grub-pc.postinst. Notably: + - Do not touch menu.lst unless user has confirmed it (via debconf). + (Closes: #459247) + - When we do, keep a backup in /boot/grub/menu.lst_backup_by_grub2_postinst. + + -- Robert Millan Sat, 5 Jan 2008 17:55:37 +0100 + +grub2 (1.95+20080101-1) unstable; urgency=low + + * New CVS snapshot. + - patches/disable_xfs.diff: Rewrite in a way that won't collide with + upstream changes so often. + - unifont.hex now processed by upstream. + - rules: Disable build of unifont.pff. + - *.install: Remove build/unifont.pff line. + - patches/menu_color.diff: Change menu color to our traditional blue theme. + * Support new dpkg fields (Homepage, Vcs-Svn, Vcs-Browser). + * patches/disable_ata.diff: Prevent ATA module from being built on i386-pc. + + -- Robert Millan Tue, 1 Jan 2008 19:45:30 +0100 + +grub2 (1.95+20071101-1) unstable; urgency=low + + * New CVS snapshot. + - patches/linuxbios.diff: Remove (supported in upstream now). + + -- Robert Millan Thu, 1 Nov 2007 13:18:51 +0100 + +grub2 (1.95+20071004-2) unstable; urgency=low + + * Rename debian/grub-of.* to debian/grub-ieee1275.*. + * Add debian/grub-linuxbios.{postinst,dirs,install}. + * rules: Fix/Overrride lintian warnings (unstripped-binary-or-object). + * Remove grub-linuxbios.postinst. + + -- Robert Millan Wed, 10 Oct 2007 23:56:35 +0200 + +grub2 (1.95+20071004-1) unstable; urgency=low + + * New CVS snapshot. + * Add grub-linuxbios package. + - patches/linuxbios.diff + - control + - rules + * Rename grub-of to grub-ieee1275 to match with upstream conventions. + - control + - rules + + -- Robert Millan Thu, 4 Oct 2007 14:42:30 +0200 + +grub2 (1.95+20070829-1) unstable; urgency=low + + * New CVS snapshot. + - Includes fix for parallel builds. + * rules: Append -j flag to $(MAKE) to take advantage of >1 processors. + * Add reference to /usr/share/common-licenses. + - debian/copyright + - debian/control (all packages): Add base-files (>= 4.0.1) dependency. + + -- Robert Millan Sat, 1 Sep 2007 19:00:22 +0200 + +grub2 (1.95+20070828-2) unstable; urgency=low + + * control (grub-of): Make depends on powerpc-ibm-utils versioned as + >= 1.0.6 (older versions don't have -a flag). + + -- Robert Millan Tue, 28 Aug 2007 23:32:32 +0200 + +grub2 (1.95+20070828-1) unstable; urgency=low + + * New CVS snapshot. + - Adds ntfs support. + - Fixes a pair of issues indirectly breaking grub-probe on powerpc. + (Closes: #431488) + - patches/disable_xfs.diff: Resync. + - copyright: License upgraded to GPLv3. + * control (grub-of Depends): Add powerpc-utils (for nvsetenv) and bc. + + -- Robert Millan Tue, 28 Aug 2007 21:24:14 +0200 + +grub2 (1.95+20070626-1) unstable; urgency=low + + * New CVS snapshot. + - More fixes to cope with unreadable /. (Closes: #427289) + - update-grub supports multiple terminals. + * control (Build-Depends): Add genisoimage. + * patches/partmap_fallback.diff: Remove. It didn't archieve anything as + it also needs support for proper identification of raid / lvm (this is + being worked on). + * patches/disable_xfs.diff: Disable xfs in grub-probe. + * grub-rescue-pc.README.Debian: New. Explain how to use the rescue + images. + + -- Robert Millan Tue, 26 Jun 2007 08:39:14 +0200 + +grub2 (1.95+20070614-1) unstable; urgency=low + + * New CVS snapshot. + - update-grub is tollerant to unreadable / (as long as /boot is + accessible). (Closes: #427289) + * grub-pc.postinst: Generate new grub.cfg when menu.lst exists. + * New package grub-rescue-pc. + - control: Add it. + - README.Debian.in: Remove obsolete documentation. + - rules: Build rescue images using grub-mkrescue. + - grub-rescue-pc.dirs: Prepare their directory. + - grub-rescue-pc.install: Install them. + * legacy/update-grub: Fix core.img detection on separate /boot. + + -- Robert Millan Thu, 14 Jun 2007 08:17:21 +0200 + +grub2 (1.95+20070604-1) unstable; urgency=low + + * New CVS snapshot. + - patches/grub_probe_for_everyone.diff: Remove (merged). + - update-grub exports user-defined GRUB_CMDLINE_LINUX. (Closes: #425453) + - Fix those nasty powerpc bugs. (Closes: #422729) + + -- Robert Millan Mon, 4 Jun 2007 21:30:55 +0200 + +grub2 (1.95+20070520-1) unstable; urgency=low + + * New CVS snapshot. + - LVM / RAID fixes. (Closes: #423648, #381150) + - Fix memory management bug. (Closes: #423409) + - patches/efi.diff: Remove (merged). + - patches/grub_probe_for_everyone.diff: Use the new paths for + util/grub-probe.c, util/biosdisk.c, util/getroot.c. Enable + grub-mkdevicemap. (Closes: #424985) + * legacy/update-grub: Get rid of all grub-set-default calls. (Closes: #425054) + * grub-{pc,efi,of}.postinst: Only run update-grub if grub.cfg already exists. + * grub-pc.postinst: Only run GRUB Legacy compat stuff if menu.lst is found. + * patches/partmap_fallback.diff: New. Implement fallback "pc gpt" for partmap + detection failures. (Closes: #423022) + * control: Update XS-Vcs-* fields. Thanks Sam Morris . + (Closes: #425146) + * grub-{pc,efi,of}.{dirs,postinst}: Move unifont.pff to /usr/share/grub. + + -- Robert Millan Sun, 20 May 2007 11:13:03 +0200 + +grub2 (1.95+20070515-1) unstable; urgency=low + + * New CVS snapshot. + - Fix assumptions about /, /boot and /boot/grub being the same device. + (Closes: #423268, #422459) + - Proper sorting of Linux images. (Closes: #422580) + - update-grub lets /etc/default/grub override its variables now. + (Closes: #423649) + - update-grub mentions /etc/default/grub in the grub.cfg header. + (Closes: #423651) + - update-grub sets 800x600x16 as the default gfxmode. (Closes: #422794) + - update-grub runs grub-mkdevicemap before attempting to use grub-probe + (part of #423217) + + [ Otavio Salvador ] + * Add support to DEB_BUILD_OPTIONS=noopt. Thanks to Sam Morris + for the patch. (Closes: #423005) + * Add Robert Millan as uploader. + * Change build-dependency from liblzo-dev to liblzo2-dev. (Closes: #423358) + + [ Robert Millan ] + * grub-pc.postinst: + - Remove /boot/grub/device.map before running grub-install. + (Closes: #422851) + - Always run update-grub after grub-install. (part of #423217) + - Use grub-mkdevicemap instead of removing device.map, since update-grub + needs it but grub-install is not run unconditionaly. + - Redirect grub-install invocation to /dev/null, since it can mislead + users into thinking that MBR was overwritten. (part of #423217) + * default/grub: Stop exporting the variables (update-grub does that now). + * Misc EFI fixes, including new grub-install. + - patches/efi.diff: New. + - patches/grub_probe_for_everyone.diff: Move some bits to efi.diff. + - grub-efi.install: Stop installing dummy grub-install. + - grub-install: Remove. + * grub-pc.postinst: Avoid generating core.img when menu.lst is not present, + to avoid duplicated work (this is specialy important for d-i). (part of + #423217). + * See multiple references above. (Closes: #423217) + * grub-{pc,efi,of}.{dirs,install}: Install presubj in the right directory + to make it work again (oops). + * Add reportbug script to gather debugging information. (Closes: #423218) + - script: New. + - grub-{pc,efi,of}.install: Install it. + * Install the reportbug scripts for grub2 too, since users might still use + it for bugfiling. + - grub2.dirs + - grub2.install + * Fix some lintian warnings. + - control (grub2): Depend on debconf. + - README.Debian.in: Fix mispell. + - grub2.templates: Remove extra dot. + + -- Robert Millan Tue, 15 May 2007 22:08:53 +0200 + +grub2 (1.95+20070507-1) unstable; urgency=low + + [ Robert Millan ] + * New CVS snapshot. + - patches/build_neq_src.diff: Remove (merged). + * Fix debhelper files to ensure each package gets the right thing. + * Enable gfxterm/unifont support. + * On grub-pc, if there's no core.img setup, create one (but do not + risk writing to MBR). + * On grub-pc, if menu.lst is found, regenerate it to include our + core.img. + + [ Otavio Salvador ] + * Move debian/update-grub to debian/legacy/update-grub otherwise the + source gets messy. + + -- Otavio Salvador Mon, 07 May 2007 18:48:14 -0300 + +grub2 (1.95+20070505.1-3) unstable; urgency=low + + * Split postinst into grub2.postinst (with the transition warning) and + postinst.in, with update-grub invocation for grub-{pc,efi,of}. + - postinst.in + - grub2.postinst + - rules + + -- Robert Millan Sun, 6 May 2007 01:20:04 +0200 + +grub2 (1.95+20070505.1-2) unstable; urgency=low + + * Add EFI build of GRUB. + - control: Restructure to provide 3 packages: grub-pc (x86), + grub-efi (x86) and grub-of (powerpc). + - rules: Handle a separate build for each package. + - patches/build_neq_src.diff: Fix builddir == srcdir assumptions. + - patches/grub_probe_for_everyone.diff: New (superceds + powerpc_probe.diff). Enable grub-probe on powerpc and i386-efi. + - grub-install: Dummy informational grub-install for EFI. + - grub-efi.install: Installs it. + + -- Robert Millan Sun, 6 May 2007 00:23:56 +0200 + +grub2 (1.95+20070505.1-1) unstable; urgency=low + + * New CVS snapshot. + * patches/powerpc_probe.diff: Add partmap/gpt.c to grub-probe. + * control (Architecture): Temporarily disable powerpc. Sorry, but runtime + is currently broken and we don't have the hardware to debug it. Will be + re-enabled in next upload. + + -- Robert Millan Sat, 5 May 2007 21:52:49 +0200 + +grub2 (1.95+20070505-1) unstable; urgency=low + + * New CVS snapshot. + - Improved grub.cfg parser. (Closes: #381215) + - patches/fix-grub-install.diff: Remove (merged). + - control (Build-Depends): Remove libncurses5-dev (no longer needed). + - provides update-grub2. (Closes: #419151) + - Supports GPT in PC/BIOS systems. (Closes: #409073) + * control (Build-Depends): Add gcc-multilib to fix FTBFS. + * control (Description): Make it less scary, and more informative. + * postinst: Run update-grub to ensure the latest improvements always are + applied. + * patches/powerpc_probe.diff: Attempt at making grub-probe build/install + on powerpc (and hopefuly update-grub). + + -- Robert Millan Sat, 5 May 2007 01:49:07 +0200 + +grub2 (1.95-5) unstable; urgency=low + + * Fix FTBFS on kFreeBSD. Thanks to Aurelien Jarno + by providing the patch. Closes: #416408 + + -- Otavio Salvador Fri, 30 Mar 2007 19:20:48 -0300 + +grub2 (1.95-4) unstable; urgency=low + + * Fix powerpc grub-install binary path. Closes: #402838 + + -- Otavio Salvador Thu, 22 Mar 2007 23:45:56 -0300 + +grub2 (1.95-3) unstable; urgency=low + + [ Christian Perrier ] + * Switch to po-debconf for debconf templates. Closes: #402972 + * Depend on ${misc:Depends} and not "debconf" to allow cdebconf to be used + * Debconf translations: + - French + - Czech. Closes: #413327 + - Galician. Closes: #413323 + - Swedish. Closes: #413325 + - Portuguese. Closes: #413332 + - German. Closes: #413365 + - Tamil. Closes: #413478 + - Russian. Closes: #413542 + - Italian. Closes: #413904 + - Romanian. Closes: #414443 + + -- Otavio Salvador Tue, 20 Mar 2007 23:46:38 -0300 + +grub2 (1.95-2) unstable; urgency=low + + [ Robert Millan ] + * update-grub: Fix for Xen hypervisor entries, thanks Aaron Schrab. + (Closes: #394706) + * Transition to new numbering scheme for partitions. (Closes: #395019) + - update-grub: Don't substract 1 when converting partition device names to + grub drives. + - Add debconf warning explaining the situation. + * Rewrite Architecture line back to hardcoded list :(. (Closes: #398060) + + -- Otavio Salvador Mon, 11 Dec 2006 05:08:41 -0200 + +grub2 (1.95-1) unstable; urgency=low + + * New upstream release. + - patches/03_revert_partition_numbering.diff: Delete (obsoleted). + + -- Robert Millan Sat, 14 Oct 2006 21:19:21 +0200 + +grub2 (1.94+20061003-1) unstable; urgency=high + + * New CVS snapshot. + + [ Otavio Salvador ] + * Change debhelper compatibility mode to 5: + - debian/compat: setted to 5; + * control (Build-Depends): Add lib32ncurses5-dev for ppc64. + Closes: #389873 + * Set urgency=high since it's experimental stuff and tagged likewise. It + also solved a serious bug on PowerPC that leave users with a black + screen. + + [ Robert Millan ] + * control (Depends): Add powerpc-ibm-utils for powerpc/ppc64. + (Closes: #372186) + + -- Otavio Salvador Tue, 3 Oct 2006 16:49:32 -0300 + +grub2 (1.94+20060926-1) unstable; urgency=high + + * New CVS snapshot. + - Command-line editting fix (Closes: #381214). + - Fixes runtime breakage on amd64 (not in BTS). + - Delete a few patches (merged). + + [ Robert Millan ] + * Set urgency=high. Might seem like a rush, but it can't possibly be worse than + 1.94-5 (broken on systems that use udev, broken on amd64...). + * Pure ppc64 support. + - control (Architecture): Add any-ppc64. + - control (Build-Depends): Add libc6-dev-powerpc [ppc64]. + * rules: Remove moddep.lst install command (no longer needed). + * patches/03_revert_partition_numbering.diff: New. Revert a commit that + broke grub-probefs. + * Add bug template to encourage sending upstream stuff directly to + upstream. + - presubj: New. + + [ Otavio Salvador ] + * Add XS-X-Vcs-Svn on control file and point it to our current svn + repository. + * Add cvs-snapshot to rules. + + -- Otavio Salvador Tue, 26 Sep 2006 16:14:36 -0300 + +grub2 (1.94-6) unstable; urgency=low + + [ Robert Millan ] + * update-grub: Set interpreter to /bin/bash to cope with non-POSIX + extensions. (mentioned in #361929) + * patches/03_avoid_recursing_into_dot_static.diff: New. Avoid recursing into + dotdirs (e.g. ".static"). + * patches/04_mkdevicemap_dont_assume_floppies.diff: New. Don't assume + /dev/fd0 exists when generating device.map. + + -- Otavio Salvador Thu, 14 Sep 2006 16:07:30 -0300 + +grub2 (1.94-5) unstable; urgency=low + + [ Robert Millan ] + * control (Build-Depends): s/any-amd64/amd64 kfreebsd-amd64/g (this seems to + confuse buildds). + * 02_not_remove_menu_lst.patch: New patch. Skip menu.lst removal in + grub-install. (Closes: #372934) + + -- Otavio Salvador Sun, 20 Aug 2006 12:02:13 -0300 + +grub2 (1.94-4) unstable; urgency=low + + [ Otavio Salvador ] + * 01_fix_amd64_building.patch: dropped since it now supports amd64 + native building. + * Remove convert_kernel26 usage since it's not necessary anymore and due + initramfs-tools changes it's bug too. + + [ Robert Millan ] + * Fork update-grub from grub legacy, and tweak a few commands in output to + make it work for grub2. + * Update README.Debian.in with more recent (and easier) install instructions. + * Add grub to Conflicts/Replaces. Too many commands with the same name, + even if they don't use the same path yet (but will likely do in the + future, see #361929). + * Get rid of control.in, which I introduced in 0.6+20040805-1 and turned out + to be an endless source of problems (and forbidden by policy as well). + * Fix FTBFS on amd64. Really closes: #372548. + + -- Otavio Salvador Fri, 18 Aug 2006 15:38:25 -0300 + +grub2 (1.94-3) unstable; urgency=low + + * Fix FTBFS in amd64. Closes: 372548 + + -- Otavio Salvador Sat, 10 Jun 2006 19:57:01 -0300 + +grub2 (1.94-2) unstable; urgency=low + + * Update grub images paths in README.Debian + * 01_fix_grub-install.patch: add to fix a problem with PowerPC + installation. Refs: #371069 + * Fix FTBFS in amd64. Closes: #370803 + + -- Otavio Salvador Fri, 9 Jun 2006 09:29:40 -0300 + +grub2 (1.94-1) unstable; urgency=low + + * New upstream release. + - Fix powerpc building. Closes: #370259 + - 01_fix_grub-install.patch: merged upstream. + - Moved modules to /usr/lib/grub since they are architecture + dependent. + * Leave CDBS set debhelper compatibility level. + * Allow amd64 build to happen. Closes: #364956 + * Enforce building in 32bits while running in x86_64 machines. + * Update Standards version to 3.7.2. No changes need. + + -- Otavio Salvador Mon, 5 Jun 2006 12:49:09 -0300 + +grub2 (1.93-1) unstable; urgency=low + + * New upstream release. + - Added support to PowerPC. Closes: #357853 + - 01_fix_grub-install.patch: rediff. + * Update Standards version to 3.6.2. No changes need. + * Start to use new dpkg architecture definition. Closes: #360134 + + -- Otavio Salvador Sat, 1 Apr 2006 10:07:17 -0300 + +grub2 (1.92-2) unstable; urgency=low + + * Add bison on build-depends field. Closes: #346178 + * Add more fixes in 01_fix_grub-install.patch. Closes: #346177 + + -- Otavio Salvador Fri, 6 Jan 2006 09:48:08 -0200 + +grub2 (1.92-1) unstable; urgency=low + + * New upstream release. + - Add support for GPT partition table format. + - Add a new command "play" to play an audio file on PC. + - Add support for Linux/ADFS partition table format. + - Add support for BASH-like scripting. + - Add support for Apple HFS+ filesystems. + * 01_fix_grub-install.patch: Added. Fix grub-install to use + /bin/grub-mkimage instead of /sbin/grub-mkimage. Closes: #338824 + * Do not use CDBS tarball mode anymore. Closes: #344272 + + -- Otavio Salvador Thu, 5 Jan 2006 15:20:40 -0200 + +grub2 (1.91-0) unstable; urgency=low + + * New upstream release. Closes: #331211 + * debian/watch: added. + * debian/control.in, debian/control: Add libncurses5-dev in + Build-Depends. Closes: #304638 + * Remove Robert Millan as uploader; + * Add myself as uploader; + + -- Otavio Salvador Sat, 12 Nov 2005 16:35:18 -0200 + +grub2 (0.6+20050203-2) unstable; urgency=low + + * Disable for powerpc. Reportedly it fails to boot. + + -- Robert Millan Fri, 4 Feb 2005 01:52:09 +0100 + +grub2 (0.6+20050203-1) unstable; urgency=low + + * New upstream snapshot. + * Install moddep.lst properly in a cpu-independant way. (Closes: #264115) + * Use cdbs debian/control autogeneration. + - Set DEB_AUTO_UPDATE_DEBIAN_CONTROL = yes. + - Move control to control.in. + - Add a @cdbs@ tag and replace Architecture with Cpu/System. + * control.in (Build-Depends): Add ruby. + + -- Robert Millan Thu, 3 Feb 2005 22:33:39 +0100 + +grub2 (0.6+20040805-1) unstable; urgency=low + + * New upstream snapshot. + * Uploading to unstable so that powerpc users can be blessed by GRUB too. + * Use type-handling to generate dpkg arch list. + - control.in + - rules + + -- Robert Millan Thu, 5 Aug 2004 20:50:16 +0200 + +grub2 (0.6+20040502-1) experimental; urgency=low + + * New upstream snapshot. + - Fix FTBFS on powerpc. + + -- Robert Millan Sun, 2 May 2004 18:16:29 +0200 + +grub2 (0.6+20040429-1) experimental; urgency=low + + * New upstream snapshot. + - control (Architecture): Add powerpc. + + -- Robert Millan Thu, 29 Apr 2004 20:41:31 +0200 + +grub2 (0.6+20031125-1) experimental; urgency=low + + * New upstream snapshot. + - patches/multiboot.diff: Nuked. + - install,docs: Update directory name. + * control (Maintainer): Set to pkg-grub-devel mailing list. + * control (Uploaders): Add myself. + * control (Architecture): Add freebsd-i386 and netbsd-i386. + + -- Robert Millan Tue, 25 Nov 2003 23:48:18 +0100 + +grub2 (0.6+20031114-1) experimental; urgency=low + + * New upstream snapshot. + - README.Debian: s/fat/ext2/g (We now have ext2fs support). + * Add multiboot support, thanks to Jeroen Dekkers for his patch. + - patches/multiboot.diff: New. + - control (Architecture): Add hurd-i386 (which needed multiboot). + * Rename package to grub2 (to follow upstream tendency). + - control: Ditto. + - README.Debian: Likewise. + * Switch to tarball mode. + - rules: Ditto. + - docs: Prefix paths in order to workaround dh_installdocs bug. + - install: Likewise, but not because of bug (should be in rules, actualy). + * Fix FTBFS. (Closes: #213868) + - control (Build-Depends): Add autoconf. + - control (Build-Conflicts): Add autoconf2.13. + + -- Robert Millan Fri, 14 Nov 2003 13:16:12 +0100 + +pupa (0.6+20031008-1) experimental; urgency=low + + * New upstream snapshot. + * Uploading to experimental. + * debian/control: Add Jason Thomas to Uploaders. + + -- Robert Millan Wed, 8 Oct 2003 13:22:50 +0000 + +pupa (0.6+20030915-1) unstable; urgency=low + + * Initial Release. (Closes: #211030) + + -- Robert Millan Mon, 15 Sep 2003 14:58:42 +0000 --- grub2-1.99.orig/debian/grub-ieee1275.install.sparc.in +++ grub2-1.99/debian/grub-ieee1275.install.sparc.in @@ -0,0 +1,2 @@ +usr/sbin/grub-setup +usr/share/man/man8/grub-setup.8 --- grub2-1.99.orig/debian/grub-emu.postinst +++ grub2-1.99/debian/grub-emu.postinst @@ -0,0 +1,19 @@ +#! /bin/sh +set -e + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 1.99-1; then + # Force dpkg to replace this directory with a symlink. + if [ ! -L /usr/share/doc/@PACKAGE@ ] && [ -d /usr/share/doc/@PACKAGE@ ]; then + if rmdir /usr/share/doc/@PACKAGE@ 2>/dev/null; then + ln -sf grub-common /usr/share/doc/@PACKAGE@ + fi + fi + fi + ;; +esac + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/postrm.in +++ grub2-1.99/debian/postrm.in @@ -0,0 +1,47 @@ +#!/bin/bash +set -e + +case "$1" in + purge) + rm -f /etc/default/grub + + if which ucf >/dev/null ; then + ucf --purge /etc/default/grub + fi + if which ucfr >/dev/null ; then + ucfr --purge @PACKAGE@ /etc/default/grub || true + fi + + case @PACKAGE@ in + grub-pc) + # debconf could have been purged + if [ -e /usr/share/debconf/confmodule ] ; then + . /usr/share/debconf/confmodule + fi + + db_input high grub-pc/postrm_purge_boot_grub || true + db_go || true + db_get grub-pc/postrm_purge_boot_grub || true + if [ "$RET" = "true" ] ; then + rm -f /boot/grub/{grub.cfg,ascii.pf2,unicode.pf2,moreblue-orbit-grub.png,*.mod,*.lst,*.img,efiemu32.o,efiemu64.o,device.map,grubenv,installed-version,.background_cache.jpeg,.background_cache.png,.background_cache.tga} || true + rm -rf /boot/grub/locale + rmdir --ignore-fail-on-non-empty /boot/grub || true + fi + ;; + esac + + ;; + remove|upgrade|failed-upgrade|abort-upgrade|abort-install) + ;; + *) + echo "postrm called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-rescue-pc.links +++ grub2-1.99/debian/grub-rescue-pc.links @@ -0,0 +1,3 @@ +# Truth would be uselessly confusing for users. Let's give 'em what they +# wanted instead. +usr/lib/grub-rescue/grub-rescue-cdrom.iso usr/lib/grub-rescue/grub-rescue-usb.img --- grub2-1.99.orig/debian/grub-common.install.powerpc.in +++ grub2-1.99/debian/grub-common.install.powerpc.in @@ -0,0 +1,2 @@ +usr/bin/grub-mkrescue +usr/share/man/man1/grub-mkrescue.1 --- grub2-1.99.orig/debian/watch +++ grub2-1.99/debian/watch @@ -0,0 +1,2 @@ +version=3 +ftp://alpha.gnu.org/gnu/grub/grub-([a-z0-9.~]+).tar.gz debian uupdate --- grub2-1.99.orig/debian/grub2-common.manpages +++ grub2-1.99/debian/grub2-common.manpages @@ -0,0 +1 @@ +debian/update-grub.8 --- grub2-1.99.orig/debian/grub-rescue-pc.README.Debian +++ grub2-1.99/debian/grub-rescue-pc.README.Debian @@ -0,0 +1,22 @@ +grub-rescue-pc +~~~~~~~~~~~~~~ + +How to test the images with qemu: + + qemu -fda /usr/lib/grub-rescue/grub-rescue-floppy.img + + qemu -cdrom /usr/lib/grub-rescue/grub-rescue-cdrom.iso + + qemu -hda /usr/lib/grub-rescue/grub-rescue-usb.img + +How to write the images to bootable media: + + sudo dd if=/usr/lib/grub-rescue/grub-rescue-floppy.img of=/dev/fd0 bs=32k + + sudo wodim /usr/lib/grub-rescue/grub-rescue-cdrom.iso + # or just use your favourite CD burning program + + sudo dd if=/usr/lib/grub-rescue/grub-rescue-usb.img of=DEVICE bs=32k + # where DEVICE is something like /dev/sdb, corresponding to your USB + # stick's device name; be VERY CAREFUL that this is the correct device as + # otherwise you could destroy data on your hard disk! --- grub2-1.99.orig/debian/build-efi-images +++ grub2-1.99/debian/build-efi-images @@ -0,0 +1,76 @@ +#! /bin/sh +set -e + +# Copyright (C) 2010, 2011, 2012 Canonical Ltd. +# Author: Colin Watson +# +# This program 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, 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, Fifth Floor, Boston, MA 02110-1301, USA. + +# Make EFI boot images for signing. + +if [ $# -lt 5 ]; then + echo "usage: $0 GRUB-MKIMAGE GRUB-CORE OUTPUT-DIRECTORY PLATFORM EFI-NAME" +fi + +grub_mkimage="$1" +grub_core="$2" +outdir="$3" +platform="$4" +efi_name="$5" + +workdir= + +cleanup () { + [ -z "$workdir" ] || rm -rf "$workdir" +} +trap cleanup EXIT HUP INT QUIT TERM + +rm -rf "$outdir" +mkdir -p "$outdir" + +workdir="$(mktemp -d build-efi-images.XXXXXX)" + +# GRUB's rescue parser doesn't understand 'if'. +echo 'normal (memdisk)/grub.cfg' >"$workdir/grub-bootstrap.cfg" + +# Skeleton configuration file which finds the real boot disk. +cat >"$workdir/grub.cfg" < + +where is a descriptive name for the patch, used as the filename in +debian/patches. Then, for every file that will be modified by this patch, +run: + + quilt add + +before editing those files. You must tell quilt with quilt add what files +will be part of the patch before making changes or quilt will not work +properly. After editing the files, run: + + quilt refresh + +to save the results as a patch. + +Alternately, if you already have an external patch and you just want to +add it to the build system, run quilt push -a and then: + + quilt import -P /path/to/patch + quilt push -a + +(add -p 0 to quilt import if needed). as above is the filename to +use in debian/patches. The last quilt push -a will apply the patch to +make sure it works properly. + +To remove an existing patch from the list of patches that will be applied, +run: + + quilt delete + +You may need to run quilt pop -a to unapply patches first before running +this command. --- grub2-1.99.orig/debian/grub-pc.templates.in +++ grub2-1.99/debian/grub-pc.templates.in @@ -0,0 +1,157 @@ + +# This file is concatenated. Do not delete the newline above. + +Template: grub-pc/chainload_from_menu.lst +Type: boolean +Default: true +#flag:translate!:6 +_Description: Chainload from menu.lst? + GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub. + . + In order to replace the Legacy version of GRUB in your system, it is + recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot + image from your existing GRUB Legacy setup. This step can be automatically + performed now. + . + It's recommended that you accept chainloading GRUB 2 from menu.lst, and + verify that the new GRUB 2 setup works before it is written to the MBR + (Master Boot Record). + . + Whatever your decision, you can replace the old MBR image with GRUB 2 + later by issuing the following command as root: + . + upgrade-from-grub-legacy + +Template: grub-pc/install_devices +Type: multiselect +Choices-C: ${RAW_CHOICES} +Choices: ${CHOICES} +_Description: GRUB install devices: + The grub-pc package is being upgraded. This menu allows you to select which + devices you'd like grub-install to be automatically run for, if any. + . + Running grub-install automatically is recommended in most situations, to + prevent the installed GRUB core image from getting out of sync with GRUB + modules or grub.cfg. + . + If you're unsure which drive is designated as boot drive by your BIOS, it is + often a good idea to install GRUB to all of them. + . + Note: it is possible to install GRUB to partition boot records as well, and + some appropriate partitions are offered here. However, this forces GRUB to + use the blocklist mechanism, which makes it less reliable, and therefore is + not recommended. + +Template: grub-pc/install_devices_disks_changed +Type: multiselect +Choices-C: ${RAW_CHOICES} +Choices: ${CHOICES} +_Description: GRUB install devices: + The GRUB boot loader was previously installed to a disk that is no longer + present, or whose unique identifier has changed for some reason. It is + important to make sure that the installed GRUB core image stays in sync + with GRUB modules and grub.cfg. Please check again to make sure that GRUB + is written to the appropriate boot devices. + . + If you're unsure which drive is designated as boot drive by your BIOS, it is + often a good idea to install GRUB to all of them. + . + Note: it is possible to install GRUB to partition boot records as well, and + some appropriate partitions are offered here. However, this forces GRUB to + use the blocklist mechanism, which makes it less reliable, and therefore is + not recommended. + +Template: grub-pc/disk_description +Type: text +# Disk sizes are in decimal megabytes, to match how disk manufacturers +# usually describe them. +_Description: ${DEVICE} (${SIZE} MB; ${MODEL}) + +Template: grub-pc/partition_description +Type: text +# The "-" is used to indicate indentation. Leading spaces may not work. +_Description: - ${DEVICE} (${SIZE} MB; ${PATH}) + +Template: grub-pc/install_devices_failed +Type: boolean +Default: false +#flag:translate!:3 +_Description: Writing GRUB to boot device failed - continue? + GRUB failed to install to the following devices: + . + ${FAILED_DEVICES} + . + Do you want to continue anyway? If you do, your computer may not start up + properly. + +Template: grub-pc/install_devices_failed_upgrade +Type: boolean +Default: true +#flag:translate!:3 +_Description: Writing GRUB to boot device failed - try again? + GRUB failed to install to the following devices: + . + ${FAILED_DEVICES} + . + You may be able to install GRUB to some other device, although you should + check that your system will boot from that device. Otherwise, the upgrade + from GRUB Legacy will be canceled. + +Template: grub-pc/install_devices_empty +Type: boolean +Default: false +_Description: Continue without installing GRUB? + You chose not to install GRUB to any devices. If you continue, the boot + loader may not be properly configured, and when this computer next starts + up it will use whatever was previously in the boot sector. If there is an + earlier version of GRUB 2 in the boot sector, it may be unable to load + modules or handle the current configuration file. + . + If you are already using a different boot loader and want to carry on + doing so, or if this is a special environment where you do not need a boot + loader, then you should continue anyway. Otherwise, you should install + GRUB somewhere. + +Template: grub-pc/postrm_purge_boot_grub +Type: boolean +Default: false +_Description: Remove GRUB 2 from /boot/grub? + Do you want to have all GRUB 2 files removed from /boot/grub? + . + This will make the system unbootable unless another boot loader is + installed. + +Template: grub-pc/mixed_legacy_and_grub2 +Type: boolean +Default: true +#flag:translate!:3 +_Description: Finish conversion to GRUB 2 now? + This system still has files from the GRUB Legacy boot loader installed, but + it now also has GRUB 2 boot records installed on these disks: + . + ${DISKS} + . + It seems likely that GRUB Legacy is no longer in use, and that you should + instead upgrade the GRUB 2 images on these disks and finish the conversion + to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these + GRUB 2 images, then they may be incompatible with the new packages and + cause your system to stop booting properly. + . + You should generally finish the conversion to GRUB 2 unless these boot + records were created by a GRUB 2 installation on some other operating + system. + +Template: grub-pc/kopt_extracted +Type: boolean +Default: false +Description: for internal use + +Template: grub-pc/timeout +Type: string +Default: 10 +Description: GRUB timeout + +Template: grub-pc/hidden_timeout +Type: boolean +Default: true +Description: Hide the GRUB timeout --- grub2-1.99.orig/debian/grub-common.examples +++ grub2-1.99/debian/grub-common.examples @@ -0,0 +1 @@ +docs/grub.cfg --- grub2-1.99.orig/debian/grub-mount-udeb.install +++ grub2-1.99/debian/grub-mount-udeb.install @@ -0,0 +1,2 @@ +usr/bin/grub-mount +usr/sbin/grub-probe --- grub2-1.99.orig/debian/presubj +++ grub2-1.99/debian/presubj @@ -0,0 +1,23 @@ + +MAKE SURE YOU ARE RUNNING THE LATEST VERSION + +The grub packages never update the installed version of GRUB +automatically, except if you choose a device in the debconf prompt +`GRUB install devices', which is currently only implemented for grub-pc. + +Because of this, you need to make sure you're running the LATEST VERSION of +GRUB before you report a bug. Use grub-install to update it, and then check +if the bug still applies. Debugging problems we already fixed makes us waste +valuable time, so please try to avoid it. + +IMPORTANT NOTE WHEN SUBMITTING PATCHES + +Like many other FSF projects, GRUB upstream has specific requirements for +accepting patches with regard to copyright assignment. If you're going to +submit a patch, it is likely that it will only be accepted in upstream if you're +willing to submit your paperwork as well. + +Because of this, we want to avoid diverging from upstream by adding patches to +the Debian package unless we know the copyright issues can be sorted out. We +encourage you to submit your work to upstream directly by sending a mail to the +GRUB maintainers . --- grub2-1.99.orig/debian/grub-pc-bin.install.in +++ grub2-1.99/debian/grub-pc-bin.install.in @@ -0,0 +1,2 @@ +usr/bin/grub-ntldr-img usr/lib/grub/@CPU_PLATFORM@ +usr/sbin/grub-setup usr/lib/grub/@CPU_PLATFORM@ --- grub2-1.99.orig/debian/grub-efi.postinst +++ grub2-1.99/debian/grub-efi.postinst @@ -0,0 +1,19 @@ +#! /bin/sh +set -e + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 1.99-1; then + # Force dpkg to replace this directory with a symlink. + if [ ! -L /usr/share/doc/@PACKAGE@ ] && [ -d /usr/share/doc/@PACKAGE@ ]; then + if rmdir /usr/share/doc/@PACKAGE@ 2>/dev/null; then + ln -sf grub-common /usr/share/doc/@PACKAGE@ + fi + fi + fi + ;; +esac + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/dirs.in +++ grub2-1.99/debian/dirs.in @@ -0,0 +1,4 @@ +usr/bin +usr/sbin +usr/share/grub +usr/share/bug/@PACKAGE@ --- grub2-1.99.orig/debian/grub-common.dirs +++ grub2-1.99/debian/grub-common.dirs @@ -0,0 +1,2 @@ +usr/sbin +etc/pm/sleep.d --- grub2-1.99.orig/debian/templates.in +++ grub2-1.99/debian/templates.in @@ -0,0 +1,45 @@ +Template: grub2/linux_cmdline +Type: string +_Description: Linux command line: + The following Linux command line was extracted from /etc/default/grub or the + `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is correct, + and modify it if necessary. The command line is allowed to be empty. + +Template: grub2/linux_cmdline_default +Type: string +Default: quiet splash +_Description: Linux default command line: + The following string will be used as Linux parameters for the default menu + entry but not for the recovery mode. + +# still unused +Template: grub2/kfreebsd_cmdline +Type: string +_Description: kFreeBSD command line: + The following kFreeBSD command line was extracted from /etc/default/grub or the + `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is correct, + and modify it if necessary. The command line is allowed to be empty. + +# still unused +Template: grub2/kfreebsd_cmdline_default +Type: string +Default: quiet +_Description: kFreeBSD default command line: + The following string will be used as kFreeBSD parameters for the default menu + entry but not for the recovery mode. + +Template: grub2/device_map_regenerated +Type: note +_Description: /boot/grub/device.map has been regenerated + The file /boot/grub/device.map has been rewritten to use stable device + names. In most cases, this should significantly reduce the need to change + it in future, and boot menu entries generated by GRUB should not be + affected. + . + However, since more than one disk is present in the system, it is possible + that the system is depending on the old device map. Please check whether + there are any custom boot menu entries that rely on GRUB's (hdN) drive + numbering, and update them if necessary. + . + If you do not understand this message, or if there are no custom + boot menu entries, you can ignore this message. --- grub2-1.99.orig/debian/postinst.in +++ grub2-1.99/debian/postinst.in @@ -0,0 +1,696 @@ +#!/bin/bash +set -e + +merge_debconf_into_conf() +{ + local tmpfile; tmpfile="$1" + local setting; setting="$2" + local template; template="$3" + + db_get "$template" + local value; value="$(echo "$RET" | sed -e 's,[$`"\],\\&,g; s,[\@],\\&,g')" + if grep -q "^${setting}=" "$tmpfile"; then + sed -i -re "s@^(${setting}=).*@\1\"${value}\"@" "$tmpfile" + else + echo >> "$tmpfile" + echo "${setting}=\"${value}\"" >> "$tmpfile" + fi +} + +get_wubi_device() +{ + if [ ! -x /usr/share/lupin-support/grub-mkimage ] || \ + ! /usr/share/lupin-support/grub-mkimage --test; then + return 1 + fi + + local bootdev="$(grub-probe --target=device /boot)" || true + local loop_file= + case $bootdev in + /dev/loop/*|/dev/loop[0-9]) + loop_file="$(losetup "$bootdev" | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/")" + # If it's loop-mounted from another device, it isn't Wubi. + case $loop_file in + /dev/*) return 1 ;; + esac + ;; + *) return 1 ;; + esac + + echo "$bootdev" +} + +# This only works on a Linux system with udev running. This is probably the +# vast majority of systems where we need any of this, though, and we fall +# back reasonably gracefully if we don't have it. +cached_available_ids= +available_ids() +{ + local id path + + if [ "$cached_available_ids" ]; then + echo "$cached_available_ids" + return + fi + + [ -d /dev/disk/by-id ] || return + cached_available_ids="$( + for path in /dev/disk/by-id/*; do + [ -e "$path" ] || continue + printf '%s %s\n' "$path" "$(readlink -f "$path")" + done | sort -k2 -s -u | cut -d' ' -f1 + )" + echo "$cached_available_ids" +} + +# Returns non-zero and no output if no mapping can be found. +device_to_id() +{ + local id + for id in $(available_ids); do + if [ "$(readlink -f "$id")" = "$(readlink -f "$1")" ]; then + echo "$id" + return 0 + fi + done + # Fall back to the plain device name if there's no by-id link for it. + if [ -e "$1" ]; then + echo "$1" + return 0 + fi + return 1 +} + +devices_to_ids() +{ + local device id ids + ids= + for device; do + id="$(device_to_id "$device" || true)" + if [ "$id" ]; then + ids="${ids:+$ids, }$id" + fi + done + echo "$ids" +} + +all_disks() +{ + local id + for id in $(available_ids); do + case $id in + *-part*) ;; + *) echo "$id" ;; + esac + done +} + +all_partitions() +{ + local id ids + ids= + for id in $(available_ids); do + if [ "$id" != "$1" ] && [ "${id%-part*}" = "$1" ]; then + ids="${ids:+$ids }$id" + fi + done + echo "$ids" +} + +# In order to determine whether we accidentally ran grub-install without +# upgrade-from-grub-legacy on versions older than 1.98+20100617-1, we need +# to be able to scan a disk to determine whether GRUB 2 was installed in its +# boot sector. This is specific to i386-pc (but that's the only platform +# where we need it). +scan_grub2() +{ + if ! dd if="$1" bs=512 count=1 2>/dev/null | grep -aq GRUB; then + # No version of GRUB is installed. + return 1 + fi + + # The GRUB boot sector always starts with a JMP instruction. + initial_jmp="$(dd if="$1" bs=2 count=1 2>/dev/null | od -Ax -tx1 | \ + head -n1 | cut -d' ' -f2,3)" + [ "$initial_jmp" ] || return 1 + initial_jmp_opcode="${initial_jmp%% *}" + [ "$initial_jmp_opcode" = eb ] || return 1 + initial_jmp_operand="${initial_jmp#* }" + case $initial_jmp_operand in + 47|4b|4c|63) + # I believe this covers all versions of GRUB 2 up to the package + # version where we gained a more explicit mechanism. GRUB Legacy + # always had 48 here. + return 0 + ;; + esac + + return 1 +} + +# for Linux +sysfs_size() +{ + local num_sectors sector_size size + # Try to find out the size without relying on a partitioning tool being + # installed. This isn't too hard on Linux 2.6 with sysfs, but we have to + # try a couple of variants on detection of the sector size. + if [ -e "$1/size" ]; then + num_sectors="$(cat "$1/size")" + sector_size=512 + if [ -e "$1/queue/logical_block_size" ]; then + sector_size="$(cat "$1/queue/logical_block_size")" + elif [ -e "$1/queue/hw_sector_size" ]; then + sector_size="$(cat "$1/queue/hw_sector_size")" + fi + size="$(expr "$num_sectors" \* "$sector_size" / 1000 / 1000)" + fi + [ "$size" ] || size='???' + echo "$size" +} + +# for kFreeBSD +camcontrol_size() +{ + local num_sectors sector_size size= + + if num_sectors="$(camcontrol readcap "$1" -q -s -N)"; then + sector_size="$(camcontrol readcap "$1" -q -b)" + size="$(expr "$num_sectors" \* "$sector_size" / 1000 / 1000)" + fi + + [ "$size" ] || size='???' + echo "$size" +} + +# Returns value in $RET, like a debconf command. +describe_disk() +{ + local disk id base size + disk="$1" + id="$2" + + model= + case $(uname -s) in + Linux) + if which udevadm >/dev/null 2>&1; then + size="$(sysfs_size "/sys$(udevadm info -n "$disk" -q path)")" + else + base="${disk#/dev/}" + base="$(printf %s "$base" | sed 's,/,!,g')" + size="$(sysfs_size "/sys/block/$base")" + fi + + if which udevadm >/dev/null 2>&1; then + model="$(udevadm info -n "$disk" -q property | sed -n 's/^ID_MODEL=//p')" + if [ -z "$model" ]; then + model="$(udevadm info -n "$disk" -q property | sed -n 's/^DM_NAME=//p')" + if [ -z "$model" ]; then + model="$(udevadm info -n "$disk" -q property | sed -n 's/^MD_NAME=//p')" + if [ -z "$model" ] && which dmsetup >/dev/null 2>&1; then + model="$(dmsetup info -c --noheadings -o name "$disk" 2>/dev/null || true)" + fi + fi + fi + fi + ;; + GNU/kFreeBSD) + disk_basename=$(basename "$disk") + size="$(camcontrol_size "$disk_basename")" + model="$(camcontrol inquiry "$disk_basename" | sed -ne "s/^pass0: <\([^>]*\)>.*/\1/p")" + ;; + esac + + [ "$model" ] || model='???' + + db_subst grub-pc/disk_description DEVICE "$disk" + db_subst grub-pc/disk_description SIZE "$size" + db_subst grub-pc/disk_description MODEL "$model" + db_metaget grub-pc/disk_description description +} + +# Returns value in $RET, like a debconf command. +describe_partition() +{ + local disk part id path diskbase partbase size + disk="$1" + part="$2" + id="$3" + path="$4" + + if which udevadm >/dev/null 2>&1; then + size="$(sysfs_size "/sys$(udevadm info -n "$part" -q path)")" + else + diskbase="${disk#/dev/}" + diskbase="$(printf %s "$diskbase" | sed 's,/,!,g')" + partbase="${part#/dev/}" + partbase="$(printf %s "$partbase" | sed 's,/,!,g')" + size="$(sysfs_size "/sys/block/$diskbase/$partbase")" + fi + + db_subst grub-pc/partition_description DEVICE "$part" + db_subst grub-pc/partition_description SIZE "$size" + db_subst grub-pc/partition_description PATH "$path" + db_metaget grub-pc/partition_description description +} + +usable_partitions() +{ + local last_partition path partition partition_id + + last_partition= + for path in / /boot /boot/grub; do + partition="$(grub-probe -t device "$path" || true)" + if [ -z "$partition" ] || [ "$partition" = "$last_partition" ]; then + continue + fi + partition_id="$(device_to_id "$partition" || true)" + echo "$path:$partition_id" + last_partition="$partition" + done | sort -t: -k2 +} + +get_mountpoint() +{ + local relpath boot_mountpoint + + relpath="$(grub-mkrelpath "$1")" + boot_mountpoint="${1#$relpath}" + echo "${boot_mountpoint:-/}" +} + +config_item() +{ + if [ -f /etc/default/grub ]; then + . /etc/default/grub || return + fi + eval echo "\$$1" +} + +case "$1" in + configure) + . /usr/share/debconf/confmodule + + if dpkg --compare-versions "$2" lt-nl 1.99-1; then + # Force dpkg to replace this directory with a symlink. + if [ ! -L /usr/share/doc/@PACKAGE@ ] && [ -d /usr/share/doc/@PACKAGE@ ]; then + if rmdir /usr/share/doc/@PACKAGE@ 2>/dev/null; then + ln -sf grub-common /usr/share/doc/@PACKAGE@ + fi + fi + fi + + devicemap_regenerated= + + if egrep -q '^[[:space:]]*post(inst|rm)_hook[[:space:]]*=[[:space:]]*(/sbin/|/usr/sbin/)?update-grub' /etc/kernel-img.conf 2>/dev/null; then + echo 'Removing update-grub hooks from /etc/kernel-img.conf in favour of' >&2 + echo '/etc/kernel/ hooks.' >&2 + sed -ri /etc/kernel-img.conf -e '\%^[[:space:]]*post(inst|rm)_hook[[:space:]]*=[[:space:]]*(/sbin/|/usr/sbin/)?update-grub%d' + fi + + case @PACKAGE@ in + grub-pc) + mkdir -p /boot/grub + + if test -e /boot/grub/device.map && ! test -e /boot/grub/core.img ; then + # Looks like your device.map was generated by GRUB Legacy, which + # used to generate broken device.map (see #422851). Avoid the risk + # by regenerating it. + grub-mkdevicemap --no-floppy + devicemap_regenerated=1 + fi + ;; + esac + + if test -z "$devicemap_regenerated" && test -s /boot/grub/device.map && \ + dpkg --compare-versions "$2" lt-nl 1.98+20100702-1 && \ + test "$(uname -s)" = Linux; then + # Earlier versions of GRUB used unstable device names in device.map, + # which caused a variety of problems. There is some risk associated with + # regenerating it (so we prompt the user if it's non-trivial), but on the + # whole it's less risky to move to /dev/disk/by-id/. + devicemap_lines="$(egrep -v '^[[:space:]]+#' /boot/grub/device.map | wc -l)" + grub-mkdevicemap --no-floppy + devicemap_regenerated=1 + if test "$devicemap_lines" != 1; then + db_input critical grub2/device_map_regenerated || true + db_go || true + fi + fi + + if test -z "$devicemap_regenerated" && \ + dpkg --compare-versions "$2" lt-nl 1.99~20101210-2 && \ + grep -qs /md-uuid- /boot/grub/device.map; then + echo "Removing MD devices from device.map, since the BIOS cannot read from these." >&2 + sed -i '/\/md-uuid-/d' /boot/grub/device.map + fi + + tmp_default_grub="$(mktemp -t grub.XXXXXXXXXX)" + trap "rm -f ${tmp_default_grub}" EXIT + cp -p /usr/share/grub/default/grub ${tmp_default_grub} + + merge_debconf_into_conf "$tmp_default_grub" GRUB_CMDLINE_LINUX grub2/linux_cmdline + merge_debconf_into_conf "$tmp_default_grub" GRUB_CMDLINE_LINUX_DEFAULT grub2/linux_cmdline_default + + case @PACKAGE@ in + grub-pc) + merge_debconf_into_conf "$tmp_default_grub" GRUB_TIMEOUT grub-pc/timeout + sed -i -e 's/^\(GRUB_TIMEOUT=\)"\([0-9][0-9]*\)"/\1\2/' "$tmp_default_grub" + db_get grub-pc/hidden_timeout + if [ "$RET" = false ]; then + sed -i -e 's/^GRUB_HIDDEN_TIMEOUT=/#&/' "$tmp_default_grub" + fi + ;; + esac + + ucf --three-way --debconf-ok --sum-file=/usr/share/grub/default/grub.md5sum ${tmp_default_grub} /etc/default/grub + package="$(ucfq --with-colons /etc/default/grub | cut -d : -f 2)" + if echo $package | grep -q "^grub-" ; then + ucfr --force @PACKAGE@ /etc/default/grub + else + ucfr @PACKAGE@ /etc/default/grub + fi + + case @PACKAGE@ in + grub-pc) + + fix_mixed_system= + if test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst && \ + ! test -e /boot/grub/grub2-installed && \ + test -z "$UPGRADE_FROM_GRUB_LEGACY"; then + # Unfortunately, it's still possible that the user upgraded fully + # to GRUB 2 in some way other than running + # upgrade-from-grub-legacy; perhaps they ran grub-install by hand + # for some reason. It's really quite difficult to detect this + # situation, because the only difference between this and a + # working chainloaded setup is that in this case grub-setup has + # been run. So, to try to tell the difference, we scan the boot + # sectors of all disks for a GRUB 2 boot sector. Hopefully this + # won't cause too much to explode, since I can't think of a better + # method. + grub2_disks= + for disk in $(all_disks); do + if scan_grub2 "$disk"; then + grub2_disks="${grub2_disks:+$grub2_disks }$(readlink -f "$disk")" + fi + done + if [ "$grub2_disks" ]; then + # No || true here; it's vital that the user sees this, and it's + # better to throw an error than to do the wrong thing. + db_subst grub-pc/mixed_legacy_and_grub2 DISKS "$grub2_disks" + db_input critical grub-pc/mixed_legacy_and_grub2 + db_go + db_get grub-pc/mixed_legacy_and_grub2 + if [ "$RET" = true ]; then + db_reset grub-pc/install_devices + UPGRADE_FROM_GRUB_LEGACY=1 + fix_mixed_system=1 + # Fall through to normal installation logic. + fi + fi + fi + + # Make sure that Wubi users never see confusing device prompts. + # Wubi is a very specialised hack that does complicated things with + # grub-install diversions to create an image that's chained from the + # Windows boot loader to boot an operating system from a file on a + # Windows file system. In these circumstances, prompting for where + # to install GRUB is not going to help anyone. + wubi_device="$(get_wubi_device)" || true + if [ "$wubi_device" ]; then + db_set grub-pc/install_devices "$wubi_device" + db_fset grub-pc/install_devices seen true + fi + + if test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst && \ + ! test -e /boot/grub/grub2-installed && \ + test -z "$UPGRADE_FROM_GRUB_LEGACY"; then + db_get grub-pc/chainload_from_menu.lst + if $RET ; then + # Create core.img (but do not risk writing to MBR). + # Using grub-probe instead of "(hd0)" avoids (UUID=) hack slowness + # in case /boot/grub is not on (hd0) in device.map. + echo "Generating core.img" >&2 + grub-install --no-floppy --grub-setup=/bin/true "$(grub-probe -t drive /boot/grub)" > /dev/null + + # Update menu.lst to reflect that: + # - core.img is present now + # - core.img has to be the first option + echo "Saving menu.lst backup in /boot/grub/menu.lst_backup_by_grub2_postinst" >&2 + cp /boot/grub/menu.lst{,_backup_by_grub2_postinst} + echo "Running update-grub Legacy to hook our core.img in it" >&2 + LET_US_TRY_GRUB_2=true /usr/lib/grub-legacy/update-grub 2>&1 | sed -e "s/^/ /g" >&2 + # We just hooked GRUB 2 in menu.lst; then also generate grub.cfg. + touch /boot/grub/grub.cfg + fi + elif test -z "$2" || test -e /boot/grub/core.img || \ + test "$UPGRADE_FROM_GRUB_LEGACY" || test "$wubi_device"; then + question=grub-pc/install_devices + device_map="$(grub-mkdevicemap -m - | grep -v '^(fd[0-9]\+)' || true)" + devices="$(echo "$device_map" | cut -f2)" + if dpkg --compare-versions "$2" lt 1.98~20100128-1ubuntu1 && \ + test "$(uname -s)" = Linux && [ -z "$wubi_device" ]; then + # Migrate to new by-id naming scheme. + db_get grub-pc/install_devices + old_devices="$(echo "$RET" | sed 's/, / /g')" + new_devices= + # Common-case optimisation: if the list of devices is + # identical to the LHS of grub-mkdevicemap's output, then + # there's no point asking again; just install to all disks. + # (This handles e.g. "(hd0)" with one disk.) + if [ "$(echo "$device_map" | cut -f1 | sort)" = \ + "$(echo "$old_devices" | xargs -n1 | sort)" ]; then + new_devices="$(devices_to_ids $devices)" + db_set grub-pc/install_devices "$new_devices" + # Alternatively, we might be installing to a single partition + # on a single disk, and we can deal with that too if there's + # only one available disk and it has an appropriate partition. + # This doesn't necessarily work for multiple disks because now + # the order matters. + elif [ "$(echo "$device_map" | wc -l)" = 1 ] && \ + [ "$(echo "$old_devices" | wc -w)" = 1 ] && \ + echo "$old_devices" | grep -q ,; then + old_device="${old_devices#(}" + old_device="${old_device%)}" + old_disk="${old_device%,*}" + old_partition="${old_device##*,}" + new_device="$(echo "$device_map" | grep "^($old_disk)" | \ + cut -f2)" + new_device="$(device_to_id $new_device)" + if [ "$new_device" ]; then + new_device="$new_device-part$old_partition" + # Run through device_to_id again to check for existence. + new_device="$(device_to_id $new_device)" + fi + if [ "$new_device" ]; then + new_devices="$new_device" + db_set grub-pc/install_devices "$new_device" + fi + fi + if [ -z "$new_devices" ]; then + new_devices="$(devices_to_ids $old_devices)" + db_set grub-pc/install_devices "$new_devices" + # Common-case optimisation: if all devices are translatable + # to by-id and the number of devices there is the same as + # the number of devices GRUB can see, then there's no point + # asking again. (This handles e.g. "/dev/sda" with one + # disk.) + old_devices_count="$(echo "$old_devices" | wc -w)" + new_devices_count="$(echo "$new_devices" | wc -w)" + devices_count="$(echo "$devices" | wc -w)" + if [ "$old_devices_count" != "$new_devices_count" ] || \ + [ "$new_devices_count" != "$devices_count" ]; then + db_fset grub-pc/install_devices seen false + db_fset grub-pc/install_devices_empty seen false + fi + fi + else + db_get grub-pc/install_devices + valid=1 + for device in $RET; do + if [ ! -e "${device%,}" ]; then + valid=0 + break + fi + done + if [ "$valid" = 0 ]; then + question=grub-pc/install_devices_disks_changed + db_set "$question" "$RET" + db_fset "$question" seen false + db_fset grub-pc/install_devices_empty seen false + fi + fi + + while :; do + ids= + descriptions= + partitions="$(usable_partitions)" + for device in $devices; do + disk_id="$(device_to_id "$device" || true)" + if [ "$disk_id" ]; then + ids="${ids:+$ids, }$disk_id" + describe_disk "$(readlink -f "$device")" "$disk_id" + RET="$(printf %s "$RET" | sed 's/,/\\,/g')" + descriptions="${descriptions:+$descriptions, }$RET" + for partition_pair in $partitions; do + partition_id="${partition_pair#*:}" + if [ "${partition_id#$disk_id-part}" != "$partition_id" ]; then + ids="${ids:+$ids, }$partition_id" + describe_partition "$(readlink -f "$device")" "$(readlink -f "$partition_id")" "$partition_id" "$(get_mountpoint "${partition_pair%%:*}")" + RET="$(printf %s "$RET" | sed 's/,/\\,/g')" + descriptions="${descriptions:+$descriptions, }$RET" + fi + done + fi + done + # Some "partitions" may in fact be at the disk level, e.g. RAID. + # List these as well if they haven't already been listed. + for partition_pair in $partitions; do + partition_id="${partition_pair#*:}" + if [ "${partition_id#*-part}" = "$partition_id" ]; then + case ", $ids, " in + ", $partition_id, ") ;; + *) + ids="${ids:+$ids, }$partition_id" + describe_disk "$(readlink -f "$partition_id")" "$partition_id" + RET="$(printf %s "$RET" | sed 's/,/\\,/g')" + descriptions="${descriptions:+$descriptions, }$RET" + ;; + esac + fi + done + db_subst "$question" RAW_CHOICES "$ids" + db_subst "$question" CHOICES "$descriptions" + db_input high "$question" || true + db_go + db_get "$question" + failed_devices= + for i in `echo $RET | sed -e 's/, / /g'` ; do + real_device="$(readlink -f "$i")" + if grub-install --force --no-floppy $real_device ; then + # We just installed GRUB 2; then also generate grub.cfg. + touch /boot/grub/grub.cfg + else + failed_devices="$failed_devices $real_device" + fi + done + + if [ "$question" != grub-pc/install_devices ]; then + db_set grub-pc/install_devices "$RET" + db_fset grub-pc/install_devices seen true + fi + + if [ "$failed_devices" ]; then + if [ "$UPGRADE_FROM_GRUB_LEGACY" ]; then + db_subst grub-pc/install_devices_failed_upgrade FAILED_DEVICES "$failed_devices" + db_fset grub-pc/install_devices_failed_upgrade seen false + if db_input critical grub-pc/install_devices_failed_upgrade; then + db_go + db_get grub-pc/install_devices_failed_upgrade + if [ "$RET" = true ]; then + db_fset "$question" seen false + db_fset grub-pc/install_devices_failed_upgrade seen false + continue + else + exit 1 + fi + else + exit 1 # noninteractive + fi + else + db_subst grub-pc/install_devices_failed FAILED_DEVICES "$failed_devices" + db_fset grub-pc/install_devices_failed seen false + if db_input critical grub-pc/install_devices_failed; then + db_go + db_get grub-pc/install_devices_failed + if [ "$RET" = true ]; then + break + else + db_fset "$question" seen false + db_fset grub-pc/install_devices_failed seen false + continue + fi + else + break # noninteractive + fi + fi + fi + + db_get grub-pc/install_devices + if [ -z "$RET" ]; then + # Reset the seen flag if the current answer is false, since + # otherwise we'll loop with no indication of why. + db_get grub-pc/install_devices_empty + if [ "$RET" = false ]; then + db_fset grub-pc/install_devices_empty seen false + fi + if db_input critical grub-pc/install_devices_empty; then + db_go + db_get grub-pc/install_devices_empty + if [ "$RET" = true ]; then + break + else + db_fset "$question" seen false + db_fset grub-pc/install_devices_empty seen false + fi + else + break # noninteractive + fi + else + break + fi + done + fi + + # /boot/grub/ has more chances of being accessible by GRUB + if test -e /boot/grub/grub.cfg ; then + for i in /usr/share/grub/unicode.pf2 ; do + if test -e $i ; then + cp $i /boot/grub/ + fi + done + fi + + if [ "$fix_mixed_system" ]; then + # These never contain any valuable information, and they aren't + # useful for boot any more, since we just overwrote MBR/PBR. + rm -f /boot/grub/{{xfs,reiserfs,e2fs,fat,jfs,minix}_stage1_5,stage{1,2}} + # Remove marker file used to indicate that grub-install was run + # rather than upgrade-from-grub-legacy. Since stage2 has been + # removed, we don't need this any more. + rm -f /boot/grub/grub2-installed + fi + ;; + + grub-efi-ia32|grub-efi-amd64) + bootloader_id="$(config_item GRUB_DISTRIBUTOR | tr A-Z a-z | \ + cut -d' ' -f1)" + if [ "$bootloader_id" ] && [ -d "/boot/efi/EFI/$bootloader_id" ]; then + grub-install + fi + ;; + + grub-yeeloong) + grub-install + ;; + esac + + # If grub.cfg has been generated, update it. + if test -e /boot/grub/grub.cfg ; then + update-grub 3>&- + fi + ;; + abort-upgrade|abort-remove|abort-deconfigure) + ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-common.install.ppc64.in +++ grub2-1.99/debian/grub-common.install.ppc64.in @@ -0,0 +1,2 @@ +usr/bin/grub-mkrescue +usr/share/man/man1/grub-mkrescue.1 --- grub2-1.99.orig/debian/script +++ grub2-1.99/debian/script @@ -0,0 +1,61 @@ +#!/bin/bash +set -e + +if test -e /boot/grub/setup_left_core_image_in_filesystem ; then + echo >&3 + echo "*********************** WARNING grub-setup left core.img in filesystem" >&3 +fi + +for i in /proc/mounts ; do + if test -e $i ; then + echo >&3 + echo "*********************** BEGIN $i" >&3 + grep ^/dev/ $i >&3 + echo "*********************** END $i" >&3 + fi +done + +for i in /boot/grub/{device.map,grub.cfg} ; do + if ! test -e $i ; then + continue + fi + echo >&3 + echo "*********************** BEGIN $i" >&3 + if test -r $i ; then + sed $i -e "s/.*password.*/### PASSWORD LINE REMOVED ###/g" >&3 + else + echo "$i is not readable by you. Please enter your root password." + echo "Any password line in it gets removed." + su root -c "sed $i -e 's/.*password.*/### PASSWORD LINE REMOVED ###/g'" >&3 + fi + echo "*********************** END $i" >&3 +done + +echo >&3 +echo "*********************** BEGIN /proc/mdstat" >&3 +cat /proc/mdstat >&3 2>&1 || true +echo "*********************** END /proc/mdstat" >&3 + +cat <&3 + echo "*********************** BEGIN LVM" >&3 + su root -c "vgdisplay; pvdisplay; lvdisplay" >&3 + echo "*********************** END LVM" >&3 +fi + +echo >&3 +echo "*********************** BEGIN /dev/disk/by-id" >&3 +ls -l /dev/disk/by-id >&3 2>&1 || true +echo "*********************** END /dev/disk/by-id" >&3 + +echo >&3 +echo "*********************** BEGIN /dev/disk/by-uuid" >&3 +ls -l /dev/disk/by-uuid >&3 2>&1 || true +echo "*********************** END /dev/disk/by-uuid" >&3 + +exit 0 --- grub2-1.99.orig/debian/grub2.dirs +++ grub2-1.99/debian/grub2.dirs @@ -0,0 +1 @@ +usr/share/bug/grub2 --- grub2-1.99.orig/debian/grub2.postinst +++ grub2-1.99/debian/grub2.postinst @@ -0,0 +1,19 @@ +#! /bin/sh +set -e + +case "$1" in + configure) + if dpkg --compare-versions "$2" lt-nl 1.99-1; then + # Force dpkg to replace this directory with a symlink. + if [ ! -L /usr/share/doc/@PACKAGE@ ] && [ -d /usr/share/doc/@PACKAGE@ ]; then + if rmdir /usr/share/doc/@PACKAGE@ 2>/dev/null; then + ln -sf grub-common /usr/share/doc/@PACKAGE@ + fi + fi + fi + ;; +esac + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub2.install +++ grub2-1.99/debian/grub2.install @@ -0,0 +1,2 @@ +debian/presubj usr/share/bug/grub2 +debian/script usr/share/bug/grub2 --- grub2-1.99.orig/debian/grub-emu.install +++ grub2-1.99/debian/grub-emu.install @@ -0,0 +1,4 @@ +usr/bin/grub-emu +usr/bin/grub-emu-lite +usr/lib/grub/*-*/ +usr/share/man/man1/grub-emu.1 --- grub2-1.99.orig/debian/control +++ grub2-1.99/debian/control @@ -0,0 +1,391 @@ +Source: grub2 +Section: admin +Priority: extra +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: GRUB Maintainers +Uploaders: Robert Millan , Felix Zielcke , Jordi Mallach , Colin Watson +DM-Upload-Allowed: yes +Build-Depends: debhelper (>= 7.4.2~), + quilt (>= 0.46-7), + patchutils, + autoconf, + automake, + autogen (>= 1:5.10), + python, + flex (>= 2.5.35), + bison, + po-debconf, + help2man, + texinfo, + gcc-4.6-multilib [i386 kopensolaris-i386 any-amd64 any-ppc64 any-sparc], + gcc-4.6, + libncurses5-dev, + xfonts-unifont, + libfreetype6-dev, + gettext, + libusb-dev [!hurd-any], + libdevmapper-dev (>= 2:1.02.34) [linux-any], + libgeom-dev (>= 8.2+ds1-1) [kfreebsd-any] | libgeom-dev (<< 8.2) [kfreebsd-any], + libsdl1.2-dev [!hurd-any], + xorriso (>= 0.5.6.pl00), + qemu-kvm [i386 kfreebsd-i386 kopensolaris-i386 any-amd64], + parted [!hurd-any], + libfuse-dev (>= 2.8.4-1.4) [linux-any kfreebsd-any], + dosfstools [amd64], + mtools [amd64], +Build-Conflicts: autoconf2.13, libzfs-dev, libnvpair-dev +Standards-Version: 3.8.4 +Homepage: http://www.gnu.org/software/grub/ +XS-Debian-Vcs-Bzr: http://anonscm.debian.org/bzr/pkg-grub/trunk/grub/ +XS-Debian-Vcs-Browser: http://anonscm.debian.org/loggerhead/pkg-grub/trunk/grub/ +Vcs-Bzr: http://bazaar.launchpad.net/~ubuntu-core-dev/ubuntu/precise/grub2/precise + +Package: grub2 +Architecture: any-i386 any-amd64 any-powerpc any-ppc64 any-sparc +Depends: grub-pc (= ${binary:Version}) [any-i386 any-amd64] | grub-ieee1275 (= ${binary:Version}) [any-powerpc any-ppc64 any-sparc], ${misc:Depends} +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (dummy package) + This is a dummy transitional package to handle GRUB 2 upgrades. It can be + safely removed. + +Package: grub-linuxbios +Architecture: any-i386 any-amd64 +Depends: grub-coreboot (= ${binary:Version}), ${misc:Depends} +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (dummy package) + This is a dummy transitional package that depends on grub-coreboot. + +Package: grub-efi +Architecture: any-i386 any-amd64 +Depends: ${misc:Depends}, grub-efi-ia32 (= ${binary:Version}) [any-i386], grub-efi-amd64 (= ${binary:Version}) [any-amd64] +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (dummy package) + This is a dummy transitional package that depends on either grub-efi-ia32 or + grub-efi-amd64, depending on the architecture. + + +Package: grub-common +Priority: optional +Architecture: any-i386 any-amd64 any-powerpc any-ppc64 any-sparc any-mipsel +Depends: ${shlibs:Depends}, ${misc:Depends}, gettext-base, lsb-base (>= 3.0-6) +Replaces: grub-pc (<< 1.99-1), grub-ieee1275 (<< 1.99-1), grub-efi (<< 1.99-1), grub-coreboot (<< 1.99-1), grub-linuxbios (<< 1.96+20080831-1), grub-efi-ia32 (<< 1.99-1), grub-efi-amd64 (<< 1.99-1), grub-yeeloong (<< 1.99-1) +Recommends: os-prober (>= 1.33) +Suggests: multiboot-doc, grub-emu, xorriso (>= 0.5.6.pl00), desktop-base (>= 4.0.6) +# See bugs #435983 and #455746 +Conflicts: mdadm (<< 2.6.7-2) +Breaks: lupin-support (<< 0.30), friendly-recovery (<< 0.2.13) +Multi-Arch: foreign +Description: GRand Unified Bootloader (common files) + This package contains common files shared by the distinct flavours of GRUB. + It is shared between GRUB Legacy and GRUB 2, although a number of files + specific to GRUB 2 are here as long as they do not break GRUB Legacy. + +Package: grub2-common +Priority: optional +Architecture: any-i386 any-amd64 any-powerpc any-ppc64 any-sparc any-mipsel +Depends: grub-common (= ${binary:Version}), dpkg (>= 1.15.4) | install-info, ${shlibs:Depends}, ${misc:Depends} +Replaces: grub, grub-legacy, grub-common (<< 1.99-1), grub-pc (<< 1.99-1), grub-ieee1275 (<< 1.99-1), grub-efi (<< 1.99-1), grub-coreboot (<< 1.99-1), grub-linuxbios (<< 1.99-1), grub-efi-ia32 (<< 1.99-1), grub-efi-amd64 (<< 1.99-1), grub-yeeloong (<< 1.99-1) +Conflicts: grub (<< 0.97-54), grub-legacy, grub-doc (<< 0.97-29ubuntu60), grub-legacy-doc (<< 0.97-29ubuntu60) +Multi-Arch: foreign +Description: GRand Unified Bootloader (common files for version 2) + This package contains common files shared by the distinct flavours of GRUB. + The files in this package are specific to GRUB 2, and would break GRUB + Legacy if installed on the same system. + +Package: grub-emu +Architecture: any-i386 any-amd64 any-powerpc +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}) +Replaces: grub-common (<= 1.97~beta3-1) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (emulated version) + This package contains grub-emu, an emulated version of GRUB. It is only + provided for debugging purposes. + +Package: grub-pc-bin +Priority: optional +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}) +Replaces: grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-pc (<< 1.99-1) +Suggests: desktop-base (>= 4.0.6) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (PC/BIOS binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + - VESA-based graphical mode with background image support and complete 24-bit + color set. + - Support for extended charsets. Users can write UTF-8 text to their menu + entries. + . + This package contains a version of GRUB that has been built for use with + traditional PC/BIOS architecture. It will not automatically install GRUB + as the active boot loader, nor will it automatically update grub.cfg on + upgrade, so most people should install grub-pc instead. + +Package: grub-pc +Priority: optional +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-pc-bin (= ${binary:Version}), ucf, freebsd-utils (>= 8.0-4) [kfreebsd-any], grub-gfxpayload-lists [any-i386 any-amd64] +Replaces: grub, grub-legacy, grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-efi-amd64, grub-efi-ia32, grub-coreboot, grub-ieee1275 +Conflicts: grub (<< 0.97-54), grub-legacy, grub-efi-amd64, grub-efi-ia32, grub-coreboot, grub-ieee1275 +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (PC/BIOS version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + - VESA-based graphical mode with background image support and complete 24-bit + color set. + - Support for extended charsets. Users can write UTF-8 text to their menu + entries. + . + This package contains a version of GRUB that has been built for use with + traditional PC/BIOS architecture. + +Package: grub-rescue-pc +Architecture: any-i386 any-amd64 +Depends: ${misc:Depends} +Multi-Arch: foreign +Description: GRUB bootable rescue images, version 2 (PC/BIOS version) + This package contains three GRUB rescue images that have been built for use + with the traditional PC/BIOS architecture: + . + - grub-rescue-floppy.img: floppy image. + - grub-rescue-cdrom.iso: El Torito CDROM image. + - grub-rescue-usb.img: USB image. + +Package: grub-coreboot-bin +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}) +Replaces: grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-linuxbios, grub-coreboot (<< 1.99-1) +Conflicts: grub-linuxbios (<< ${source:Version}) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Coreboot binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + platforms running the Coreboot firmware. It will not automatically install + GRUB as the active boot loader, nor will it automatically update grub.cfg + on upgrade, so most people should install grub-coreboot instead. + +Package: grub-coreboot +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-coreboot-bin (= ${binary:Version}), ucf +Replaces: grub-legacy, grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-linuxbios, grub-efi-amd64, grub-efi-ia32, grub-pc, grub-ieee1275 +Conflicts: grub (<< 0.97-54), grub-legacy, grub-linuxbios (<< ${source:Version}), grub-efi-amd64, grub-efi-ia32, grub-pc, grub-ieee1275 +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Coreboot version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + platforms running the Coreboot firmware. + +Package: grub-efi-ia32-bin +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}), efibootmgr [i386 amd64] +Replaces: grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-efi, grub-efi-ia32 (<< 1.99-1) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (EFI-IA32 binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + EFI-IA32 architecture, such as the one provided by Intel Macs (that is, unless + a BIOS interface has been activated). It will not automatically install + GRUB as the active boot loader, nor will it automatically update grub.cfg + on upgrade, so most people should install grub-efi-ia32 instead. + +Package: grub-efi-ia32 +Architecture: any-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-efi-ia32-bin (= ${binary:Version}), ucf +Replaces: grub, grub-legacy, grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-efi, grub-efi-amd64, grub-pc, grub-coreboot, grub-ieee1275 +Conflicts: grub (<< 0.97-54), grub-legacy, grub-efi-amd64, grub-pc, grub-coreboot, grub-ieee1275 +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (EFI-IA32 version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + EFI-IA32 architecture, such as the one provided by Intel Macs (that is, unless + a BIOS interface has been activated). + +Package: grub-efi-amd64-bin +Architecture: i386 kopensolaris-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}), efibootmgr [i386 amd64] +Replaces: grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-efi-amd64 (<< 1.99-1) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (EFI-AMD64 binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + EFI-AMD64 architecture, such as the one provided by Intel Macs (that is, unless + a BIOS interface has been activated). It will not automatically install + GRUB as the active boot loader, nor will it automatically update grub.cfg + on upgrade, so most people should install grub-efi-amd64 instead. + +Package: grub-efi-amd64 +Architecture: i386 kopensolaris-i386 any-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-efi-amd64-bin (= ${binary:Version}), ucf +Replaces: grub, grub-legacy, grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-pc, grub-efi-ia32, grub-coreboot, grub-ieee1275 +Conflicts: grub, grub-legacy, grub-efi-ia32, grub-pc, grub-coreboot, grub-ieee1275 +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (EFI-AMD64 version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + EFI-AMD64 architecture, such as the one provided by Intel Macs (that is, unless + a BIOS interface has been activated). + +Package: grub-ieee1275-bin +Architecture: any-i386 any-amd64 any-powerpc any-ppc64 any-sparc +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}), + powerpc-ibm-utils [any-powerpc any-ppc64], powerpc-utils [any-powerpc any-ppc64], bc [any-powerpc any-ppc64] +Replaces: grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-ieee1275 (<< 1.99-1) +Suggests: genisoimage [any-powerpc any-ppc64] +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Open Firmware binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + Open Firmware implementations. It will not automatically install GRUB as + the active boot loader, nor will it automatically update grub.cfg on + upgrade, so most people should install grub-ieee1275 instead. + +Package: grub-ieee1275 +Architecture: any-i386 any-amd64 any-powerpc any-ppc64 any-sparc +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-ieee1275-bin (= ${binary:Version}), ucf +Replaces: grub-legacy, grub2 (<< ${source:Version}), grub-common (<= 1.97~beta2-1), grub-efi-amd64, grub-efi-ia32, grub-coreboot, grub-pc +Conflicts: grub (<< 0.97-54), grub-legacy, grub-efi-amd64, grub-efi-ia32, grub-coreboot, grub-pc +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Open Firmware version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + Open Firmware implementations. + +Package: grub-firmware-qemu +Architecture: any-i386 any-amd64 +Depends: ${misc:Depends} +Recommends: qemu +Enhances: qemu +Multi-Arch: foreign +Description: GRUB firmware image for QEMU + This package contains a binary of GRUB that has been built for use as + firmware for QEMU. It can be used as a replacement for the standard + PC BIOS provided by the bochsbios package (bios.bin). + . + In order to make QEMU use this firmware, simply add `-bios grub.bin' when + invoking it. + . + This package behaves in the same way as GRUB for coreboot, but doesn't + contain any code from coreboot itself, and is only suitable for QEMU. If + you want to install GRUB as firmware on real hardware, you need to use the + grub-coreboot package, and manually combine that with coreboot. + +Package: grub-yeeloong-bin +Architecture: any-mipsel +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}) +Replaces: grub-common (<< 1.98+20100617-2), grub-yeeloong (<< 1.99-1) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Yeeloong binaries) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + the Lemote Yeeloong laptop. It will not automatically install GRUB as the + active boot loader, nor will it automatically update grub.cfg on upgrade, + so most people should install grub-yeeloong instead. + +Package: grub-yeeloong +Architecture: any-mipsel +Depends: ${shlibs:Depends}, ${misc:Depends}, grub2-common (= ${binary:Version}), grub-yeeloong-bin (= ${binary:Version}), ucf +Replaces: grub-common (<< 1.98+20100617-2) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Yeeloong version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub2. + . + This package contains a version of GRUB that has been built for use with + the Lemote Yeeloong laptop. + +Package: grub-mount-udeb +XC-Package-Type: udeb +Section: debian-installer +Architecture: i386 amd64 powerpc ppc64 sparc mipsel kfreebsd-i386 kfreebsd-amd64 +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: export GRUB filesystems using FUSE --- grub2-1.99.orig/debian/grub-common.links +++ grub2-1.99/debian/grub-common.links @@ -0,0 +1,2 @@ +usr/share/grub/grub-mkconfig_lib usr/lib/grub/grub-mkconfig_lib +usr/share/grub/update-grub_lib usr/lib/grub/update-grub_lib --- grub2-1.99.orig/debian/preinst.in +++ grub2-1.99/debian/preinst.in @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +case "$1" in + install|upgrade) + if dpkg --compare-versions "$2" lt 1.98+20100804-2 && \ + test -h /etc/kernel/postrm.d/zz-update-grub; then + rm -f /etc/kernel/postrm.d/zz-update-grub + fi + ;; +esac + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-firmware-qemu.dirs +++ grub2-1.99/debian/grub-firmware-qemu.dirs @@ -0,0 +1 @@ +usr/share/qemu --- grub2-1.99.orig/debian/update-grub.8 +++ grub2-1.99/debian/update-grub.8 @@ -0,0 +1,14 @@ +.\" Copyright 2009 Felix Zielcke +.\" Lincensed under GPL3+ +.TH UPDATE-GRUB "8" "April 2009" +.SH NAME +update-grub, update-grub2 \- stub for grub-mkconfig +.SH SYNOPSIS +.B update-grub +.SH DESCRIPTION +.B update-grub +is a stub for running +.B grub-mkconfig -o /boot/grub/grub.cfg +to generate a grub2 config file. +.SH "SEE ALSO" +.BR grub-mkconfig (8) --- grub2-1.99.orig/debian/rules +++ grub2-1.99/debian/rules @@ -0,0 +1,309 @@ +#!/usr/bin/make -f +SHELL := bash + +deb_version := $(shell dpkg-parsechangelog | sed -ne "s/^Version: \(.*\)/\1/p") +upstream_version := $(shell echo $(deb_version) | sed -e "s/-[^-]*$$//") + +package := grub2 + +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH 2>/dev/null) +DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS 2>/dev/null) +DEB_HOST_ARCH_CPU ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU 2>/dev/null) + +HOST_CFLAGS := -g -Wall + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + HOST_CFLAGS += -O0 +else + HOST_CFLAGS += -O2 +endif + +unexport CFLAGS +export HOST_CFLAGS +export TARGET_CPPFLAGS := -Wno-unused-but-set-variable + +ifeq (,$(shell which qemu-system-i386 2>/dev/null)) +with_check := no +else +with_check := yes +endif + +CC := gcc-4.6 + +# Enable external modules from grub-extras. +export GRUB_CONTRIB := $(CURDIR)/debian/grub-extras + +confflags = PACKAGE_VERSION="$(deb_version)" PACKAGE_STRING="GRUB $(deb_version)" CC=$(CC) TARGET_CC=$(CC) --enable-grub-mkfont + +AUTOGEN_DEB_FILES = config templates preinst postinst postrm dirs install links + +BUILD_PACKAGES := $(strip $(shell dh_listpackages)) +REAL_PACKAGES = grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 grub-ieee1275 grub-firmware-qemu grub-yeeloong + +ifneq (,$(filter i386 amd64,$(DEB_HOST_ARCH_CPU))) +COMMON_PLATFORM := pc +else ifneq (,$(filter powerpc ppc64 sparc,$(DEB_HOST_ARCH_CPU))) +COMMON_PLATFORM := ieee1275 +else ifeq (mipsel,$(DEB_HOST_ARCH_CPU)) +COMMON_PLATFORM := yeeloong +else +$(error COMMON_PLATFORM not set for $(DEB_HOST_ARCH_CPU)) +endif + +%: + dh $@ --with quilt + +override_dh_auto_configure: $(patsubst %,configure/%,$(BUILD_PACKAGES)) + +override_dh_auto_build: $(patsubst %,build/%,$(BUILD_PACKAGES)) + +override_dh_auto_install: $(patsubst %,install/%,$(BUILD_PACKAGES)) + +$(patsubst %,configure/%,$(REAL_PACKAGES)) :: configure/% : build/stamps/configure-% +$(patsubst %,build/%,$(REAL_PACKAGES) grub-rescue-pc) :: build/% : build/stamps/build-% + +build/stamps/configure-%: package = $(subst build/stamps/configure-,,$@) +build/stamps/configure-%: export DH_OPTIONS = -p$(package) -Bbuild/$(package) + +build/stamps/build-%: package = $(subst build/stamps/build-,,$@) +build/stamps/build-%: export DH_OPTIONS = -p$(package) -Bbuild/$(package) + +install/%: package = $(subst install/,,$@) +install/%: package_bin = $(package)-bin +install/grub-emu: package_bin = grub-emu +install/%: export DH_OPTIONS = -p$(package) -Bbuild/$(patsubst grub-common,grub-$(COMMON_PLATFORM),$(package)) + +override_dh_quilt_patch: + dh_quilt_patch + rm -f build/stamps/autogen + +override_dh_quilt_unpatch: + dh_quilt_unpatch + rm -f build/stamps/autogen + # workaround for quilt < 0.60 + touch grub-core/lib/posix_wrap/limits.h + +build/stamps/autogen: autogen.sh configure.ac Makefile.util.def grub-core/Makefile.core.def + mkdir -p build/stamps + ./autogen.sh + touch $@ + +build/stamps/configure-grub-common: build/stamps/configure-grub-$(COMMON_PLATFORM) + +build/stamps/build-grub-common: build/stamps/build-grub-$(COMMON_PLATFORM) + +build/stamps/configure-grub-pc build/stamps/configure-grub-ieee1275 build/stamps/configure-grub-coreboot build/stamps/configure-grub-emu build/stamps/configure-grub-yeeloong: build/stamps/autogen + mkdir -p build/stamps build/$(package) + dh_auto_configure -- $(confflags) --with-platform=$(subst grub-,,$(package)) + touch $@ + +# This name scheme leaves room for things like ia64 or amd32 someday +build/stamps/configure-grub-efi-ia32: build/stamps/autogen + mkdir -p build/stamps build/$(package) + dh_auto_configure -- $(confflags) --with-platform=efi --target=i386-pe --program-prefix="" + touch $@ +build/stamps/configure-grub-efi-amd64: build/stamps/autogen + mkdir -p build/stamps $(subst build/stamps/configure-,build/,$@) + dh_auto_configure -- $(confflags) --with-platform=efi --target=amd64-pe --program-prefix="" + touch $@ + +build/stamps/configure-grub-firmware-qemu: build/stamps/autogen + mkdir -p build/stamps $(subst build/stamps/configure-,build/,$@) + dh_auto_configure -- $(confflags) --with-platform=qemu + touch $@ + +build/stamps/build-grub-efi-ia32 build/stamps/build-grub-efi-amd64 build/stamps/build-grub-ieee1275 build/stamps/build-grub-coreboot build/stamps/build-grub-emu build/stamps/build-grub-yeeloong: build/stamps/build-%: build/stamps/configure-% + dh_auto_build + touch $@ + +build/stamps/build-grub-pc: build/stamps/configure-grub-pc + dh_auto_build +ifeq ($(with_check), yes) + PATH="$$PATH:/sbin:/usr/sbin" dh_auto_test +endif + touch $@ + +build/stamps/build-grub-firmware-qemu: build/stamps/configure-grub-firmware-qemu + dh_auto_build + grub_dir=`mktemp -d` ; \ + grub_memdisk=`mktemp` ; \ + trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \ + mkdir -p $${grub_dir}/boot/grub ; \ + cp debian/grub-firmware-qemu_grub.cfg $${grub_dir}/boot/grub/grub.cfg ; \ + tar -cf - -C $${grub_dir} boot > $${grub_memdisk} ; \ + $(CURDIR)/build/$(package)/grub-mkimage \ + -O i386-qemu \ + -d $(CURDIR)/build/$(package)/grub-core \ + $(CURDIR)/build/$(package)/grub-core/*.mod \ + -m $${grub_memdisk} \ + -o $(CURDIR)/build/$(package)/grub.bin + touch $@ + +build/stamps/build-grub-rescue-pc: build/stamps/build-grub-pc + mkdir -p build/grub-rescue-pc + cp -a build/grub-pc/grub-mkrescue build/grub-rescue-pc/grub-mkrescue + mkdir -p build/grub-rescue-pc/rescue-disk/boot/grub + cp docs/grub.cfg build/grub-rescue-pc/rescue-disk/boot/grub/ + sed -i 's,^prefix=.*,prefix=$(CURDIR)/build/grub-rescue-pc,' \ + build/grub-rescue-pc/grub-mkrescue + mkdir -p build/grub-rescue-pc/lib/grub + rm -rf build/grub-rescue-pc/lib/grub/i386-pc + cp -a build/grub-pc/grub-core build/grub-rescue-pc/lib/grub/i386-pc + $(CURDIR)/build/grub-rescue-pc/grub-mkrescue \ + --grub-mkimage=$(CURDIR)/build/grub-pc/grub-mkimage \ + --output=$(CURDIR)/build/grub-rescue-pc/grub-rescue-cdrom.iso \ + $(CURDIR)/build/grub-rescue-pc/rescue-disk + # save space for floppy image + rm -rf build/grub-rescue-pc/lib/grub/i386-pc/po + $(CURDIR)/build/grub-rescue-pc/grub-mkrescue \ + --grub-mkimage=$(CURDIR)/build/grub-pc/grub-mkimage \ + --output=$(CURDIR)/build/grub-rescue-pc/grub-rescue-floppy.img \ + --diet \ + $(CURDIR)/build/grub-rescue-pc/rescue-disk + touch $@ + +platform_subst = \ + if [ -e debian/$(1) ]; then \ + sed debian/$(1) \ + -e "s/@PACKAGE@/$(2)/g" \ + -e "s/@CPU_PLATFORM@/$$cpu_platform/g" \ + >> debian/$(2).$(3); \ + fi + +install/grub-pc install/grub-efi-ia32 install/grub-efi-amd64 install/grub-ieee1275 install/grub-coreboot install/grub-emu install/grub-yeeloong: + dh_auto_install --destdir=debian/tmp-$(package) + + if [ "$@" != "install/grub-emu" ] ; then \ + set -e ; \ + cpu_platform=$$(find debian/tmp-$(package)/usr/lib/grub \ + -mindepth 1 -maxdepth 1 -type d -printf '%P\n') ; \ + for i in $(AUTOGEN_DEB_FILES) ; do \ + > debian/$(package).$$i; \ + $(call platform_subst,$$i.in,$(package),$$i); \ + $(call platform_subst,$(package).$$i.in,$(package),$$i); \ + $(call platform_subst,$(package).$$i.$(DEB_HOST_ARCH_CPU).in,$(package),$$i); \ + $(call platform_subst,$(package).$$i.$(DEB_HOST_ARCH_OS).in,$(package),$$i); \ + [ -s debian/$(package).$$i ] || rm -f debian/$(package).$$i; \ + > debian/$(package_bin).$$i; \ + $(call platform_subst,$$i-bin.in,$(package_bin),$$i); \ + $(call platform_subst,$(package_bin).$$i.in,$(package_bin),$$i); \ + $(call platform_subst,$(package_bin).$$i.$(DEB_HOST_ARCH_CPU).in,$(package_bin),$$i); \ + $(call platform_subst,$(package_bin).$$i.$(DEB_HOST_ARCH_OS).in,$(package_bin),$$i); \ + [ -s debian/$(package_bin).$$i ] || rm -f debian/$(package_bin).$$i; \ + done ; \ + fi + + mkdir -p $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides + echo "$(package_bin): unstripped-binary-or-object *.mod" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) + cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \ + | sed -e "s%.*%$(package_bin): statically-linked-binary &%g" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) + cd debian/tmp-$(package) && find ./usr/lib/grub -name kernel.img \ + | sed -e "s%.*%$(package_bin): statically-linked-binary &%g" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) + cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \ + | sed -e "s%.*%$(package_bin): unstripped-binary-or-object &%g" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) + if [ "$@" = "install/grub-efi-amd64" ] && [ "$(DEB_HOST_ARCH_CPU)" = "i386" ] ; then \ + echo "$(package_bin): binary-from-other-architecture *.mod" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \ + cd debian/tmp-$(package) && find usr/lib/grub -name kernel.img \ + | sed -e "s%.*%$(package_bin): binary-from-other-architecture &%g" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \ + fi + if ([ "$@" = "install/grub-pc" ] || \ + [ "$@" = "install/grub-ieee1275" ] || \ + [ "$@" = "install/grub-coreboot" ] || \ + [ "$@" = "install/grub-emu" ]) && \ + [ "$(DEB_HOST_ARCH_CPU)" = "i386" ] ; then \ + echo "$(package_bin): binary-from-other-architecture *efiemu64.o" \ + >> $(CURDIR)/debian/$(package_bin)/usr/share/lintian/overrides/$(package_bin) ; \ + fi + +install/grub-common: + set -e ; for i in $(AUTOGEN_DEB_FILES) ; do \ + if [ -e debian/grub-common.$$i.in ] ; then \ + cat debian/grub-common.$$i.in \ + > debian/grub-common.$$i ; \ + fi ; \ + if [ -e debian/grub-common.$$i.$(DEB_HOST_ARCH_CPU).in ] ; then \ + cat debian/grub-common.$$i.$(DEB_HOST_ARCH_CPU).in \ + >> debian/grub-common.$$i ; \ + fi ; \ + if [ -e debian/grub-common.$$i.$(DEB_HOST_ARCH_OS).in ] ; then \ + cat debian/grub-common.$$i.$(DEB_HOST_ARCH_OS).in \ + >> debian/grub-common.$$i ; \ + fi ; \ + done + install -m 0755 debian/grub-common.pm-sleep $(CURDIR)/debian/$(package)/etc/pm/sleep.d/10_grub-common + +override_dh_install: + dh_install -pgrub2 -pgrub-linuxbios -pgrub-efi -pgrub-rescue-pc -pgrub-firmware-qemu + set -e; for package in grub-common grub2-common grub-mount-udeb; do \ + dh_install -p$$package --sourcedir=debian/tmp-grub-$(COMMON_PLATFORM); \ + done + rm -f debian/grub2-common/usr/share/info/dir* + set -e; for package in grub-pc grub-efi-ia32 grub-efi-amd64 grub-ieee1275 grub-coreboot grub-yeeloong; do \ + dh_install -p$$package --sourcedir=debian/tmp-$$package; \ + dh_install -p$$package-bin --sourcedir=debian/tmp-$$package; \ + done + dh_install -pgrub-emu --sourcedir=debian/tmp-grub-emu + +override_dh_installdocs: + dh_installdocs -pgrub-common -pgrub-rescue-pc -pgrub-firmware-qemu -A AUTHORS NEWS README THANKS TODO + dh_installdocs -Ngrub-common -Ngrub-rescue-pc -Ngrub-firmware-qemu --link-doc=grub-common + +override_dh_installinit: + dh_installinit -- start 99 2 3 4 5 . + +override_dh_strip: + dh_strip -X/usr/bin/grub-emu + +ifeq ($(DEB_HOST_ARCH),amd64) +TARNAME := grub2_$(deb_version)_$(DEB_HOST_ARCH).tar.gz +endif + +override_dh_builddeb: + dh_builddeb +ifeq ($(DEB_HOST_ARCH),amd64) + sh debian/build-efi-images \ + build/grub-$(COMMON_PLATFORM)/grub-mkimage \ + build/grub-efi-amd64/grub-core \ + debian/grub2-images/$(deb_version) \ + x86_64-efi x64 + echo $(deb_version) \ + > debian/grub2-images/$(deb_version)/version + cd debian/grub2-images && tar czvf ../../../$(TARNAME) . + dpkg-distaddfile $(TARNAME) raw-uefi - +endif + +override_dh_auto_clean: + -rm -rf build + -rm -f contrib grub-core/contrib + +override_dh_clean: debian/legacy/update-grub debian/grub-extras + dh_clean + + chmod +x debian/{script,grub.d/*,legacy/*,kernel/*} + + for i in $(AUTOGEN_DEB_FILES) ; do \ + rm -f debian/grub-{pc,efi-*,ieee1275,coreboot,yeeloong}{,-bin}.$$i ; \ + done + rm -rf debian/tmp-*/ +ifeq ($(DEB_HOST_ARCH),amd64) + rm -rf debian/grub2-images +endif + + # make sure PO files are always up-to-date + debconf-updatepo + +debian/legacy/update-grub: + @echo "Missing $@. Try: \"bzr cat http://bzr.debian.org/bzr/pkg-grub/trunk/grub-legacy/debian/update-grub > $@\"" + exit 1 + +debian/grub-extras: + @echo "Missing $@. Try: \"mkdir -p $@; for extra in 915resolution ntldr-img; do bzr export $@/\$$extra http://bzr.savannah.nongnu.org/r/grub-extras/\$$extra; done\"" + exit 1 + +.PHONY: $(patsubst %,configure/%,$(BUILD_PACKAGES)) $(patsubst %,build/%,$(BUILD_PACKAGES)) $(patsubst %,install/%,$(BUILD_PACKAGES)) --- grub2-1.99.orig/debian/compat +++ grub2-1.99/debian/compat @@ -0,0 +1 @@ +7 --- grub2-1.99.orig/debian/grub-common.preinst +++ grub2-1.99/debian/grub-common.preinst @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +# Taken from http://wiki.debian.org/DpkgConffileHandling +# Remove a no-longer used conffile +rm_conffile() { + local PKGNAME="grub-common" + local CONFFILE="$1" + + [ -e "$CONFFILE" ] || return 0 + + local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')" + local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PKGNAME | \ + sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")" + if [ "$md5sum" != "$old_md5sum" ]; then + echo "Obsolete conffile $CONFFILE has been modified by you." + echo "Saving as $CONFFILE.dpkg-bak ..." + mv -f "$CONFFILE" "$CONFFILE".dpkg-bak + else + echo "Removing obsolete conffile $CONFFILE ..." + rm -f "$CONFFILE" + fi +} + +case "$1" in + install|upgrade) + if dpkg --compare-versions "$2" lt "1.98~20091229-1" ; then + rm_conffile "/etc/grub.d/10_freebsd" + fi + if dpkg --compare-versions "$2" lt "1.96+20090521-1" ; then + if [[ `dpkg --print-architecture` != hurd-* ]] ; then + rm_conffile "/etc/grub.d/10_hurd" + fi + if [[ `dpkg --print-architecture` = hurd-* ]] || [[ `dpkg --print-architecture` = kfreebsd-* ]] ; then + rm_conffile "/etc/grub.d/10_linux" + fi + fi + ;; + abort-upgrade) + ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 --- grub2-1.99.orig/debian/grub-rescue-pc.install +++ grub2-1.99/debian/grub-rescue-pc.install @@ -0,0 +1,2 @@ +build/grub-rescue-pc/grub-rescue-cdrom.iso usr/lib/grub-rescue +build/grub-rescue-pc/grub-rescue-floppy.img usr/lib/grub-rescue --- grub2-1.99.orig/debian/clean +++ grub2-1.99/debian/clean @@ -0,0 +1 @@ +debian/grub-common.install --- grub2-1.99.orig/debian/grub-firmware-qemu.install +++ grub2-1.99/debian/grub-firmware-qemu.install @@ -0,0 +1 @@ +build/grub-firmware-qemu/grub.bin usr/share/qemu --- grub2-1.99.orig/debian/grub-pc.dirs.in +++ grub2-1.99/debian/grub-pc.dirs.in @@ -0,0 +1 @@ +usr/lib/grub-legacy --- grub2-1.99.orig/debian/grub-extras/ntldr-img/bin2h.c +++ grub2-1.99/debian/grub-extras/ntldr-img/bin2h.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2008 Robert Millan + * + * This program 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 3 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, see . + */ + +#include +#include + +int +main (int argc, char *argv[]) +{ + int b, i; + char *sym; + unsigned int len; + + if (argc != 3) + { + fprintf (stderr, "Usage: %s symbol_name length\n", argv[0]); + exit (1); + } + + sym = argv[1]; + len = atoi (argv[2]); + + b = getchar (); + if (b == EOF) + goto abort; + + printf ("/* THIS CHUNK OF BYTES IS AUTOMATICALY GENERATED */\n" + "unsigned char %s[%u] =\n{\n", sym, len); + + while (1) + { + printf ("0x%02x", b); + + b = getchar (); + if (b == EOF) + goto end; + + for (i = 0; i < 16 - 1; i++) + { + printf (", 0x%02x", b); + + b = getchar (); + if (b == EOF) + goto end; + } + + printf (",\n"); + } + +end: + printf ("\n};\n"); + +abort: + exit (0); +} --- grub2-1.99.orig/debian/grub-extras/ntldr-img/grubinst.c +++ grub2-1.99/debian/grub-extras/ntldr-img/grubinst.c @@ -0,0 +1,1036 @@ +/* + * GRUB Utilities -- Utilities for GRUB Legacy, GRUB2 and GRUB for DOS + * Copyright (C) 2007 Bean (bean123@126.com) + * + * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 + +#define O_BINARY 0 + +#endif + +#include "grub_mbr.h" +#include "utils.h" +#include "version.h" + +// Application flags, used by this program + +#define AFG_VERBOSE 1 +#define AFG_PAUSE 2 +#define AFG_READ_ONLY 4 +#define AFG_NO_BACKUP_MBR 8 +#define AFG_FORCE_BACKUP_MBR 16 +#define AFG_RESTORE_PREVMBR 32 +#define AFG_LIST_PART 64 +#define AFG_IS_FLOPPY 128 +#define AFG_LBA_MODE 256 +#define AFG_CHS_MODE 512 +#define AFG_OUTPUT 1024 +#define AFG_EDIT 2048 + +// Grldr flags, this flag is used by grldr.mbr + +#define GFG_DISABLE_FLOPPY 1 +#define GFG_DISABLE_OSBR 2 +#define GFG_DUCE 4 +#define GFG_PREVMBR_LAST 128 + +#define APP_NAME "grubinst: " + +#define print_pause if (afg & AFG_PAUSE) {fputs("Press to continue ...\n",stderr); fflush(stderr); fgetc(stdin);} + +#define print_apperr(a) { fprintf(stderr,APP_NAME "%s\n",a); print_pause; } +#define print_syserr(a) { perror(APP_NAME a); print_pause; } + +void help(void) +{ + fputs("Usage:\n" + "\tgrubinst [OPTIONS] DEVICE_OR_FILE\n\n" + "OPTIONS:\n\n" + "\t--help,-h\t\tShow usage information\n\n" + "\t--pause\t\t\tPause before exiting\n\n" + "\t--version\t\tShow version information\n\n" + "\t--verbose,-v\t\tVerbose output\n\n" + "\t--list-part,-l\t\tList all logical partitions in DEVICE_OR_FILE\n\n" + "\t--save=FN,-s=FN\t\tSave the orginal MBR/BS to FN\n\n" + "\t--restore=FN,-r=FN\tRestore MBR/BS from previously saved FN\n\n" + "\t--restore-prevmbr,-r\tRestore previous MBR saved in the second sector\n" + "\t\t\t\tof DEVICE_OR_FILE\n\n" + "\t--read-only,-t\t\tdo everything except the actual write to the\n" + "\t\t\t\tspecified DEVICE_OR_FILE. (test mode)\n\n" + "\t--no-backup-mbr\t\tdo not copy the old MBR to the second sector of\n" + "\t\t\t\tDEVICE_OR_FILE.\n\n" + "\t--force-backup-mbr\tforce the copy of old MBR to the second sector\n" + "\t\t\t\tof DEVICE_OR_FILE.(default)\n\n" + "\t--mbr-enable-floppy\tenable the search for GRLDR on floppy.(default)\n\n" + "\t--mbr-disable-floppy\tdisable the search for GRLDR on floppy.\n\n" + "\t--mbr-enable-osbr\tenable the boot of PREVIOUS MBR with invalid\n" + "\t\t\t\tpartition table (usually an OS boot sector).\n" + "\t\t\t\t(default)\n\n" + "\t--mbr-disable-osbr\tdisable the boot of PREVIOUS MBR with invalid\n" + "\t\t\t\tpartition table (usually an OS boot sector).\n\n" + "\t--duce\t\t\tdisable the feature of unconditional entrance\n" + "\t\t\t\tto the command-line.\n\n" + "\t--boot-prevmbr-first\ttry to boot PREVIOUS MBR before the search for\n" + "\t\t\t\tGRLDR.\n\n" + "\t--boot-prevmbr-last\ttry to boot PREVIOUS MBR after the search for\n" + "\t\t\t\tGRLDR.(default)\n\n" + "\t--preferred-drive=D\tpreferred boot drive number, 0 <= D < 255.\n\n" + "\t--preferred-partition=P\tpreferred partition number, 0 <= P < 255.\n\n" + "\t--time-out=T,-t=T\twait T seconds before booting PREVIOUS MBR. if\n" + "\t\t\t\tT is 0xff, wait forever. The default is 5.\n\n" + "\t\t\t\tbefore booting PREVIOUS MBR. K is a word\n" + "\t\t\t\tvalue, just as the value in AX register\n" + "\t\t\t\treturned from int16/AH=1. The high byte is the\n" + "\t\t\t\tscan code and the low byte is ASCII code. The\n" + "\t\t\t\tdefault is 0x3920 for space bar.\n\n" + "\t--key-name=S\t\tSpecify the name of the hot key.\n\n" + "\t--floppy,-f\t\tif DEVICE_OR_FILE is floppy, use this option.\n\n" + "\t--floppy=N\t\tif DEVICE_OR_FILE is a partition on a hard\n" + "\t\t\t\tdrive, use this option. N is used to specify\n" + "\t\t\t\tthe partition number: 0,1,2 and 3 for the\n" + "\t\t\t\tprimary partitions, and 4,5,6,... for the\n" + "\t\t\t\tlogical partitions.\n\n" + "\t--sectors-per-track=S\tspecifies sectors per track for --floppy.\n" + "\t\t\t\t1 <= S <= 63, default is 63.\n\n" + "\t--heads=H\t\tspecifies number of heads for --floppy.\n" + "\t\t\t\t1 <= H <= 256, default is 255.\n\n" + "\t--start-sector=B\tspecifies hidden sectors for --floppy=N.\n\n" + "\t--total-sectors=C\tspecifies total sectors for --floppy.\n" + "\t\t\t\tdefault is 0.\n\n" + "\t--lba\t\t\tuse lba mode for --floppy. If the floppy BIOS\n" + "\t\t\t\thas LBA support, you can specify --lba here.\n" + "\t\t\t\tIt is assumed that all floppy BIOSes have CHS\n" + "\t\t\t\tsupport. So you would rather specify --chs.\n" + "\t\t\t\tIf neither --chs nor --lba is specified, then\n" + "\t\t\t\tthe LBA indicator(i.e., the third byte of the\n" + "\t\t\t\tboot sector) will not be touched.\n\n" + "\t--chs\t\t\tuse chs mode for --floppy. You should specify\n" + "\t\t\t\t--chs if the floppy BIOS does not support LBA.\n" + "\t\t\t\tWe assume all floppy BIOSes have CHS support.\n" + "\t\t\t\tSo it is likely you want to specify --chs.\n" + "\t\t\t\tIf neither --chs nor --lba is specified, then\n" + "\t\t\t\tthe LBA indicator(i.e., the third byte of the\n" + "\t\t\t\tboot sector) will not be touched.\n\n" + "\t--install-partition=I\tInstall the boot record onto the boot area of\n" + "\t-p=I\t\t\tpartition number I of the specified hard drive\n" + "\t\t\t\tor harddrive image DEVICE_OR_FILE.\n\n" + "\t--boot-file=F,-b=F\tChange the name of boot file.\n\n" + "\t--load-seg=S\t\tChange load segment for boot file.\n\n" + "\t--grub2,-2\t\tLoad grub2 kernel g2ldr instead of grldr.\n\n" + "\t--output,-o\t\tSave embeded grldr.mbr to DEVICE_OR_FILE.\n\n" + "\t--edit,-e\t\tEdit external grldr/grldr.mbr.\n", + stderr); +} + +int afg,gfg,def_drive,def_part,time_out,hot_key,part_num; +int def_spt,def_hds,def_ssc,def_tsc; +char *save_fn,*restore_fn,*boot_file,boot_file_83[12],*key_name; +unsigned short load_seg; + +static char fn_buf[24]; + +char* get_disk_name(int n) +{ +#if defined(WIN32) + sprintf(fn_buf,"\\\\.\\PhysicalDrive%d",n); +#elif defined(LINUX) + sprintf(fn_buf,"/dev/hd%c",'a'+n); +#elif defined(FREEBSD) + sprintf(fn_buf,"/dev/ad%d",n); +#else + print_apperr("Disk device is not supported in your system"); + return NULL; +#endif + return fn_buf; +} + +char* get_flop_name(int n) +{ +#if defined(WIN32) + if (n>1) + { + print_apperr("Only two floppy drives are supported"); + return NULL; + } + sprintf(fn_buf,"\\\\.\\%c:",'A'+n); +#elif defined(LINUX) || defined(FREEBSD) + sprintf(fn_buf,"/dev/fd%d",n); +#else + print_apperr("Floppy device is not supported in your system"); + return NULL; +#endif + return fn_buf; +} + +char* parse_fname(char* fn) +{ + if ((afg & AFG_OUTPUT) && (fn[0]=='(')) + { + print_apperr("Can\'t use device name while using --output option"); + return NULL; + } + if ((! strncmp(fn,"(hd",3)) || (! strncmp(fn,"(fd",3))) + { + int n; + char *p; + + n=strtol(&fn[3],&p,0); + if ((n<0) || (n>=MAX_DISKS)) + { + print_apperr("Invalid device number"); + return NULL; + } + if (*p==',') + { + part_num=strtol(p+1,&p,0); + if ((part_num<0) || (part_num>=MAX_PARTS)) + { + print_apperr("Invalid partition number"); + return NULL; + } + } + if ((*p!=')') || (*(p+1)!=0)) + { + print_apperr("Invalid device name"); + return NULL; + } + if (fn[1]=='h') + fn=get_disk_name(n); + else + { + fn=get_flop_name(n); + afg|=AFG_IS_FLOPPY; + } + } + return fn; +} + +char* str_upcase(char* str) +{ + int i; + + for (i=0;str[i];i++) + if ((str[i]>='a') && (str[i]<='z')) + str[i]-='a'-'A'; + + return str; +} + +char* str_lowcase(char* str) +{ + int i; + + for (i=0;str[i];i++) + if ((str[i]>='A') && (str[i]<='Z')) + str[i]+='a'-'A'; + + return str; +} + +int SetBootFile(char* fn) +{ + char* pc; + + if (*fn==0) + return 1; + if (strlen(fn)>7) + return 1; + pc=strchr(fn,'.'); + if (pc) + if ((pc==fn) || (pc-fn>8) || (strlen(pc+1)>3)) + return 1; + str_upcase(fn); + memset(boot_file_83,' ',sizeof(boot_file_83)-1); + if (pc) + { + memcpy(boot_file_83,fn,pc-fn); + memcpy(&boot_file_83[8],pc+1,strlen(pc+1)); + } + else + memcpy(boot_file_83,fn,strlen(fn)); + str_lowcase(fn); + boot_file=fn; + return 0; +} + +int chk_mbr(unsigned char* buf); + +void list(int hd) +{ + xde_t xe; + + xe.cur=xe.nxt=0xFF; + fprintf(stderr," # id base leng\n"); + while (! xd_enum(hd,&xe)) + fprintf(stderr,"%2d %02X %8X %8X\n",xe.cur,xe.dfs,xe.bse,xe.len); +} + +int is_grldr_mbr(char* buf) +{ + int i,n; + + i=0x1B7; + n=sizeof("Missing MBR-helper.")-1; + + while ((i>n) && (buf[i]==0)) + i--; + return (! strcmp(&buf[i-n+1],"Missing MBR-helper.")); +} + +int install(char* fn) +{ + int hd,nn,fs,slen; + char prev_mbr[sizeof(grub_mbr)]; + unsigned long ssec; + + if (fn==NULL) + return 1; + + if (afg & AFG_EDIT) + { + unsigned short r1,r2; + + if (afg & AFG_VERBOSE) + fprintf(stderr,"Edit mode\n"); + hd=open(fn,O_RDWR | O_BINARY,0644); + if (hd==-1) + { + print_syserr("open"); + return errno; + } + r1=valueat(grub_mbr[0x1FFA],0,unsigned short); + nn=read(hd,grub_mbr,sizeof(grub_mbr)); + if (nn==-1) + { + print_syserr("read"); + close(hd); + return errno; + } + if (nnvalueat(prev_mbr[n],8,unsigned long)) + ofs=valueat(prev_mbr[n],8,unsigned long); + } + if (ofs<(sizeof(prev_mbr)>>9)) + { + print_apperr("Not enough room to install mbr"); + close(hd); + return 1; + } + slen=sizeof(prev_mbr); + if (go_sect(hd,ofs)) + { + print_apperr("Can\'t seek to the first partition"); + close(hd); + return 1; + } + if (read(hd,bs,sizeof(bs))!=sizeof(bs)) + { + print_apperr("Fail to read boot sector"); + close(hd); + return 1; + } + nfs=get_fstype(bs); + if (nfs==FST_FAT32) + sln=0x5A - 0xB; + else if (nfs==FST_FAT16) + sln=0x3E - 0xB; + else + sln=0; + if (sln) + { + memcpy(&grub_mbr[0xB],&bs[0xB],sln); + valueat(grub_mbr[0],0x1C,unsigned long)=0; + valueat(grub_mbr[0],0xE,unsigned short)+=ofs; + } + } + else if (fs==FST_NTFS) + slen=2048; + else + slen=512; + + if (go_sect(hd,ssec)) + { + print_apperr("Can\'t seek to the start sector"); + close(hd); + return 1; + } + + if (save_fn) + { + int h2; + + h2=open(save_fn,O_CREAT | O_TRUNC | O_RDWR | O_BINARY,S_IREAD | S_IWRITE); + if (h2==-1) + { + print_syserr("open save file"); + close(hd); + return errno; + } + nn=write(h2,prev_mbr,slen); + if (nn==-1) + { + print_syserr("write save file"); + close(hd); + close(h2); + return errno; + } + if (nn=argc) + { + print_apperr("No filename specified"); + return 1; + } + if (idx + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. --- grub2-1.99.orig/debian/grub-extras/ntldr-img/utils.h +++ grub2-1.99/debian/grub-extras/ntldr-img/utils.h @@ -0,0 +1,59 @@ +/* + * GRUB Utilities -- Utilities for GRUB Legacy, GRUB2 and GRUB for DOS + * Copyright (C) 2007 Bean (bean123@126.com) + * + * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __UTILS_H +#define __UTILS_H + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#define MAX_DISKS 10 +#define MAX_PARTS 30 + +#define FST_OTHER 0 +#define FST_MBR 1 +#define FST_FAT16 2 +#define FST_FAT32 3 +#define FST_NTFS 4 +#define FST_EXT2 5 + +typedef struct { + unsigned char cur; // Current partition number + unsigned char nxt; // Next partition number + unsigned char dfs; // File system flag + unsigned char pad; // Padding + unsigned long bse; // Partition start address + unsigned long len; // Partition length + unsigned long ebs; // Base address for the extended partition +} xde_t; + +#define valueat(buf,ofs,type) *((type*)(((char*)&buf)+ofs)) + +extern int mbr_nhd, mbr_spt; +int go_sect(int,unsigned long); +int xd_enum(int,xde_t*); +int get_fstype(unsigned char*); +char* fst2str(int); +char* dfs2str(int); + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif +#endif /* __UTILS_H */ --- grub2-1.99.orig/debian/grub-extras/ntldr-img/README +++ grub2-1.99/debian/grub-extras/ntldr-img/README @@ -0,0 +1,11 @@ + +grub-extras is meant to be used as an overlay on grub2 source tree. + +Build instructions: + + - Copy grub-extras in a subdirectory of your grub2 checkout. + For example, "grub-extras". + + - Export GRUB_CONTRIB environment variable to point to this directory. + + - Build GRUB as usual. --- grub2-1.99.orig/debian/grub-extras/ntldr-img/Makefile.core.common +++ grub2-1.99/debian/grub-extras/ntldr-img/Makefile.core.common @@ -0,0 +1,37 @@ +if COND_i386_pc +# Compatibility symlink. +g2hdr.bin: g2hdr.img + rm -f $@ + $(LN_S) $< $@ +platform_DATA += g2hdr.bin +CLEANFILES += g2hdr.bin + +grldr.mbr: grldr.img + head -c 8192 $< > $@ +CLEANFILES += grldr.mbr + +bin2h: contrib/ntldr-img/bin2h.c + $(CC) $^ -o $@ +CLEANFILES += bin2h + +grub_mbr.h: grldr.mbr bin2h + ./bin2h grub_mbr 8192 < $< > $@ +CLEANFILES += grub_mbr.h + +grub-ntldr-img: contrib/ntldr-img/grubinst.c contrib/ntldr-img/utils.c grub_mbr.h + $(CC) -I. -I$(srcdir)/contrib/ntldr-img -DLINUX -o $@ $(srcdir)/contrib/ntldr-img/grubinst.c $(srcdir)/contrib/ntldr-img/utils.c +bin_PROGRAMS += grub-ntldr-img +CLEANFILES += grub-ntldr-img + +# Compatibility symlink. +grubinst: grub-ntldr-img + rm -f $@ + $(LN_S) $< $@ +noinst_PROGRAMS += grubinst +CLEANFILES += grubinst + +g2ldr.mbr: grub-ntldr-img + ./grub-ntldr-img --grub2 -o $@ +platform_DATA += g2ldr.mbr +CLEANFILES += g2ldr.mbr +endif --- grub2-1.99.orig/debian/grub-extras/ntldr-img/g2hdr.S +++ grub2-1.99/debian/grub-extras/ntldr-img/g2hdr.S @@ -0,0 +1,99 @@ +/* + * GRUB Utilities -- Utilities for GRUB Legacy, GRUB2 and GRUB for DOS + * Copyright (C) 2007 Bean (bean123@126.com) + * + * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include + + .file "g2hdr.S" + + .text + + .code16 + + .globl start, _start + +start: +_start: + + // We are at 0x2000:0 + // Move itself to 0x800:0 + // Don't modify dx + + cld + movw %cs, %ax + movw %ax, %ds + movw $0x800, %ax + movw %ax, %es + xorw %si, %si + movw %si, %di + movw $0x80, %cx + + rep + movsl + + ljmp $0, $(jump_start-start+0x8000) + +jump_start: + // Move data from 0x2040:0 to 0x820:0 + + movw $0x2040, %ax + movw %ax, %ds + movw $0x820, %ax + movw %ax, %es + xorl %eax, %eax + movb %dh, %al + movl %eax, GRUB_KERNEL_MACHINE_INSTALL_DOS_PART + movl GRUB_KERNEL_MACHINE_COMPRESSED_SIZE, %eax + addl $GRUB_KERNEL_MACHINE_RAW_SIZE, %eax + xorl %ecx, %ecx + +1: + xorw %si, %si + movw %si, %di + + movw $0x8000, %cx + cmpl %ecx, %eax + jae 2f + movw %ax, %cx +2: + + pushw %cx + addw $3, %cx + shrw $2, %cx + + rep + movsl + + popw %cx + + movw %ds, %si + addw $0x800, %si + movw %si, %ds + + movw %es, %si + addw $0x800, %si + movw %si, %es + + subl %ecx, %eax + jnz 1b + + ljmp $0, $(0x8000 + 0x200) + + . = _start + 0x200 - 2 + + .word 0xAA55 --- grub2-1.99.orig/debian/grub-extras/ntldr-img/ntfsbs.S +++ grub2-1.99/debian/grub-extras/ntldr-img/ntfsbs.S @@ -0,0 +1,1504 @@ +/* + * GRUB Utilities -- Utilities for GRUB Legacy, GRUB2 and GRUB for DOS + * Copyright (C) 2007 Bean (bean123@126.com) + * + * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* NTFS boot sector for loading GRLDR , written by bean + * + * This file can be compiled as standaolne boot sector, or it can be embeded in + * GRLDR.MBR at 0xA00 , right after the ext2 boot sector + * + * To compile the standalone ntfsbs.bin: + * gcc -c -o ntfsbs.o ntfsbs.S + * gcc -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 -o ntfsbs_exec ntfsbs.o + * objcopy -O binary ntfsbs_exec ntfsbs.bin + * + * To install the standalone ntfsbs.bin: + * grubinst --restore=ntfsbs.bin DEVICE_OR_FILE + * + * Where DEVICE_OR_FILE specify a NTFS partition + * + * Limitations: + * 1. Don't support >1K MFT record size, >4K INDEX record size + * 2. Don't support encrypted file + * 3. Don't support >4K non-resident attribute list and $BITMAP + * + */ + +#ifndef INSIDE_GRLDR + + .text + + .code16 +#endif + +#define AT_STANDARD_INFORMATION 0x10 +#define AT_ATTRIBUTE_LIST 0x20 +#define AT_FILENAME 0x30 +#define AT_OBJECT_ID 0x40 +#define AT_SECURITY_DESCRIPTOR 0x50 +#define AT_VOLUME_NAME 0x60 +#define AT_VOLUME_INFORMATION 0x70 +#define AT_DATA 0x80 +#define AT_INDEX_ROOT 0x90 +#define AT_INDEX_ALLOCATION 0xA0 +#define AT_BITMAP 0xB0 +#define AT_SYMLINK 0xC0 +#define AT_EA_INFORMATION 0xD0 +#define AT_EA 0xE0 + +#define MAX_MFT_SIZE 1 // 1<<(1+9) = 1024 +#define MAX_IDX_SIZE 3 // 1<<(3+9) = 4096 + +#define LOADSEG_NT 0x2000 + +#define MMFT_BASE 0x2000 +#define MMFT_EMFT (MMFT_BASE +1024) +#define MMFT_EBUF (MMFT_BASE + 2048) + +#define CMFT_BASE (MMFT_BASE + 6144) +#define CMFT_EMFT (CMFT_BASE + 1024) +#define CMFT_EBUF (CMFT_BASE + 2048) + +#define INDX_BASE (CMFT_BASE + 6144) + +#define SBUF_BASE (INDX_BASE + 4096) + +#define NTFS_Large_Structure_Error_Code 1 +#define NTFS_Corrupt_Error_Code 2 +#define NTFS_Run_Overflow_Error_Code 3 +#define NTFS_No_Data_Error_Code 4 +#define NTFS_Decompress_Error_Code 5 + +#define NT_FG_COMP 1 +#define NT_FG_MMFT 2 +#define NT_FG_ALST 4 +#define NT_FG_GPOS 8 + +#define nt_boot_drive -2(%bp) +#define nt_blocksize -4(%bp) +#define nt_spc -5(%bp) +#define nt_mft_size -6(%bp) +#define nt_idx_size -7(%bp) +#define nt_mft_start -12(%bp) +#define nt_remain_len -16(%bp) +//#define nt_file_count -18(%bp) + +#define nt_flag (%di) +#define nt_attr_cur 2(%di) +#define nt_attr_nxt 4(%di) +#define nt_attr_end 6(%di) +#define nt_curr_vcn 8(%di) +#define nt_curr_lcn 0x10(%di) +#define nt_attr_ofs 0x14(%di) +#define nt_target_vcn 0x18(%di) +#define nt_read_count 0x1C(%di) +#define nt_vcn_offset 0x20(%di) + +#define nt_emft_buf 1024(%di) +#define nt_edat_buf 2048(%di) + + .arch i586 + +Entry_nt: + jmp 1f + + . = Entry_nt + 0x02 + + .byte 0x90 /* for CHS. Another possible value is 0x0e for LBA */ + + .ascii "NTFS " + + .word 0 /* 0B - Bytes per sector */ + .byte 0 /* 0D - Sectors per cluster */ + .word 0 /* 0E - reserved sectors, unused */ + .byte 0 /* 10 - number of FATs, unused */ + .word 0 /* 11 - Max dir entries for FAT12/FAT16, unused */ + .word 0 /* 13 - total sectors for FAT12/FAT16, unused */ + .byte 0xF8 /* 15 - Media descriptor */ + .word 0 /* 16 - sectors per FAT for FAT12/FAT16, unused */ + .word 255 /* 18 - Sectors per track */ + .word 63 /* 1A - Number of heads */ +nt_part_ofs: + .long 0 /* 1C - hidden sectors */ + .long 0 /* 20 - total sectors for FAT32, unused */ + .long 0x800080 + /* 24 - Usually 80 00 80 00, A value of 80 00 00 00 has + * been seen on a USB thumb drive which is formatted + * with NTFS under Windows XP. Note this is removable + * media and is not partitioned, the drive as a whole + * is NTFS formatted. + */ + .long 0,0 /* 28 - Number of sectors in the volume */ + .long 0,0 /* 30 - LCN of VCN 0 of the $MFT */ + .long 0,0 /* 38 - LCN of VCN 0 of the $MFTMirr */ + .long 0 /* 40 - Clusters per MFT Record */ + .long 4 /* 44 - Clusters per Index Record */ + .long 0,0 /* 48 - Volume serial number */ + .long 0 /* 50 - Checksum, usually 0 */ + +1: + + . = Entry_nt + 0x54 + + cli + cld + + . = Entry_nt + 0x56 + + /* the byte at offset 0x57 stores the real partition number for read. + * the format program or the caller should set it to a correct value. + * For floppies, it should be 0xff, which stands for whole drive. + */ + + movb $0xff, %dh /* boot partition number */ + + xorw %ax, %ax + movw %ax, %ds + movw $0x7c00, %bp + movw %ax, %es + + movw %ax, %ss /* stack and BP-relative moves up, too */ + leaw -0x20(%bp), %sp + sti + + movw %dx, nt_boot_drive + + /* Test if your BIOS support LBA mode */ + movb $0x41, %ah + movw $0x55AA, %bx + int $0x13 + jc 1f /* No EBIOS */ + cmpw $0xAA55, %bx + jne 1f /* No EBIOS */ + testb $1, %cl + jz 1f /* No EBIOS */ + /* EBIOS supported */ + movb $0x42, (ebios_nt - 1 - Entry_nt)(%bp) +1: + + cmpl $0x42555247, (nt_sector_mark - Entry_nt)(%bp) + jz 1f // Must be called from GRLDR.MBR + + movw $0x7E00, %bx + movl (nt_part_ofs - Entry_nt)(%bp), %eax + incl %eax + call readDisk_nt // Load the second sector from disk + call readDisk_nt // Load the third sector from disk + call readDisk_nt +1: + + xorl %eax, %eax + movw 0xb(%bp), %ax // Bytes per sector (blocksize) + movw %ax, nt_blocksize + + call convert_to_power_2 + movb %cl, %bl + movb 0xd(%bp), %al // Sectors per cluster + call convert_to_power_2 + movb %cl, %ch + addb %bl, %ch + subb $9, %ch // 1< + +#endif + +#include +#include + +#include "utils.h" + +static unsigned char ebuf[512]; + +#if defined(WIN32) + +#ifdef __GNUC__ // Mingw or Cygwin + +#define u_off_t off64_t +#define u_lseek lseek64 + +#else + +#define u_off_t __int64 +#define u_lseek _lseeki64 + +#endif + +#else + +#define u_off_t off_t // In FreeBSD, off_t is 64-bit ! +#define u_lseek lseek + +#endif + +int go_sect(int hd,unsigned long sec) +{ + // Test if 64-bit seek is supported + if (sizeof(u_off_t)>=8) + { + u_off_t bs,rs; + + bs=sec; + bs<<=9; + rs=u_lseek(hd,bs,SEEK_SET); + return (bs!=rs); + } + else + { + unsigned long bs[2]; + + bs[0]=sec<<9; + bs[1]=sec>>23; + if (bs[1]) + return 1; + return (lseek(hd,bs[0],SEEK_SET)!=bs[0]); + } +} + +// Partition enumerator +// xe->cur is the current partition number, before the first call to xd_enum, +// it should be set to 0xFF +// xe->nxt is the target partition number, if it equals 0xFF, it means enumerate +// all partitions, otherwise, it means jump to the specific partition. +int xd_enum(int hd,xde_t* xe) +{ + int nn=512,kk=1,cc; + + for (cc=xe->cur;;) + { + if (cc==0xFF) + { + unsigned long pt[4][2]; + int i,j,np; + + if (go_sect(hd,0)) + return 1; + if (read(hd,ebuf,nn)!=nn) + return 1; + if (valueat(ebuf,0x1FE,unsigned short)!=0xAA55) + return 1; + np=0; + for (i=0x1BE;i<0x1FE;i+=16) + if (ebuf[i+4]) + { + if ((pt[np][1]=valueat(ebuf,i+12,unsigned long))==0) + return 1; + pt[np++][0]=valueat(ebuf,i+8,unsigned long); + } + if (np==0) + return 1; + // Sort partition table base on start address + for (i=0;ipt[j][0]) k=j; + if (k!=i) + { + unsigned long tt; + + tt=pt[i][0]; + pt[i][0]=pt[k][0]; + pt[k][0]=tt; + tt=pt[i][1]; + pt[i][1]=pt[k][1]; + pt[k][1]=tt; + } + } + // Should have space for MBR + if (pt[0][0]==0) + return 1; + // Check for partition overlap + for (i=0;ipt[i+1][0]) + return 1; + cc=0; + } + else if (kk) + cc++; + if ((unsigned char)cc>xe->nxt) + return 1; + if (cc<4) + { + if (xe->nxt<4) + { + // Empty partition + if (! ebuf[xe->nxt*16+4+0x1BE]) + return 1; + xe->cur=xe->nxt; + xe->dfs=ebuf[xe->nxt*16+4+0x1BE]; + xe->bse=valueat(ebuf,xe->nxt*16+8+0x1BE,unsigned long); + xe->len=valueat(ebuf,xe->nxt*16+12+0x1BE,unsigned long); + return 0; + } + else if (xe->nxt!=0xFF) + cc=4; + else while (cc<4) + { + if (ebuf[cc*16+4+0x1BE]) + { + xe->cur=cc; + xe->dfs=ebuf[cc*16+4+0x1BE]; + xe->bse=valueat(ebuf,cc*16+8+0x1BE,unsigned long); + xe->len=valueat(ebuf,cc*16+12+0x1BE,unsigned long); + return 0; + } + cc++; + } + } + if ((cc==4) && (kk)) + { + int i; + + // Scan for extended partition + for (i=0;i<4;i++) + if ((ebuf[i*16+4+0x1BE]==5) || (ebuf[i*16+4+0x1BE]==0xF)) break; + if (i==4) + return 1; + xe->ebs=xe->bse=valueat(ebuf,i*16+8+0x1BE,unsigned long); + } + else + { + // Is end of extended partition chain ? + if ((ebuf[4+0x1CE]!=0x5) && (ebuf[4+0x1CE]!=0xF) || + (valueat(ebuf,8+0x1CE,unsigned long)==0)) + return 1; + xe->bse=xe->ebs+valueat(ebuf,8+0x1CE,unsigned long); + } + { + int r; + + while (1) + { + if (go_sect(hd,xe->bse)) + return 1; + + if (read(hd,ebuf,nn)!=nn) + return 1; + + if (valueat(ebuf,0x1FE,unsigned short)!=0xAA55) + return 1; + + if ((ebuf[4+0x1BE]==5) || (ebuf[4+0x1BE]==0xF)) + if (valueat(ebuf,8+0x1BE,unsigned long)==0) + return 1; + else + { + xe->bse=xe->ebs+valueat(ebuf,8+0x1BE,unsigned long); + continue; + } + break; + } + kk=(ebuf[4+0x1BE]!=0); + if ((kk) && ((xe->nxt==0xFF) || (cc==xe->nxt))) + { + xe->cur=cc; + xe->dfs=ebuf[4+0x1BE]; + xe->bse+=valueat(ebuf,8+0x1BE,unsigned long); + xe->len=valueat(ebuf,12+0x1BE,unsigned long); + return 0; + } + } + } +} + +#define EXT2_SUPER_MAGIC 0xEF53 + +int mbr_nhd, mbr_spt; + +void split_chs(unsigned char* chs,unsigned long* c,unsigned long* h,unsigned long* s) +{ + *h=chs[0]; + *s=(chs[1] & 0x3F)-1; + *c=((unsigned long)(chs[1]>>6))*256+chs[2]; +} + +int chk_chs(unsigned long nhd,unsigned long spt,unsigned long lba,unsigned char* chs) +{ + unsigned long c,h,s; + + split_chs(chs,&c,&h,&s); + if (c==0x3FF) + return ((nhd==h+1) && (spt==s+1)); + else + return (c*nhd*spt+h*spt+s==lba); +} + +int chk_mbr(unsigned char* buf) +{ + unsigned long nhd,spt,a1,a2,c2,h2,s2; + int i; + + i=0x1BE; + while ((i<0x1FE) && (buf[i+4]==0)) + i+=16; + if (i>=0x1FE) + return 0; + a1=valueat(buf[i],8,unsigned long); + a2=a1+valueat(buf[i],12,unsigned long)-1; + if (a1>=a2) + return 0; + split_chs(buf+i+5,&c2,&h2,&s2); + if (c2==0x3FF) + { + nhd=h2+1; + spt=s2+1; + if (! chk_chs(nhd,spt,a1,buf+i+1)) + return 0; + } + else + { + unsigned long c1,h1,s1; + long n1,n2; + + split_chs(buf+i+1,&c1,&h1,&s1); + if ((c1==0x3FF) || (c1>c2)) + return 0; + n1=(long)(c1*a2)-(long)(c2*a1)-(long)(c1*s2)+(long)(c2*s1); + n2=(long)(c1*h2)-(long)(c2*h1); + if (n2<0) + { + n2=-n2; + n1=-n1; + } + if ((n2==0) || (n1<=0) || (n1 % n2)) + return 0; + spt=(unsigned long)(n1/n2); + if (c2) + { + n1=(long)a2-(long)s2-(long)(h2*spt); + n2=(long)(c2*spt); + if ((n2==0) || (n1<=0) || (n1 % n2)) + return 0; + nhd=(unsigned long)(n1/n2); + } + else + nhd=h2+1; + } + if ((nhd==0) || (nhd>255) || (spt==0) || (spt>63)) + return 0; + i+=16; + while (i<0x1FE) + { + if (buf[i+4]) + { + if ((! chk_chs(nhd,spt,valueat(buf[i],8,unsigned long),buf+i+1)) || + (! chk_chs(nhd,spt,valueat(buf[i],8,unsigned long)+valueat(buf[i],12,unsigned long)-1,buf+i+5))) + return 0; + } + i+=16; + } + mbr_nhd=(int)nhd; + mbr_spt=(int)spt; + return 1; +} + +int get_fstype(unsigned char* buf) +{ + if (chk_mbr(buf)) + return FST_MBR; + + // The first sector of EXT2 might not contain the 0xAA55 signature + if (valueat(buf[1024],56,unsigned short)==EXT2_SUPER_MAGIC) + return FST_EXT2; + if (valueat(buf[0],0x1FE,unsigned short)!=0xAA55) + return FST_OTHER; + if (! strncmp(&buf[0x36],"FAT",3)) + return ((buf[0x26]==0x28) || (buf[0x26]==0x29))?FST_FAT16:FST_OTHER; + if (! strncmp(&buf[0x52],"FAT32",5)) + return ((buf[0x42]==0x28) || (buf[0x42]==0x29))?FST_FAT32:FST_OTHER; + if (! strncmp(&buf[0x3],"NTFS",4)) + return ((buf[0]==0xEB) && (buf[1]==0x52))?FST_NTFS:FST_OTHER; + return FST_OTHER; +} + +char* fst2str(int fs) +{ + switch (fs) { + case FST_OTHER: + return "Other"; + case FST_MBR: + return "MBR"; + case FST_FAT16: + return "FAT12/FAT16"; + case FST_FAT32: + return "FAT32"; + case FST_NTFS: + return "NTFS"; + case FST_EXT2: + return "EXT2/EXT3"; + default: + return "Unknown"; + } +} + +typedef struct { + int id; + char* str; +} fstab_t; + +static fstab_t fstab[]= { + {0x1,"FAT12"}, + {0x4,"FAT16"}, + {0x5,"Extended"}, + {0x6,"FAT16B"}, + {0x7,"NTFS"}, + {0xB,"FAT32"}, + {0xC,"FAT32X"}, + {0xE,"FAT16X"}, + {0xF,"ExtendedX"}, + {0x11,"(H)FAT12"}, + {0x14,"(H)FAT16"}, + {0x16,"(H)FAT16B"}, + {0x17,"(H)NTFS"}, + {0x1B,"(H)FAT32"}, + {0x1C,"(H)FAT32X"}, + {0x1E,"(H)FAT16X"}, + {0x82,"Swap"}, + {0x83,"Ext2"}, + {0xA5,"FBSD"}, + {0,"Other"}}; + +char* dfs2str(int fs) +{ + int i; + + for (i=0;fstab[i].id;i++) + if (fs==fstab[i].id) + return fstab[i].str; + return fstab[i].str; +} --- grub2-1.99.orig/debian/grub-extras/ntldr-img/version.h +++ grub2-1.99/debian/grub-extras/ntldr-img/version.h @@ -0,0 +1,3 @@ +#define VERSION "1.1" +#define VER_MAJOR 1 +#define VER_MINOR 1 --- grub2-1.99.orig/debian/grub-extras/ntldr-img/grldrstart.S +++ grub2-1.99/debian/grub-extras/ntldr-img/grldrstart.S @@ -0,0 +1,5786 @@ +/* + * grldrstart.S -- Startup code for GRLDR + * Copyright (C) 2004-2007 Tinybit(tinybit@tom.com) + * Copyright (C) 2007 Bean(bean@windrv.net) + * + * This program 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * This program is used to generate the GRLDR file. + * + * Use the following shell command to generate the GRLDR file: + * + * cat grldrstart pre_stage2 > grldr + * + */ + +#ifndef STAGE1_5 +//#include +#else +#error cannot compile with STAGE1_5 +#endif + +#ifdef GRLDR_MBR + .file "mbrstart.S" +#elif defined(GRLDR_INSTALL) + .file "bootlacestart.S" +#else + .file "grldrstart.S" +#endif + +#ifdef GRLDR_INSTALL + //.data +#else + .text + + .globl start, _start + +start: +_start: +#endif + +_start1: + + /* Tell GAS to generate 16-bit real mode instructions */ + + .code16 + + . = _start1 + 0x00 + + /* 1 byte at offset 0x00 will be overwritten for the EBIOS indicator + * later. This is safe because the jmp instruction only get executed + * once. The write happens after the jmp instruction have got + * executed. + * + * The value written would be 0x42 for EBIOS present(LBA) and 0x02 + * for non-present(CHS). + * + */ + + /* No cli, we use stack! BIOS or caller usually sets SS:SP=0000:0400 */ + + jmp 1f /* FAT32/NTFS routine comes to offset 0 */ + + . = _start1 + 0x02 + + .byte 0x80 /* bit0=1: disable GRLDR search on floppy */ + /* bit1=1: disable the boot of the previous MBR with + * invalid partition table */ + /* bit2=1: disable the feature of unconditional + * entrance to the command-line */ + /* bit7=1: disable the boot of the previous MBR prior + to the search for GRLDR */ + + /* GRLDR.MBR uses offset 0x03 to indicate a timer counter. */ + + /* 0xff indicates waiting forever, + * other value specifies the time in seconds to wait */ + + . = _start1 + 0x03 + + .byte 5 + + /* a key press to wait. if AX returned from int16 equals this word, + * the desired action will occur. */ + + . = _start1 + 0x04 + + .word 0x3920 /* the space bar */ + + . = _start1 + 0x06 + + .byte 0xff /* preferred boot drive number, 0xff for no-drive(i.e., drive not defined) */ + .byte 0xff /* preferred partition number, 0xff for whole drive(a floppy that has no partition table) */ + + . = _start1 + 8 + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + /* filled in by mkisofs using the -boot-info-table option */ + +#;bi_pvd: .long 0xDEADBEEF /* LBA of primary volume descript */ +#;bi_file: .long 0xDEADBEEF /* LBA of boot file */ +#;bi_length: .long 0xDEADBEEF /* Length of boot file */ +#;bi_csum: .long 0xDEADBEEF /* Checksum of boot file */ +#;bi_reserved: .space (10*4) /* Reserved */ + + . = _start1 + 0x40 + +#else + + /* filled in with BPB in case the drive(typically USB) is treated as floppy by buggy BIOSes */ + + . = _start1 + 0x60 + +#endif /* ! defined(GRLDR_MBR) && (! defined(GRLDR_INSTALL)) */ + +1: + call 1f + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + . = _start1 + 0x43 + +#else + + . = _start1 + 0x63 + +#endif /* ! defined(GRLDR_MBR) && (! defined(GRLDR_INSTALL)) */ + +1: + popw %bx /* Instruction Pointer of 1b */ + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + subw $(1b - _start1), %bx /* CS:BX=_start1 */ + +#else + + subw $(1b - _start1), %bx /* CS:BX=_start1 */ + +#endif /* ! defined(GRLDR_MBR) && (! defined(GRLDR_INSTALL)) */ + + shrw $4, %bx + movw %cs, %ax + addw %ax, %bx /* BX:0000=_start1 */ + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + /* we are booted from BOOT.INI, or whole GRLDR image already loaded */ + + pushw %bx /* BX:0000=_start1 */ + addw $((grldr_signature - _start1 + 4 + STAGE2_SIZE - 4) >> 4), %bx + movw %bx, %ds + + cmpl $0xCE1A02B0, ((STAGE2_SIZE - 4) & 0x0F) + popw %ds /* DS:0000=_start1 */ + je grldr_real_start /* whole image loaded. boot it! */ + + /* bad! we might be loaded by a buggy BIOS with a no-emulation-mode + * bootable CD. The buggy BIOS might load only 1 CD-ROM sector(2048 + * bytes) of our grldr image. So we need this check. + */ + + /* Our cdrom_check code begins at 0x1BE and overlaps the partition + * table. Just in case someone replace it with a partition table and + * use this sector as an MBR, we do this additional test for safety. + */ + + /* We should avoid using opcode 0x00 and 0x80 at cdrom_check. */ + + /* Note that if cdrom_check code is present, then we are booting from + * no-emulation mode cdrom. + */ + + testb $0x7F, cdrom_check - _start1 /* is it 0x00 or 0x80? */ + jz 1f /* yes, cdrom_check not found */ + call cdrom_check /* no, cdrom_check is present */ +1: + /* DS:0000=_start1 */ + + /* Let CS:0000=_start1 */ + pushw %ds + + #;pushw $(1f - _start1) + .byte 0x6A, (1f - _start1) + + lret + . = . - (. - _start1) / 0x80 +1: +#else + /* BX:0000=_start1 */ + + movw %bx, %ds + + /* Let CS:0000=_start1 */ + pushw %bx + + #;pushw $(1f - _start1) + .byte 0x6A, (1f - _start1) + + lret + . = . - (. - _start1) / 0x80 +1: + testb $0x04, 0x02 + jz 1f + + /* set the DUCE indicator */ + xorw %ax, %ax + movw %ax, %es + movw $0x5FC, %di + movl $0x45435544, %eax + stosl +1: +#endif + + /* CS:0000=DS:0000=_start1 */ + + /* we are loaded by BIOS or another boot loader */ + +#define GRLDR_CS 0x2000 /* grldr code segment */ + /* hope this segment never be used by all */ + /* subsequent partition boot records */ +#if 0 + /* for single sector boot record */ +#define MONITOR 0x7e10 +#else + /* for 4-sector NTFS boot record */ +#define MONITOR 0x8410 +#endif + +// cli + pushw $GRLDR_CS + popw %ss + movw $0x9000, %sp /* SS:SP=0x9d000, keep away from EBDA data */ +// sti + + /* Extended BIOS Data Area should not take up space below 0x9d000 */ + + /* + * 0x07c00-0x07dff This sector. Another boot loader load us here + * 0x0d000-0x14dff partition/floppy boot track(bootsector,etc) + * 0x94000-0x9bdff master boot track(MBR,etc,usually 63 sectors) + * 0x9be00-0x9c3ff 3 sectors for temp extended partition entries + * 0x9c400-0x9cfff 6 sectors for stack + */ + +#define FS_BOOT 0xd00 /* segment of partition boot track */ + + xorw %cx, %cx + pushw %cx /* CX=0 */ + movw $0x0080, %dx + pushw %dx + movb $8, %ah /* read drive parameters changes DX,ES,DI */ + stc + int $0x13 + popw %dx + popw %ax /* AX=0 */ + + pushw %ss /* SS=0x9400 */ + popw %es /* ES=0x9400 */ + + jc Error1 + + andb $63, %cl /* AL=sectors per track, CF cleared */ + + stc + jz Error1 + + xchgw %ax, %cx /* this moves CL to AL, and CX=0 */ + movb $0x02, %ah + movw %ax, %bp /* save AX to BP: read 1 track */ + xorw %bx, %bx /* ES already has a known value of 0x9400 */ + incw %cx + pushw %dx + stc + int $0x13 /* read master boot track to ES:0000 */ + popw %dx + jc Error1 + negb %ah /* set CF=1 if non-zero */ +Error1: + pushw %cs /* DS=0 */ + popw %ds /* DS=CS */ + pushfw /* CF=1 on error */ + + /* CS=DS=old segment. ES=SS=new segment. */ + + /* Move the code and error messages from DS:0000 to 9400:0000, do not + * touch the partition table + */ + xorw %si, %si + xorw %di, %di + movw $223, %cx /* 223 words = 446 bytes = 0x1be bytes */ + cld + repz movsw /* SI=DI=0x1be, CX=0 */ + + movw $(grldr_signature - _start1), %bx + + /* if the boot loader has loaded more than one sector, we use them */ + movl $0xAA555247, %eax /* "GR" 0x55 0xAA */ +//#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + cmpl %eax, (%bx) /* DS=old segment! */ + jne 1f + + /* The MOVE_HELPER code is in the old segment! */ + + call move_helper /* SI=0x1be, CX=0 */ +1: +//#endif + + /* Jump to new segment! */ +#if 1 + ljmp $GRLDR_CS, $(1f - _start1) +#else + pushw %ss /* 0x9400 */ + + //pushw $(1f - _start1) + .byte 0x6A, (1f - _start1) + + lret + . = . - (. - _start1) / 0x80 +#endif +1: + + /* We are at the new segment. CS=ES=SS=new segment. */ + + /* But DS is still old segment. */ + + pushw %ss + popw %ds + + /* CS=DS=ES=SS=new segment. */ + + //movw $0x01be, %si + + /* check the existence of helper */ + cmpl %eax, (%bx) + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + jne Error_or_prev_MBR /* Missing helper */ + +#else + + je 1f + + /* try to load helper from floppy */ + + pushal + + movw 0x18, %ax /* BPB sectors per track at offset 0x18 */ + + cmpw $0x3F, %ax + ja 3f + + cmpb $((pre_stage2_start - _start1) >> 9), %al + jb 3f + + decw %ax /* skip the first sector already loaded */ + + movw $3, %di /* retry 3 times on read failure */ +2: + movb $2, %ah /* BIOS disk read */ + cwd /* DX=0 for floppy head 0 */ + movw $0x200, %bx /* ES:BX immediately follow this sector */ + movw $2, %cx /* skip the first sector already loaded */ + + pushaw + int $0x13 + popaw + + jnc 3f + + pushaw + xorw %ax, %ax + int $0x13 + popaw + + decw %di + jnz 2b +3: + popal + cmpl %eax, (%bx) /* helper loaded? */ + + jne Error_or_prev_MBR /* Missing helper */ + +1: +#endif + + popfw /* CF=1 on error */ + jc try_floppy /* harddisk (hd0) failed, try floppy (fd0) */ +1: + pushw %cs + popw %ds + lodsw + movb %ah, %dh /* head number */ + lodsw + movw %ax, %cx /* sector and cylinder number */ + andb $63, %al + //stc + jz helper_call_c + + /* use BP to calculate the sectors to read within 1 track */ + subw %bp, %ax + decw %ax /* decb %al */ + negb %al /* AL=sectors upto the end of the track */ +7: + movw $3, %di /* retry 3 times on read failure */ +2: + movb $2, %ah + pushw $FS_BOOT + popw %es /* ES=FS_BOOT */ + xorw %bx, %bx + + pushaw + int $0x13 /* read partition boot track to FS_BOOT:0000 */ + popaw + + jnc helper_call + + pushaw + xorw %ax, %ax + int $0x13 + popaw + + decw %di + jnz 2b + +helper_call_c: + + stc + +helper_call: + /* find GRLDR in this partition + * before the call: + * CF=1 : indicates an invalid or corrupt entry + * CF=0 : indicates a valid entry + * + * on return: + * CF=1 : means "below", try next entry + * CF=0,ZF=1 : means "equal", helper did nothing, so we need + * a further try to boot via NT bootsector + * CF=0,ZF=0 : means "above", helper succeeded, boot it now + */ + call helper_start /* change to jmp 6f if helper not present */ + ja filesystem_boot /* helper succeeded, directly boot it */ +6: + +add_sub_si: + + /* extended partition check routine will adjust this to + * + * 0x83, 0xEE, 0x04 for "subw $4, %si" + * + * or + * + * 0x83, 0xC6, 0xFC for "addw $-4, %si" + * + * so that SI keeps the value 0x1fe. + */ + addw $12, %si /* 0x83, 0xC6, 0x0C */ + + . = add_sub_si + 3 + + /* extended partition check routine will adjust the word 0x1fe at + * (add_sub_si + 5). The value 0x1ff or greater indicates there are + * entries need to be treated. The value 0x1fe indicates no entries + * left, and the floppy should be checked. + */ + + cmpw $0x01fe, %si /* 0x81, 0xFE, 0xfe, 0x01 */ + /* All entries checked done? */ + jb 1b /* No, check the next entry */ + ja 5f /* floppy already checked. Fail and hang */ + +try_floppy: + + movw $0x31b2, %si /* a value big enough */ + movb $0x08, %ah /* read drive parameters changes DX,ES,DI */ + cwd /* DL=0 for floppy */ + pushw %dx /* DX=0 */ + int $0x13 + popw %ax /* AX=0 */ + jc 5f /* floppy failure, issue "Error" and hang */ + cwd /* DX=0 */ + xchgw %ax, %cx /* this moves CL to AL, and CX=0 */ + andb $63, %al /* AL=sectors per track */ + jz 5f /* invalid value. floppy failure. hangs */ + //movw $1, %cx + incw %cx + jmp 7b + +5: +Error_or_prev_MBR: + + /* GRLDR not found, print "Error" or launch previous MBR */ + movw $(message_string - _start1), %si +Error2: + call print_message /* CS:SI points to message string */ +3: jmp 3b + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) +filesystem_boot: + /* The partition boot record successfully modified, just boot it */ + + /* + * The boot might fail, but we want to take back the control. + * So we save the registers now. + */ + pushw %ds + pushw %es + pushal + + /* DS=CS=GRLDR_CS, ES=FS_BOOT */ + + /* save GRLDR_CS */ + + movw %es, %bx # save old ES to BX + + cli + lgdt gdt - _start1 + movl %cr0, %eax + orb $1, %al + movl %eax, %cr0 + + movw $8, %si + movw %si, %es + + xorl %esi, %esi + xorl %edi, %edi + movl $(0x9000 / 4), %ecx + + cld + repz movsl + + movw $16, %si + movw %si, %es + + andb $0xfe, %al + movl %eax, %cr0 + + movw %bx, %es # restore ES from BX + + /* move FS_BOOT:0000 to 0:7c00 */ +#if 0 + /* for single sector boot record */ + movw $0x0200, %cx /* move 2 sectors, the old FS_BOOT:0000 will + * keep untouched. */ +#else + /* for 4-sector NTFS boot record */ + movw $0x0400, %cx /* move 4 sectors, the old FS_BOOT:0000 will + * keep untouched. */ +#endif + xorw %si, %si + pushw %si /* SI=0, for the segment of 0000:7c00 */ + movw $0x7c00, %di + pushw %di /* DI=0x7c00, for the offset of 0000:7c00 */ + pushw %es /* ES=FS_BOOT */ + popw %ds /* DS=FS_BOOT */ + pushw %si /* SI=0 */ + popw %es /* ES=0 */ + cld + repz movsw + + movw $MONITOR, %di + movw $(restore_GRLDR_CS - _start1), %si + movw $((gdt_end - restore_GRLDR_CS) / 4), %cx + cld + repz cs movsl /* CS segment override prefix(=0x2E) */ + + pushw %es /* ES=0 */ + popw %ds /* DS=0 */ + sti + lret //ljmp $0, $0x7c00 +#endif + +try_next_partition: + + cli + movw $GRLDR_CS, %ax + movw %ax, %ss + movw $(0x9000-36), %sp + sti + + /* restore the registers and continue */ + popal + popw %es + popw %ds + jmp add_sub_si + + /* prints string CS:SI (modifies AX BX SI) */ +3: + //xorw %bx, %bx /* video page 0 */ + movb $0x0e, %ah /* print char in AL */ + int $0x10 /* via TTY mode */ + +print_message: + + lodsb %cs:(%si), %al /* get token */ + cmpb $0, %al /* end of string? */ + jne 3b + ret + +message_string: + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + .ascii "\r\nMissing helper.\0" +#else + .ascii "\r\nMissing MBR-helper.\0" +#endif + +#;buggy_bios_string: +#; +#; .ascii "\r\nBuggy BIOS!\0" + + /* Make sure the above code does not occupy the partition table */ + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + /* offset value here must be less than or equal to 0x1be */ + . = . - ((. - _start1) / 0x1bf) +#else + /* offset value here must be less than or equal to 0x1b8 */ + . = . - ((. - _start1) / 0x1b9) +#endif + + /* The following code may occupy the same area as the partition table */ + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + /* we are not booted from MBR. So we can reuse the area of partition + * table for our code. + */ + + . = _start1 + 0x1be + +cdrom_check: + + /* DS points to the sector start, but CS does not. */ + + /* BX segment points to near the end of GRLDR image. */ + + popw %ax /* old return IP */ + + /* set BX as the new safe stack. */ + movw %bx, %ss + movw $0xFFF0, %sp + + pushw %ax /* old return IP */ + + /* check if DL is no-emulation-mode bootable CDROM. */ + pushw %ds + + cmpb $0x80, %dl + jb 1f /* not a valid no-emulation-mode cdrom drive number */ + + cmpw $0xAA55, 0x7FE /* 2048 bytes loaded? */ + jne 1f + +// cmpw $0xAA55, 0x5FE /* 2048 bytes loaded? */ +// jne 1f + + movw $0x0180, %si + movw $0x4B01, %ax + pushw $0x0040 + //.byte 0x6A, 0x40 + popw %ds + pushw %ds + popw %es + movb $0x13, (%si) + int $0x13 + + /* ignore CF */ +#; jc 2f /* not in emulation mode */ + xorl %eax, %eax + xorw %bp, %bp + testb $0x0F, 1(%si) /* boot media type is No Emulation? */ + jnz 2f /* no, it simulates floppy or hard disk. */ + cmpb %dl, 2(%si) /* drive number */ + jnz 2f /* invalid drive */ + + /* OK! it is no-emulation-mode cdrom drive. */ + movl 4(%si), %eax /* LBA of GRLDR */ + incw %bp + +2: + jmp cdrom_helper +1: + popw %ds + ret + + +#endif /* ! defined(GRLDR_MBR) && (! defined(GRLDR_INSTALL)) */ + + . = _start1 + 0x1fe /* boot signature */ + +/* partition entries in the extended partitions will overwrite code here upto + * 0x3fd. + * + * the extended partition entries will occupy a temp area at 0x9be00-0x9c3ff + */ + +#if (defined(GRLDR_MBR)) || (defined(GRLDR_INSTALL)) + .word 0xaa55 +#endif + + . = _start1 + 0x200 + +/* if it is in the Master Boot Track, the second sector can be used to backup + * the previously working MBR, typically, the MS MBR. if the backup copy of + * the MBR cannot boot(because, e.g., it depends on another sector of code + * that does not exist for now), then please do not set the ending signature + * to 0xAA55, that is to say, if the signature is already 0xAA55, you should + * change it to another value(for example, 0x0000). + */ + +#if (! defined(GRLDR_INSTALL)) +#if 0 +print_cl: + pushaw + + movw %cx, %ax + movb $16, %cl + divb %cl # quo=AL, rem=AH + orw $0x3030, %ax + + cmpb $0x39, %ah + jbe 1f + addb $7, %ah +1: + cmpb $0x39, %al + jbe 1f + addb $7, %al +1: + movb %ah, %cl + + xorw %bx, %bx + + movb $0x0e, %ah + int $0x10 + + movb $0x0e, %ah + movb %cl, %al + int $0x10 + + movw $0x0e20, %ax + int $0x10 + + popaw + ret +#else +#if 0 + .word 5, 0x47, 0x52, 0x4c, 0x44, 0x52, 4, 0x24 + .word 0x49, 0x33, 0x30, 0xe000, 0, 0x3000, 0, 0 +#else + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 +#endif + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 +#endif + . = _start1 + 0x256 /* cmdcons comes here */ + +#if 0 + jmp 1f +#else + .byte 0x90, 0x90 +#endif + + . = _start1 + 0x258 + + .byte 0x90, 0x90 + + . = _start1 + 0x25a + + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + .byte 0x90, 0x90 + + . = _start1 + 0x26a +1: + //movw %cs, %ax + //movw %ax, %ds + //jmp single_boot_sector + + /* a value < 0x80 here means we are not booted from no-emulation-mode + * bootable CD. + */ + movb $0x7F, %dl + jmp _start1 + +#endif /* (! defined(GRLDR_INSTALL)) */ + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) +cdrom_helper: + + /* IP and old_DS is on the stack. */ + + /* DS=ES=40h */ + + /* Stack is high and safe. */ + + /* EAX is LBA. if EAX==0, LBA is unknown. */ + + /* check if the first sector is the same as the current one */ + + /* load the first sector onto the sector immediately follows */ +1: + popw %bx /* BX = old_DS = load_segment */ + pushw %bx + movw %bx, %es + addw $0x0080, %bx /* buffer segment */ + call load_cd_sector + + /* compare the two sectors */ + movw $0x200, %cx + movw %bx, %ds + xorw %si, %si + xorw %di, %di + cld + repz cmpsl + je load_the_rest /* 1st sector is ok, continue */ +not_grldr: + testw %bp, %bp + jz 2f + xorw %bp, %bp + xorl %eax, %eax +2: + incl %eax + jnz 1b /* try next */ + +cd_no_grldr: + + popw %ds /* DS=load_segment */ + + # Here we use error message and routine in FAT32 boot sector + # which is also inside the 2048-byte CD sector. + + movw $(msg_BootError_32 - _start1), %si + jmp boot_error_32 + +load_cd_sector: + /* input: EAX LBA + * BX buffer segment(buffer offset=0) + * DS 0x40 (or another safe one) + */ + + movw $0x1A0, %si + + /* disk address packet */ + movl $0x00010010, (%si) /* load 1 sector each time. */ + movw $0, 4(%si) /* buffer offset=0 */ + movw %bx, 6(%si) /* buffer segment */ + movl %eax, 8(%si) /* LBA lo 32 bits */ + movl $0, 12(%si) /* LBA hi 32 bits */ + + pushal + movb $0x42, %ah + int $0x13 + popal + ret + +load_the_rest: + + /* load all sectors (except the first one) */ + + /* EAX = first sector(LBA) of GRLDR */ + + popw %bx /* BX = old_DS = load_segment */ + pushw %bx + movw %bx, %es + /* 6144 = 0x1800 = 3 sectors > 4KB, this is for the additional 4KB-preset-menu at the end of grldr */ + movw $((grldr_signature - _start1 + 4 + STAGE2_SIZE - 1 + 6144) / 2048), %cx /* sectors to load */ +1: + incl %eax /* next sector */ + addw $0x0080, %bx /* buffer segment */ + + call load_cd_sector + + loop 1b + + /* loading is completed. BX=segment of the last sector. */ + + subw $0x0181, %bx /* decw %bx */ + movw %bx, %ds + + /* check the ending signature */ + cmpl $0xCE1A02B0, ((grldr_signature - _start1 + 4 + STAGE2_SIZE - 1) % 2048) + 13 + jne not_grldr +#; je grldr_real_start /* yes. boot it! */ + +#; /* it is not our grldr image, return and use MBR-helper. */ +#; +#;4: +#; //jmp grldr_real_start +#; popw %ds +#; ret + +grldr_real_start: + + #; FAT_12_16 no longer be used. So comment out. + #;je 1f /* jc 1f */ + #;//ZF=0 /* CF cleared, so we are coming from FAT_12_16 */ + #;popw %dx /* discard the cluster number */ + #;popw %dx /* this is our boot_drive/boot_partition */ + #;1: + + #; The partition number for no-emulation-mode bootable CDROM will be + #; set to 0xFF later(in common.c). So comment out. + #;cli + #;movw %cs, %ax + #;cmpw $0x1000, %ax + #;jne 1f + #; + #;/* CS=0x1000, may be booted from ext2 or no-emulation-mode CDROM */ + #; + #;cmpw $0x1000, %di + #;jne 2f + #;cmpw $0x7c00, %bp + #;jne 2f + #;movw %es, %ax + #;cmpw $0x1000, %ax + #;jbe 2f + #;cmpw $0x7c00, %si + #;jbe 2f + #;movl %edx, %eax + #;shrl $16, %eax + #;jnz 2f + #;jecxz 1f // booted from ext2 partition + #;2: + #;// booted from no-emulation-mode bootable CDROM + #;movb $0xff, %dh // partition 0xff means whole drive(for CDROM) + #; #; if needed, 0xfe can be used as an indicator + #; #; here for the bootable CDROM and changed to + #; #; 0xff later. + #;1: + #; + #;//if not booted from CDROM, don't touch the boot partition number(dh) + + cli + xorw %ax, %ax + movw %ax, %ss + movw $0x0400, %sp /* tmp use real-mode IDT as stack */ + movw %cs, %bp /* save CS to BP */ + call 1f +1: + popw %bx /* BX=Instruction Pointer of 1b */ + subw $(1b - _start1), %bx + movw %bx, %cx + shrw $4, %bx + addw %bp, %bx + pushw %bx /* new CS */ + andw $0x000f, %cx + addw $(1f - _start1), %cx + pushw %cx /* new IP */ + lret +1: + pushw %cs + popw %ds + + /* CS=DS=BX, CS:0000 = _start1 */ + + addw $((pre_stage2_start - _start1) >> 4), %bx + + /* BX:0000 = pre_stage2_start */ + + cmpw $0x820, %bx + jb 2f + + movw $((0x8200 - (pre_stage2_start - _start1) - 0x400) >> 4), %cx + + /* Now CS(=DS) >= CX+0x40 */ + + movw %cx, %es + xorw %di, %di + xorw %si, %si + + ///////////////////////////////////////////////////////////// + // + // CS + // DS 0x820 BX + // _start1---------------pre_stage2_start + // CX+0x40---------------0x820 + // CX + // ES + // + ///////////////////////////////////////////////////////////// + + movw $0x200, %cx /* move 2 sectors */ + cld + repz movsw + + pushw %es /* ES:0000 = _start */ + pushw $(1f - _start) + lret /* CS=ES, CS:0000 = _start1 */ +1: + + /* move BX:0000 to 0820:0000 upward since BX >= 0x820 */ + + cld + + movw %bx, %ds + movw $0x820, %bx + movw %bx, %es + + xorw %si, %si + xorw %di, %di + + movw $6, %bx /* 64K pages: 0x20000 - 0x7ffff */ +1: + movw $0x8000, %cx + repz movsw + movw %ds, %ax + addw $0x1000, %ax + movw %ax, %ds + movw %es, %ax + addw $0x1000, %ax + movw %ax, %es + decw %bx + jnz 1b + + jmp 3f +2: + + /* move BX:0000 to 0820:0000 downward since BX < 0x820 */ + + std + + addw $0x7000, %bx + movw %bx, %ds + movw $0x7820, %bx + movw %bx, %es + + movw $0xfffe, %si + movw %si, %di + + movw $8, %bx /* 64K pages: 0x08200 - 0x881ff */ +1: + movw $0x8000, %cx + repz movsw + movw %ds, %ax + subw $0x1000, %ax + movw %ax, %ds + movw %es, %ax + subw $0x1000, %ax + movw %ax, %es + decw %bx + jnz 1b + + cld + +3: + + /* put the config file name */ + xorw %ax, %ax + movw %ax, %es + movw %ax, %ds + + xorl %ebp, %ebp + + movb %dh, 0x820A /* this is the boot partition number */ + + #; clear saved_entryno so that force_cdrom_as_boot_device be cleared + #; later in common.c + + movl %ebp, 0x820C /* EBP=0, clear saved_entryno */ + + movw $0x0010, %cx /* set max length of grub version string */ + movw $0x8212, %di /* version string */ + cld + /* AL is already 0. Locate the end of version string */ + repnz scasb /* find the location of the default config file name */ + + jcxz 1f /* failed, will not use the default config file name */ + + movw $0x4e, %cx /* max length of config file name */ + + movw %cs, %si /* CS:0000 = _start1 */ + shlw $4, %si /* 0000:SI = _start1 */ + + addw $(default_config_file - _start1), %si + + //movw $(default_config_file + 0x8200 - pre_stage2_start), %si + cld + repz movsb /* move file name to the config-file field of stage2 */ +1: + + movw $0x0003, %ax /* set display mode: 80*25 color text */ + int $0x10 + + xorw %bx, %bx + movw $(launch_pre_stage2 - _start1), %si + call print_message /* CS:SI points to message string */ + + xorw %ax, %ax + movw %ax, %ss + movw $0x2000, %sp + + sti + + ljmp $0, $0x8200 + +launch_pre_stage2: + .ascii "\r\n\r\nBooting GRLDR...\r\n" + + .byte 0 /* mark the end of ascii zero string */ + +default_config_file: +//#ifndef PRESET_MENU_STRING + .ascii "/menu.lst" +//#else +// .ascii "[default menu is disabled]" +//#endif + + .byte 0 /* mark the end of ascii zero string */ +#endif /* ! defined(GRLDR_MBR) && (! defined(GRLDR_INSTALL)) */ + + . = _start1 + 0x400 + +#define ALTERNATIVE_KERNEL + + +/* + * The following is based on FreeDOS, modified heavily by Tinybit in Feb, 2004 + * + * Merges LBA and CHS boot sectors to ONE FAT32 boot sector! + * + * Memory layout for GRLDR FAT32 single stage boot process: + * + * ... + * |-------| 1FE0:7E00 + * |BOOTSEC| (GRUB does not use this relocation area) + * |RELOC. | (overwritten by kernel loaded) + * |-------| 1FE0:7C00 + * ... + * |-------| + * |KERNEL | (overwrites bootsec reloc.) + * |LOADED | (holds 1 sector directory buffer before kernel load) + * |-------| 2000:0000 + * ... + * |-------| 0000:7E00 + * |BOOTSEC| GRUB always run inside this sector, + * |ORIGIN | no relocation. + * |-------| 0000:7C00 + * ... + * |-------| 0060:0200 + * | FAT | (only 1 sector buffered) + * |-------| 0060:0000 + * ... + * + */ + +/* +; This is an LBA-enabled FreeDOS FAT32 boot sector (single sector!). +; You can use and copy source code and binaries under the terms of the +; GNU Public License (GPL), version 2 or newer. See www.gnu.org for more. + +; Based on earlier work by FreeDOS kernel hackers, modified heavily by +; Eric Auer and Jon Gentle in 7 / 2003. +; +; Features: Uses LBA and calculates all variables from BPB/EBPB data, +; thus making partition move / resize / image-restore easier. FreeDOS +; can boot from FAT32 partitions which start > 8 GB boundary with this +; boot sector. Disk geometry knowledge is not needed for booting. +; +; Windows uses 2-3 sectors for booting (sector stage, statistics sector, +; filesystem stage). Only using 1 sector for FreeDOS makes multi-booting +; of FreeDOS and Windows on the same filesystem easier. +; +; Requirements: LBA BIOS and 386 or better CPU. Use the older CHS-only +; boot sector if you want FAT32 on really old PCs (problems: you cannot +; boot from > 8 GB boundary, cannot move / resize / ... without applying +; SYS again if you use the CHS-only FAT32 boot sector). +; +; FAT12 / FAT16 hints: Use the older CHS-only boot sector unless you +; have to boot from > 8 GB. The LBA-and-CHS FAT12 / FAT16 boot sector +; needs applying SYS again after move / resize / ... a variant of that +; boot sector without CHS support but with better move / resize / ... +; support would be good for use on LBA harddisks. + + +; Memory layout for the FreeDOS FAT32 single stage boot process: + +; ... +; |-------| 1FE0:7E00 +; |BOOTSEC| +; |RELOC. | +; |-------| 1FE0:7C00 +; ... +; |-------| 2000:0200 +; | FAT | (only 1 sector buffered) +; |-------| 2000:0000 +; ... +; |-------| 0000:7E00 +; |BOOTSEC| overwritten by the kernel, so the +; |ORIGIN | bootsector relocates itself up... +; |-------| 0000:7C00 +; ... +; |-------| +; |KERNEL | maximum size 134k (overwrites bootsec origin) +; |LOADED | (holds 1 sector directory buffer before kernel load) +; |-------| 0060:0000 +; ... +*/ + +#define BOOTGRUB /* undef this if compiled for loading FreeDOS */ +//#undef BOOTGRUB + +#ifdef BOOTGRUB +#define LOADSEG 0x2000 +#define FATSEG 0x0060 +#else +#define LOADSEG 0x0060 +#define FATSEG 0x2000 +#endif + +Entry_32: + jmp 1f + + . = Entry_32 + 0x02 + + /* The default mode is CHS. This is for maximum compatiblity with + * small-sized disks, e.g., floppies. + * + * Valid values are 0x90 for CHS mode, or 0x0e for LBA mode. + * + * If the BIOS int13 supports LBA, this byte can be safely set to 0x0e. + * + * Some USB BIOSes might have bugs when using CHS mode, so the format + * program should set this byte to 0x0e. It seems that (generally) all + * USB BIOSes have LBA support. + * + * If the format program does not know whether the BIOS has LBA + * support, it may operate this way: + * + * if (partition_start + total_sectors_in_partition) exceeds the CHS + * addressing ability(especially when it is greater than 1024*256*63), + * the caller should set this byte to 0x0e, otherwise, set to 0x90. + */ + + .byte 0x90 /* for CHS. Another possible value is 0x0e for LBA */ + + + . = Entry_32 + 0x03 + +#ifdef BOOTGRUB + .ascii "GRLDR " /* OEM name string (of OS which formatted the disk). */ +#endif + + . = Entry_32 + 0x0b + + .word 0x200 /* bytes per sector. Must be 512 */ + + . = Entry_32 + 0x0d + + /* Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64 and 128. + * But a cluster size larger than 32K should not occur. + */ + + .byte 1 /* sectors per cluster */ + + . = Entry_32 + 0x0e + + /* Reserved sectors(number of sectors before the first FAT, + * including the boot sector), usually 1. + */ + + .word 1 /* reserved sectors */ + + . = Entry_32 + 0x10 + + /* Number of FATs(nearly always 2). */ + + .byte 2 /* number of FATs */ + + . = Entry_32 + 0x11 + + /* (Maximum number of root directory entries)Must be 0. */ + + .word 0 /* Max dir entries for FAT12/FAT16 */ + + . = Entry_32 + 0x13 + + /* (Total number of sectors for small disks only)Must be 0. */ + + .word 0 /* total sectors for FAT12/FAT16 */ + + . = Entry_32 + 0x15 + + /* Media descriptor byte, pretty meaningless now. */ + + .byte 0xf8 /* media descriptor */ + + . = Entry_32 + 0x16 + + /* (Sectors per FAT)Must be 0. */ + + .word 0 /* sectors per FAT for FAT12/FAT16 */ + + . = Entry_32 + 0x18 + + .word 18 /* sectors per track */ + + . = Entry_32 + 0x1a + + .word 2 /* number of heads */ + + . = Entry_32 + 0x1c + + /* Number of hidden sectors (those preceding the boot sector). + * Also referred to as the starting sector of the partition. + * For floppies, it should be 0. + */ + + .long 0 /* hidden sectors */ + + . = Entry_32 + 0x20 + + /* Total number of sectors in the filesystem. */ + + .long 0 /* total sectors for FAT32 */ + + . = Entry_32 + 0x24 + + /* FAT32 sectors per FAT. */ + + .long 0 + + . = Entry_32 + 0x28 + + /* If bit 7 is clear then all FATs are updated, otherwise bits 0-3 + * give the current active FAT, all other bits are reserved. + * This word is not used by grldr boot code. + */ + + .word 0 + + . = Entry_32 + 0x2a + + /* High byte is major revision number, low byte is minor revision + * number, currently both are 0. + * This word is not used by grldr boot code. + */ + + .word 0 + + . = Entry_32 + 0x2c + + /* Root directory starting cluster. */ + + .long 0 + + . = Entry_32 + 0x30 + + /* File system information sector number. + * This word is not used by grldr boot code. + */ + + .word 0 + + . = Entry_32 + 0x32 + + /* If non-zero this gives the sector which holds a copy of the + * boot record, usually 6. + * This word is not used by grldr boot code. + */ + + .word 6 + + . = Entry_32 + 0x34 + + /* Reserved, 12 bytes, set to 0. */ + + .long 0 + .long 0 + .long 0 + + . = Entry_32 + 0x40 + + /* drive number of the boot device. + * This byte is ignored for read. The program will write DL onto + * this byte. The caller should set drive number in DL. + * We assume all BIOSes pass correct drive number in DL. + * That is to say, buggy BIOSes are not supported!! + */ + + .byte 0 + + . = Entry_32 + 0x41 + + /* partition number of this filesystem in the boot drive. + * This byte is ignored for read. The boot code will write partition + * number onto this byte. See Entry + 0x5d below. + */ + + .byte 0 + + . = Entry_32 + 0x42 + + /* Signature (must be 28h or 29h to be recognised by NT). */ + + .byte 0x29 /* extended boot signature for FAT12/FAT16 */ + + . = Entry_32 + 0x43 + + .long 0x0AC4AF63 /* volume serial number */ + + . = Entry_32 + 0x47 + + .ascii "NO NAME " /* volume label, 11 bytes. */ + + . = Entry_32 + 0x52 + + .ascii "FAT32 " /* filesystem ID, 8 bytes. */ + +/* +; bp is initialized to 7c00h +; %define bsOemName bp+0x03 ; OEM label (8) +%define bsBytesPerSec bp+0x0b ; bytes/sector (dw) +%define bsSecPerClust bp+0x0d ; sectors/allocation unit (db) +%define bsResSectors bp+0x0e ; # reserved sectors (dw) +%define bsFATs bp+0x10 ; # of fats (db) +; %define bsRootDirEnts bp+0x11 ; # of root dir entries (dw, 0 for FAT32) + ; (FAT32 has root dir in a cluster chain) +; %define bsSectors bp+0x13 ; # sectors total in image (dw, 0 for FAT32) + ; (if 0 use nSectorHuge even if FAT16) +; %define bsMedia bp+0x15 ; media descriptor: fd=2side9sec, etc... (db) +; %define sectPerFat bp+0x16 ; # sectors in a fat (dw, 0 for FAT32) + ; (FAT32 always uses xsectPerFat) +%define sectPerTrack bp+0x18 ; # sectors/track +; %define nHeads bp+0x1a ; # heads (dw) +%define nHidden bp+0x1c ; # hidden sectors (dd) +; %define nSectorHuge bp+0x20 ; # sectors if > 65536 (dd) +%define xsectPerFat bp+0x24 ; Sectors/Fat (dd) + ; +0x28 dw flags (for fat mirroring) + ; +0x2a dw filesystem version (usually 0) +%define xrootClst bp+0x2c ; Starting cluster of root directory (dd) + ; +0x30 dw -1 or sector number of fs.-info sector + ; +0x32 dw -1 or sector number of boot sector backup + ; (+0x34 .. +0x3f reserved) +%define drive bp+0x40 ; Drive number + bp+0x41 ; partition number for GRLDR + +%define fat_sector bp+0x44 ; last accessed FAT sector (dd) + ; (overwriting unused bytes) +%define fat_start bp+0x48 ; first FAT sector (dd) + ; (overwriting unused bytes) +%define data_start bp+0x4c ; first data sector (dd) + ; (overwriting unused bytes) + +*/ + /* not used: [0x42] = byte 0x29 (ext boot param flag) + * [0x43] = dword serial + * [0x47] = label (padded with 00, 11 bytes) + * [0x52] = "FAT32",32,32,32 (not used by Windows) + * ([0x5a] is where FreeDOS parts start) + */ + + . = Entry_32 + 0x5a +1: + cli + cld + +#ifdef BOOTGRUB + + . = Entry_32 + 0x5c + + /* the byte at offset 0x5d stores the real partition number for read. + * the format program or the caller should set it to a correct value. + * For floppies, it should be 0xff, which stands for whole drive. + */ + + movb $0xff, %dh /* boot partition number */ + + cmpb $0xff, %dh /* is floppy? */ + jne 1f + movb $0, %dl /* yes, let drive number = 0 */ +1: +#endif + + xorw %ax, %ax + movw %ax, %ds + movw $0x7c00, %bp + +#ifdef BOOTGRUB + movw %ax, %es +#else + movw $0x1fe0, %ax + movw %ax, %es + movw %bp, %si /* move from 0000:7c00 */ + movw %bp, %di /* move to 1fe0:7c00 */ + movw $0x0100, %cx /* one sector to move */ + repz movsw + ljmp $0x1fe0, $(1f - Entry_32 + 0x7c00) +1: + movw %ax, %ds +#endif + movw %ax, %ss /* stack and BP-relative moves up, too */ + leaw -0x20(%bp), %sp + sti + movw %dx, 0x40(%bp) /* BIOS passes drive number in DL */ + + movb $0x41, %ah + movw $0x55AA, %bx + int $0x13 + jc 1f /* No EBIOS */ + cmpw $0xAA55, %bx + jne 1f /* No EBIOS */ + testb $1, %cl + jz 1f /* No EBIOS */ + /* EBIOS supported */ + movb $0x42, (ebios_32 - 1 - Entry_32 + 0x7c00) +1: + +/* figure out where FAT and DATA area starts + * (modifies EAX EDX, sets fat_start and data_start variables) + */ + xorl %eax, %eax + movl %eax, 0x44(%bp) /* init buffer status */ + + /* first, find fat_start */ + movw 0x0e(%bp), %ax /* reserved sectors */ + addl 0x1c(%bp), %eax /* hidden sectors */ + movl %eax, 0x48(%bp) /* first FAT sector */ + movl %eax, 0x4c(%bp) /* first data sector, initial value */ + + /* next, find data_start */ + movl 0x10(%bp), %eax /* number of fats, no movzbl needed: the + 2 words after 0x10(%bp) are 0 for fat32 */ + mull 0x24(%bp) /* sectors per fat (EDX=0) */ + addl %eax, 0x4c(%bp) /* first DATA sector */ + +/* Searches for the file in the root directory. + * Returns: EAX = first cluster of file + */ + + movl 0x2c(%bp), %eax /* root dir cluster */ + +1: + pushl %eax /* save cluster */ + call cluster_to_lba_32 + /* EDX is sectors per cluster, EAX is sector number */ + movw $(msg_BootError_32 - Entry_32 + 0x7c00), %si + jc boot_error_32 /* EOC encountered */ + +2: + lesw (loadseg_off_32 - Entry_32)(%bp), %bx /* load to loadseg:0 */ + call readDisk_32 + + xorw %di, %di + + /* Search for kernel file name, and find start cluster */ +3: + movw $11, %cx + movw $(filename_32 - Entry_32 + 0x7c00), %si + repz cmpsb + jz 1f /* note that di now is at dirent+11 */ + + addw $0x20, %di + andw $-0x20, %di /* 0xffe0 */ + cmp 0x0b(%bp), %di /* bytes per sector */ + jnz 3b /* next directory entry */ + + decw %dx /* initially DX holds sectors per cluster */ + jnz 2b /* loop over sectors in cluster */ + + popl %eax /* restore current cluster */ + call next_cluster_32 + jmp 1b /* read next cluster */ + +#ifndef ALTERNATIVE_KERNEL +loadseg_off_32: + .word 0 + .word LOADSEG +#endif + +1: + /* kernel directory entry is found */ + pushw %es:(0x14-11)(%di) /* get cluster number HI */ + pushw %es:(0x1a-11)(%di) /* get cluster number LO */ + popl %eax /* convert to 32bit */ + + xorw %bx, %bx /* read kernel at ES:BX=LOADSEG:0 */ + +/* read kernel */ + +2: + pushl %eax + call cluster_to_lba_32 + /* EDX is sectors per cluster, EAX is sector number */ + jnc 1f + + /* EOC encountered - done */ +#ifdef BOOTGRUB + movw 0x40(%bp), %dx /* boot_drive and boot_partition */ +#else + movb 0x40(%bp), %bl /* FreeDOS kernel uses BL, not DL, for drive */ +#endif + ljmp *(loadseg_off_32 - Entry_32)(%bp) + +1: + call readDisk_32 + decw %dx /* initially DX holds sectors per cluster */ + jnz 1b /* loop over sectors in cluster */ + + popl %eax + call next_cluster_32 + jmp 2b + +/* given a cluster number, find the number of the next cluster in + * the FAT chain. Needs fat_start. + * input: EAX - cluster + * EDX = 0 + * output: EAX - next cluster + * EDX = undefined + */ + +next_cluster_32: + pushw %es + /* pushw %di */ + pushw %bx /* hi word of EBX never used */ + +#if 1 + /* xorl %edx, %edx */ + shll $2, %eax /* 32bit FAT */ + movzwl 0x0b(%bp), %ebx /* bytes per sector */ + divl %ebx /* residue is in EDX */ + /* movw %dx, %di */ +#else + shll $2, %eax /* 32bit FAT */ + ;xchgw %ax, %di /* movw %ax, %di */ + movw %ax, %di + ;shlw $2, %di /* 32bit FAT */ + + pushw %cx + movw 0x0b(%bp), %bx /* bytes per sector */ + bsfw %bx, %cx + ;decw %cx + ;decw %cx + decw %bx + andw %bx, %di /* mask to sector size */ + shrl %cl, %eax + popw %cx +#endif + addl 0x48(%bp), %eax /* add the first FAT sector number. + EAX is absolute sector number now */ + movw $FATSEG, %bx + movw %bx, %es + xorw %bx, %bx + + cmpl 0x44(%bp), %eax /* is it the last accessed and already buffered + FAT sector? */ + jz 1f + movl %eax, 0x44(%bp) /* mark sector EAX as buffered */ + call readDisk_32 /* read sector EAX to buffer */ +1: +#if 1 + //.byte 0x67, 0x26, 0x80, 0x62, 0x03, 0x0f + addr32 andb $0x0f, %es:3(%edx) /* mask out top 4 bits */ + + //.byte 0x67, 0x66, 0x26, 0x8b, 0x02 + addr32 movl %es:(%edx), %eax /* read next cluster number */ +#else + andb $0x0f, %es:3(%di) /* mask out top 4 bits */ + movl %es:(%di), %eax /* read next cluster number */ +#endif + popw %bx + /* popw %di */ + popw %es + ret + +/* Convert cluster number to the absolute sector number + * ... or return carry if EndOfChain! Needs data_start. + * input: EAX - target cluster + * output: EAX - absolute sector + * EDX - [bsSectPerClust] (byte) + * carry clear + * (if carry set, EAX/EDX unchanged, end of chain) + */ + +cluster_to_lba_32: + cmpl $0x0ffffff8, %eax /* check End Of Chain */ + cmc + jb 1f /* carry is stored if EOC */ + + /* sector = (cluster-2) * clustersize + data_start */ + decl %eax + decl %eax + + movzbl 0x0d(%bp), %edx /* sectors per cluster */ + pushw %dx /* only DX would change */ + mull %edx /* EDX = 0 */ + popw %dx + addl 0x4c(%bp), %eax /* data_start */ + /* here, carry is cleared (unless parameters are wrong) */ +1: + ret + +/* Read a sector from disk, using LBA or CHS + * input: EAX - 32-bit DOS sector number + * ES:BX - destination buffer + * (will be filled with 1 sector of data) + * output: ES:BX points one byte after the last byte read. + * EAX - next sector + */ + +readDisk_32: + pushal + xorl %edx, %edx /* EDX:EAX = LBA */ + pushl %edx /* hi 32bit of sector number */ + pushl %eax /* lo 32bit of sector number */ + pushw %es /* buffer segment */ + pushw %bx /* buffer offset */ + pushw $1 /* 1 sector to read */ + pushw $16 /* size of this parameter block */ + + xorl %ecx, %ecx + pushl 0x18(%bp) /* lo:sectors per track, hi:number of heads */ + popw %cx /* ECX = sectors per track */ + divl %ecx /* residue is in EDX */ + /* quotient is in EAX */ + incw %dx /* sector number in DL */ + popw %cx /* ECX = number of heads */ + pushw %dx /* push sector number into stack */ + xorw %dx, %dx /* EDX:EAX = cylinder * TotalHeads + head */ + divl %ecx /* residue is in EDX, head number */ + /* quotient is in EAX, cylinder number */ + xchgb %dl, %dh /* head number should be in DH */ + /* DL = 0 */ + popw %cx /* pop sector number from stack */ + xchgb %al, %ch /* lo 8bit cylinder should be in CH */ + /* AL = 0 */ + shlb $6, %ah /* hi 2bit cylinder ... */ + orb %ah, %cl /* ... should be in CL */ + + movw $0x201, %ax /* read 1 sector */ +ebios_32: /* ebios_32 - 1 points to 0x02 that can be changed to 0x42 */ + +// cmpb $0x0e, 2(%bp) /* force LBA? */ +// jnz 1f /* no, continue */ +// movb $0x42, %ah /* yes, use extended disk read */ +//1: + movw %sp, %si /* DS:SI points to disk address packet */ + movb 0x40(%bp), %dl /* hard disk drive number */ + int $0x13 + popaw /* remove parameter block from stack */ + popal + jc disk_error_32 /* disk read error, jc 1f if caller handles */ + incl %eax /* next sector */ + addw 0x0b(%bp), %bx /* bytes per sector */ + jnc 1f /* 64K bound check */ + pushw %dx + movw %es, %dx + addb $0x10, %dh /* add 1000h to ES */ + /* here, carry is cleared */ + movw %dx, %es + popw %dx +1: + /* carry stored on disk read error */ + ret + + . = . - (. - readDisk_32)/91 + +msg_DiskReadError_32: + + .ascii "disk error\0" + +msg_BootError_32: + + .ascii "No " + +filename_32: + +#ifdef BOOTGRUB + .ascii "GRLDR \0" +#else + .ascii "KERNEL SYS\0" +#endif + +#ifdef ALTERNATIVE_KERNEL +filename_end_32: + + . = Entry_32 + 0x1e8 + +loadseg_off_32: + .word 0 + .word LOADSEG + + . = Entry_32 + 0x1ec + +boot_image_ofs_32: + + .word (filename_32 - Entry_32)+(filename_end_32 - filename_32 - 1)*2048 +#endif + + . = Entry_32 + 0x1ee + +disk_error_32: + + movw $(msg_DiskReadError_32 - Entry_32 + 0x7c00), %si + +boot_error_32: + +/* prints string DS:SI (modifies AX BX SI) */ + +//print_32: +1: + lodsb (%si), %al /* get token */ + //xorw %bx, %bx /* video page 0 */ + movb $0x0e, %ah /* print it */ + int $0x10 /* via TTY mode */ + cmpb $0, %al /* end of string? */ + jne 1b /* until done */ + + /* The caller will change this to + * ljmp $0x9400, $(try_next_partition - _start1) + */ + +1: jmp 1b + + . = Entry_32 + 0x1fc + + .word 0, 0xAA55 /* Win9x uses all 4 bytes as magic value here */ + + . = Entry_32 + 0x200 + + . = _start1 + 0x600 + + //.arch i8086, nojumps + .arch i186, nojumps +/* + * The following is based on FreeDOS, modified heavily by Tinybit in Feb, 2004 + * + * Merges FAT12 and FAT16 boot sectors to ONE FAT boot sector! + * + * Memory layout for GRLDR FAT single stage boot process: + * + * +--------+ + * | | + * |GRLDR | also used as max 128k FAT buffer + * |LOADED | before GRLDR loading starts + * |--------| 2000:0000 + * | | + * |--------| 0000:7E00 + * |BOOTSECT| + * |ORIGIN | + * |--------| 0000:7C00 + * | | + * |--------| 0000:3000 + * |CLUSTER | + * |LIST | + * |--------| 0000:2000 + * | | + * +--------+ + */ + +/* +; +; File: +; boot.asm +; Description: +; DOS-C boot +; +; Copyright (c) 1997; +; Svante Frey +; All Rights Reserved +; +; This file is part of DOS-C. +; +; DOS-C 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, or (at your option) any later version. +; +; DOS-C 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 DOS-C; see the file COPYING. If not, +; write to the Free Software Foundation, 675 Mass Ave, +; Cambridge, MA 02139, USA. +; +; +; +--------+ 1FE0:7E00 +; |BOOT SEC| +; |RELOCATE| +; |--------| 1FE0:7C00 +; | | +; |--------| 1FE0:3000 +; | CLUSTER| +; | LIST | +; |--------| 1FE0:2000 +; | | +; |--------| 0000:7E00 +; |BOOT SEC| overwritten by max 128k FAT buffer +; |ORIGIN | and later by max 134k loaded kernel +; |--------| 0000:7C00 +; | | +; |--------| +; |KERNEL | also used as max 128k FAT buffer +; |LOADED | before kernel loading starts +; |--------| 0060:0000 +; | | +; +--------+ +*/ + +#ifdef BOOTGRUB +#define LOADSEG_12_16 0x2000 +#define FATBUF 0x2000 /* offset of temp buffer for FAT chain */ +#else +#define LOADSEG_12_16 0x0060 +#define FATBUF 0x2000 /* offset of temp buffer for FAT chain */ +#endif + +Entry_12_16: + jmp 1f + + . = Entry_12_16 + 0x02 + + /* The default mode is CHS. This is for maximum compatiblity with + * small-sized disks, e.g., floppies. + * + * Valid values are 0x90 for CHS mode, or 0x0e for LBA mode. + * + * If the BIOS int13 supports LBA, this byte can be safely set to 0x0e. + * + * Some USB BIOSes might have bugs when using CHS mode, so the format + * program should set this byte to 0x0e. It seems that (generally) all + * USB BIOSes have LBA support. + * + * If the format program does not know whether the BIOS has LBA + * support, it may operate this way: + * + * if (partition_start + total_sectors_in_partition) exceeds the CHS + * addressing ability(especially when it is greater than 1024*256*63), + * the caller should set this byte to 0x0e, otherwise, set to 0x90. + */ + + .byte 0x90 /* for CHS. Another possible value is 0x0e for LBA */ + + + . = Entry_12_16 + 0x03 + +#ifdef BOOTGRUB + .ascii "GRLDR " +#endif + + . = Entry_12_16 + 0x0b + + .word 0x200 /* bytes per sector */ + + . = Entry_12_16 + 0x0d + + .byte 1 /* sectors per cluster */ + + . = Entry_12_16 + 0x0e + + .word 1 /* reserved sectors */ + + . = Entry_12_16 + 0x10 + + .byte 2 /* number of FATs */ + + . = Entry_12_16 + 0x11 + + .word 224 /* Max dir entries */ + + . = Entry_12_16 + 0x13 + + .word 2880 /* total sectors in the filesystem */ + + . = Entry_12_16 + 0x15 + + .byte 0xf0 /* media descriptor */ + + . = Entry_12_16 + 0x16 + + .word 9 /* sectors per FAT */ + + . = Entry_12_16 + 0x18 + + .word 18 /* sectors per track */ + + . = Entry_12_16 + 0x1a + + .word 2 /* number of heads */ + + . = Entry_12_16 + 0x1c + + .long 0 /* hidden sectors */ + + . = Entry_12_16 + 0x20 + + .long 0 /* total sectors for large partitions */ + + . = Entry_12_16 + 0x24 + + /* drive number of the boot device. + * This byte is ignored for read. The program will write DL onto + * this byte. The caller should set drive number in DL. + * We assume all BIOSes pass correct drive number in DL. + * That is to say, buggy BIOSes are not supported!! + */ + + .byte 0 + + . = Entry_12_16 + 0x25 + + /* partition number of this filesystem in the boot drive. + * This byte is ignored for read. The boot code will write partition + * number onto this byte. See Entry_12_16 + 0x41 below. + */ + + .byte 0 + + . = Entry_12_16 + 0x26 + + .byte 0x29 /* extended boot signature */ + + . = Entry_12_16 + 0x27 + + .long 0x0AC4AF63 /* volume serial number */ + + . = Entry_12_16 + 0x2b + + .ascii "NO NAME " /* volume label */ + + . = Entry_12_16 + 0x36 + + .ascii "FAT12 " /* filesystem ID */ + +/* +; bp is initialized to 7c00h +%define bsOemName bp+0x03 ; OEM label +%define bsBytesPerSec bp+0x0b ; bytes/sector +%define bsSecPerClust bp+0x0d ; sectors/allocation unit +%define bsResSectors bp+0x0e ; # reserved sectors +%define bsFATs bp+0x10 ; # of fats +%define bsRootDirEnts bp+0x11 ; # of root dir entries +%define bsSectors bp+0x13 ; # sectors total in image +%define bsMedia bp+0x15 ; media descrip: fd=2side9sec, etc... +%define sectPerFat bp+0x16 ; # sectors in a fat +%define sectPerTrack bp+0x18 ; # sectors/track +%define nHeads bp+0x1a ; # heads +%define nHidden bp+0x1c ; # hidden sectors +%define nSectorHuge bp+0x20 ; # sectors if > 65536 +%define drive bp+0x24 ; drive number + bp+0x25 ; partition number for GRLDR +%define extBoot bp+0x26 ; extended boot signature +%define volid bp+0x27 +%define vollabel bp+0x2b +%define filesys bp+0x36 + +%define RootDirSecs bp+0x26 ; # of sectors root dir uses + ; (overwriting unused bytes) +%define fat_start bp+0x28 ; first FAT sector + ; (overwriting unused bytes) +%define root_dir_start bp+0x2c ; first root directory sector + ; (overwriting unused bytes) +%define data_start bp+0x30 ; first data sector + ; (overwriting unused bytes) +%define data_clusters bp+0x34 ; # of clusters in data area + ; (overwriting unused bytes) + bp+0x36 ; bytes per FAT( > 0x1800 means FAT16) + ; (overwriting unused bytes) +*/ + /* not used: [0x26] = byte 0x29 (ext boot param flag) + * [0x27] = dword serial + * [0x2b] = label (padded with 00, 11 bytes) + * [0x36] = "FAT12" or "FAT16",32,32,32 (not used by Windows) + * ([0x3e] is where FreeDOS parts start) + */ + + . = Entry_12_16 + 0x3e +1: + cli + cld + +#ifdef BOOTGRUB + + . = Entry_12_16 + 0x40 + + /* the byte at offset 0x41 stores the real partition number for read. + * the format program or the caller should set it to a correct value. + * For floppies, it should be 0xff, which stands for whole drive. + */ + + movb $0xff, %dh /* boot partition number */ + + cmpb $0xff, %dh /* is floppy? */ + jne 1f + movb $0, %dl /* yes, let drive number = 0 */ +1: +#endif + + xorw %ax, %ax + movw %ax, %ds + movw $0x7c00, %bp + +#ifdef BOOTGRUB + movw %ax, %es + movw %ax, %ss /* stack and BP-relative moves up, too */ + leaw -0x20(%bp), %sp + sti + movw %dx, 0x24(%bp) /* BIOS passes drive number in DL */ + /* AX=0 */ +// xchgw %ax, %dx /* let DX = 0 */ +// xorw %cx, %cx /* CX = 0 */ +#else + movw %bp, %si /* move from 0000:7c00 */ + movw %bp, %di /* move to 1fe0:7c00 */ + movb %dl, 0x24(%si) /* BIOS passes drive number in DL */ +// xchgw %ax, %dx /* let DX = 0 */ + movw $0x1fe0, %ax + movw %ax, %es + movw $0x0100, %cx /* one sector to move */ + repz movsw + /* CX = 0 */ + ljmp $0x1fe0, $(1f - Entry_12_16 + 0x7c00) +1: + movw %ax, %ds + movw %ax, %ss /* stack and BP-relative moves up, too */ + leaw -0x20(%bp), %sp + sti + /* AX=0x1fe0 */ +#endif + + movb $0x41, %ah + movw $0x55AA, %bx + int $0x13 + jc 1f /* No EBIOS */ + cmpw $0xAA55, %bx + jne 1f /* No EBIOS */ + testb $1, %cl + jz 1f /* No EBIOS */ + /* EBIOS supported */ + movb $0x42, (ebios_12_16 - 1 - Entry_12_16 + 0x7c00) +1: +// xorw %cx, %cx + xorw %ax, %ax + + /* GET DRIVE PARMS: Calculate start of some disk areas */ + + movw 0x1c(%bp), %si /* number of hidden sectors(lo) */ + movw 0x1e(%bp), %di /* number of hidden sectors(hi) */ + addw 0x0e(%bp), %si /* number of reserved sectors */ + adcw %ax, %di /* DI:SI = first FAT sector */ + /* AX = 0 */ + + movw %si, 0x28(%bp) /* FAT start sector(lo) */ + movw %di, 0x2a(%bp) /* FAT start sector(hi) */ + + //xchgw %ax, %dx /* let AX = 0 */ + movb 0x10(%bp), %al /* number of FATs */ + /* cbw */ + mulw 0x16(%bp) /* sectors per FAT */ + /* DX:AX = total number of FAT sectors */ + /* DX = 0 since no too many FAT sectors */ + addw %ax, %si + adcw %dx, %di /* DI:SI = root directory start sector */ + movw %si, 0x2c(%bp) /* root directory starting sector(lo) */ + movw %di, 0x2e(%bp) /* root directory starting sector(hi) */ + + /* Calculate how many sectors the root directory occupies */ + + movw 0x0b(%bp), %bx /* bytes per sector */ + movb $5, %cl /* divide BX by 32 */ + shrw %cl, %bx /* BX = directory entries per sector */ + + movw 0x11(%bp), %ax /* max number of root dir entries */ + /* xorw %dx, %dx */ /* assuming DX = 0 */ + divw %bx /* AX = sectors per root directory */ + /* DX = 0 since normally no residue */ + + movw %ax, 0x26(%bp) /* number of sectors the root dir occupies */ + + addw %ax, %si /* DI:SI = first data sector */ + adcw %dx, %di /* assuming DX = 0 */ + + movw %si, 0x30(%bp) /* data starting sector(lo) */ + movw %di, 0x32(%bp) /* data starting sector(hi) */ +#ifdef USE_TOTAL_CLUSTERS + movw 0x13(%bp), %cx /* total sectors(small) */ + jcxz 1f + movw %cx, 0x20(%bp) /* total sectors(large)(lo) */ + movw %dx, 0x22(%bp) /* total sectors(large)(hi), assuming DX = 0 */ +1: + movw 0x20(%bp), %ax /* total sectors(large) */ + movw 0x22(%bp), %bx + addw 0x1c(%bp), %ax /* number of hidden sectors */ + adcw 0x1e(%bp), %bx + subw %si, %ax /* data starting sector */ + sbbw %di, %bx /* BX:AX = total sectors in the data area */ + movb 0x0d(%bp), %dl /* sectors per cluster(DH=0) */ + xchgw %bx, %dx /* DX:AX = total sectors in the data area */ + /* BX = sectors per cluster */ + divw %bx /* AX = total clusters in the data area */ + movw %ax, 0x34(%bp) /* total clusters in the data area */ +#else + movw $0xffff, 0x36(%bp) + movw 0x16(%bp), %ax /* sectors per FAT */ + mulw 0x0b(%bp) /* bytes per sector */ + jc 1f + movw %ax, 0x36(%bp) +1: +#endif + /* Searches for the file in the root directory + * + * Returns: + * AX = first cluster of file + */ + + /* First, read the whole root directory into the temporary buffer */ + + movw 0x2c(%bp), %ax /* root directory starting sector(lo) */ + movw 0x2e(%bp), %dx /* root directory starting sector(hi) */ + movw 0x26(%bp), %di /* number of sectors the root dir occupies */ + lesw (loadseg_off_12_16 - Entry_12_16)(%bp), %bx + /* ES:BX = loadseg:0 */ + call readDisk_12_16 + + lesw (loadseg_off_12_16 - Entry_12_16)(%bp), %di + /* ES:DI = loadseg:0 */ + + + /* Search for kernel file name, and find start cluster */ + +1: + movw $11, %cx + movw $(filename_12_16 - Entry_12_16 + 0x7c00), %si + pushw %di + repz cmpsb + popw %di + movw %es:0x1a(%di), %ax /* get cluster number from dir entry */ + jz 1f + + addw $0x20, %di /* go to next directory entry */ + cmpb %ch, %es:(%di) /* if the first byte of the name is 0, */ + /* there is no more files in the directory */ + /* assuming CH = 0 */ + jnz 1b + movw $(msg_BootError_12_16 - Entry_12_16 + 0x7c00), %si + jmp boot_error_12_16 /* fail if not found */ + +#ifndef ALTERNATIVE_KERNEL +loadseg_off_12_16: .word 0 +loadseg_seg_12_16: .word LOADSEG_12_16 +#endif + +1: + pushw %ax /* store first cluster number */ + /* CX = 0 */ + + + /* Reads the FAT chain and stores it in a temporary buffer in the first + * 64KB. The FAT chain is stored an array of 16-bit cluster numbers, + * ending with 0. + * + * The file must fit in conventional memory, so it can't be larger than + * 640KB. The sector size must be at least 512 bytes, so the FAT chain + * can't be larger than around 3KB. + * + * Call with: AX = first cluster in chain + */ + + /* Load the complete FAT into memory. The FAT can't be larger + * than 128 kb, so it should fit in the temporary buffer. + */ + + lesw (loadseg_off_12_16 - Entry_12_16)(%bp), %bx + /* ES:BX = loadseg:0 */ + movw 0x16(%bp), %di /* sectors per FAT */ + movw 0x28(%bp), %ax /* FAT start sector(lo) */ + movw 0x2a(%bp), %dx /* FAT start sector(hi) */ + call readDisk_12_16 + popw %ax /* restore first cluster number */ + + /* Set ES:DI to the temporary storage for the FAT chain */ + pushw %ds + popw %es + movw (loadseg_seg_12_16 - Entry_12_16)(%bp), %ds + movw $FATBUF, %di + +2: + stosw /* store cluster number */ + movw %ax, %si /* SI = cluster number */ + addw %si, %si /* multiply cluster number by two */ + movw (loadseg_seg_12_16 - Entry_12_16)(%bp), %dx + /* segment for FAT16 */ + jnc 1f + addb $0x10, %dh /* overflow. Add 0x1000 to segment value */ +1: + +#ifdef USE_TOTAL_CLUSTERS + cmpw $0x0ff7, 0x34(%bp) /* total clusters in the data area */ +#else + cmpw $0x1801, 0x36(%bp) /* bytes per FAT */ +#endif + jnb 3f + + /* This is a FAT12 disk */ + + addw %ax, %si /* multiply cluster number by 3 ... */ + shrw $1, %si /* ... and divide by 2 */ + lodsw + + /* If the cluster number was even, the cluster value is now in + * bits 0-11 of AX. If the cluster number was odd, the cluster + * value is in bits 4-15, and must be shifted right 4 bits. If + * the number was odd, CF was set in the last shift instruction. + */ + + jnc 1f + movb $4, %cl + shrw %cl, %ax +1: + andb $0x0f, %ah /* mask off the highest 4 bits */ + cmpw $0x0ff7, %ax /* check for EOF */ + jmp 4f + +3: + /* This is a FAT16 disk. The maximal size of a 16bit FAT + * is 128KB, so it may not fit within a single 64KB segment + */ + + movw %dx, %ds /* DS:SI points to next cluster */ + lodsw /* AX = next cluster */ + + cmpw $0xfff7, %ax /* check for EOF */ +4: + jbe 2b /* continue if not EOF */ + + /* Mark end of FAT chain with 0, so we have a single + * EOF marker for both FAT12 and FAT16 systems. + */ + + xorw %ax, %ax + stosw + + pushw %cs + popw %ds + + /* Loads the file into memory, one cluster at a time */ + + lesw (loadseg_off_12_16 - Entry_12_16)(%bp), %bx + /* ES:BX = loadseg:0 */ + movw $FATBUF, %si /* set DS:SI to the FAT chain */ + +2: + lodsw /* AX = next cluster to read */ + orw %ax, %ax + jnz 1f + + /* EOC encountered - done */ +#ifdef BOOTGRUB + movw 0x24(%bp), %dx /* boot_drive and boot_partition */ +#else + movb 0x24(%bp), %bl /* FreeDOS kernel uses BL, not DL, for drive */ +#endif + ljmp *(loadseg_off_12_16 - Entry_12_16)(%bp) /* boot it! */ + +1: + decw %ax /* cluster numbers start with 2 */ + decw %ax + + movw 0x0d(%bp), %di /* sectors per cluster */ + andw $0xff, %di /* DI = sectors per cluster */ + mulw %di + addw 0x30(%bp), %ax /* data starting sector(lo) */ + adcw 0x32(%bp), %dx /* data starting sector(hi) */ + /* DX:AX = first sector to read */ + call readDisk_12_16 + jmp 2b /* read next cluster */ + +/* Reads a number of sectors into memory. + * + * Call with: DX:AX = 32-bit DOS sector number + * DI = number of sectors to read + * ES:BX = destination buffer + * + * Returns: CF set on error + * ES:BX points one byte after the last byte read. + * DX:AX = next sector number after read + */ + +readDisk_12_16: +2: + pushaw + xorw %cx, %cx + pushw %cx + pushw %cx + pushw %dx + pushw %ax + pushw %es /* buffer segment */ + pushw %bx /* buffer offset */ + incw %cx + pushw %cx /* 1 sector to read */ + movb $16, %cl + pushw %cx /* size of this parameter block */ + + xchgw %ax, %cx /* save AX to CX */ + + /* + * translate sector number to BIOS parameters + * + * LBA = sector-1 offset in track + * + head * sectPerTrack offset in cylinder + * + cyl * sectPerTrack * nHeads offset in platter + * + */ + pushw %bx + movw 0x18(%bp), %ax /* sectors per track */ + movw %ax, %bx + mulb 0x1a(%bp) /* nHeads, but maybe a word value 0x100 */ + jnz 1f + movb %bl, %ah /* nHeads=0x100, so AX=sectPerTrack*0x100 */ +1: + xchgw %ax, %cx /* restore AX from CX, and save AX to CX */ + /* DX:AX = LBA, CX = nHeads * sectPerTrack <= 256*63 */ + divw %cx /* AX = cyl, DX = sector-1 + head * sectPerTrack */ + xchgw %ax, %dx /* DX = cyl, AX = sector-1 + head * sectPerTrack */ + divb %bl /* sectors per track */ + /* DX = cyl, AL = head, AH = sector-1 */ +#if 1 + xchgb %al, %ah /* DX = cyl, AH = head, AL = sector-1 */ + incw %ax /* DX = cyl, AH = head, AL = sector */ + xchgw %ax, %dx /* AX = cyl, DH = head, DL = sector */ + xchgw %ax, %cx /* CX = cyl, DH = head, DL = sector */ + xchgb %cl, %ch /* set cyl number low 8 bits in CH */ + rorb $1, %cl /* move cyl high bits into bits 7-6 */ + rorb $1, %cl /* (assumes top = 0) */ + orb %dl, %cl /* merge sector into cylinder */ +#else + movw %dx, %cx /* CX = cyl, AL = head, AH = sector-1 */ + + /* + * the following manipulations are necessary in order to properly place + * parameters into registers. + * CH = cylinder number low 8 bits + * CL<7-6> = cylinder high two bits + * CL<5-0> = sector + */ + movb %al, %dh /* save head into DH for BIOS */ + xchgb %cl, %ch /* set cyl number low 8 bits in CH */ + rorb $1, %cl /* move cyl high bits into bits 7-6 */ + rorb $1, %cl /* (assumes top = 0) */ + incb %ah /* AH = sector number */ + orb %ah, %cl /* merge sector into cylinder */ +#endif + popw %bx + + movw $0x0201, %ax /* read 1 sector */ +ebios_12_16: /* ebios_12_16 - 1 points to 0x02 that can be changed to 0x42 */ + +// cmpb $0x0e, 2(%bp) /* force LBA? */ +// jnz 1f /* no, continue */ +// movb $0x42, %ah /* yes, use extended disk read */ +//1: + movw %sp, %si /* DS:SI points to disk address packet */ + movb 0x24(%bp), %dl /* drive number */ + int $0x13 +// stc #; only for testing the buggy Virtual PC + popaw /* remove parameter block from stack */ + popaw + jc disk_error_12_16 /* disk read error, jc 1f if caller handles */ + incw %ax /* next sector */ + jnz 1f + incw %dx +1: + addw 0x0b(%bp), %bx /* bytes per sector */ + jnc 1f /* 64K bound check */ + pushw %dx + movw %es, %dx + addb $0x10, %dh /* add 1000h to ES */ + /* here, carry is cleared */ + movw %dx, %es + popw %dx +1: + decw %di + jnz 2b + + /* carry stored on disk read error */ + ret + + . = . - (. - readDisk_12_16)/99 + +msg_DiskReadError_12_16: + + .ascii "disk error\0" + +msg_BootError_12_16: + + .ascii "No " + +filename_12_16: + +#ifdef BOOTGRUB + .ascii "GRLDR \0" +#else + .ascii "KERNEL SYS\0" +#endif + +#ifdef ALTERNATIVE_KERNEL +filename_end_12_16: + + . = Entry_12_16 + 0x1e8 + +loadseg_off_12_16: .word 0 +loadseg_seg_12_16: .word LOADSEG_12_16 + + . = Entry_12_16 + 0x1ec + +boot_image_ofs_12_16: + + .word (filename_12_16 - Entry_12_16)+(filename_end_12_16 - filename_12_16 - 1)*2048 +#endif + + . = Entry_12_16 + 0x1ee + +disk_error_12_16: + + movw $(msg_DiskReadError_12_16 - Entry_12_16 + 0x7c00), %si + +boot_error_12_16: + +/* prints string DS:SI (modifies AX BX SI) */ + +//print_12_16: +1: + lodsb (%si), %al /* get token */ + //xorw %bx, %bx /* video page 0 */ + movb $0x0e, %ah /* print it */ + int $0x10 /* via TTY mode */ + cmpb $0, %al /* end of string? */ + jne 1b /* until done */ + + /* The caller will change this to + * ljmp $0x9400, $(try_next_partition - _start1) + */ + +1: jmp 1b + + . = Entry_12_16 + 0x1fc + + .word 0, 0xAA55 /* Win9x uses all 4 bytes as magic value here */ + + . = Entry_12_16 + 0x200 + + . = _start1 + 0x800 + + + + + .arch i486, nojumps + +/* + #; Ext2 boot sector for GRLDR + */ + + +#define DEBUG call debug_print +#undef DEBUG + + //. = _start1 + 0x800 + +Entry_ext2: + + jmp 1f + + . = Entry_ext2 + 0x02 + + /* The default mode is CHS. This is for maximum compatiblity with + * small-sized disks, e.g., floppies. + * + * Valid values are 0x02 for CHS mode, or 0x42 for LBA mode. + * + * If the BIOS int13 supports LBA, this byte can be safely set to 0x42. + * + * Some USB BIOSes might have bugs when using CHS mode, so the format + * program should set this byte to 0x42. It seems that (generally) all + * USB BIOSes have LBA support. + * + * If the format program does not know whether the BIOS has LBA + * support, it may operate this way: + * + * if (partition_start + total_sectors_in_partition) exceeds the CHS + * addressing ability(especially when it is greater than 1024*256*63), + * the caller should set this byte to 0x42, otherwise, set to 0x02. + */ + + .byte 0x02 /* for CHS. Another possible value is 0x42 for LBA */ + + . = Entry_ext2 + 0x03 + +#if 0 + + .ascii "ext2 grldr" + +#else + +msg_DiskReadError_ext2: + + .ascii "I/O error\0" + +#endif + + . = Entry_ext2 + 0x0d + + /* sectors per block. Valid values are 2, 4, 8, 16, 32. */ + + .byte 2 + + . = Entry_ext2 + 0x0e + + /* bytes per block. + * Valid values are 0x400, 0x800, 0x1000, 0x2000, 0x4000. + */ + + .word 1024 /* bytes per block, at most 16K */ + + . = Entry_ext2 + 0x10 + + /* pointers in pointers-per-block blocks, that is, number of blocks + * covered by a double-indirect block. + * Valid values are 0x10000, 0x40000, 0x100000, 0x400000, 0x1000000. + */ + + .long 0x10000 /* number of blocks covered by double-indirect block */ + /* low word=0 */ + + . = Entry_ext2 + 0x14 + + /* pointers per block, that is, number of blocks covered by an indirect + * block. Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000. + */ + + .long 0x100 /* high word=0, low byte=0 */ + + . = Entry_ext2 + 0x18 + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .word 18 /* sectors per track */ + + . = Entry_ext2 + 0x1a + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .word 2 /* number of heads */ + + . = Entry_ext2 + 0x1c + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .long 0 /* hidden sectors */ + + . = Entry_ext2 + 0x20 + + /* total sectors in the filesystem(or in the partition). + * This value is informative. The code does not use it. + */ + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .long 2880 + + . = Entry_ext2 + 0x24 + + /* This byte is ignored for read. The program will write DL onto + * this byte. The caller should set drive number in DL. + * We assume all BIOSes pass correct drive number in DL. + * That is to say, buggy BIOSes are not supported!! + */ + + .byte 0 /* drive number */ + + . = Entry_ext2 + 0x25 + + /* this is default for floppies, the caller should set it to + * a correct value for hard-drive partitions */ + + .byte 0xff /* partition number, 0xff for whole drive */ + + . = Entry_ext2 + 0x26 + + .word 0x80 /* inode size */ + + . = Entry_ext2 + 0x28 + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .long 2048 /* s_inodes_per_group */ + + . = Entry_ext2 + 0x2c + + /* block number for group descriptors = s_first_data_block + 1. + * Valid values are 2 for 1024-byte blocks, and 1 for otherwise. + */ + + /* this is default for 1.44M floppy, the caller should set it to + * a correct value */ + + .long 2 /* block number for group descriptors */ + + . = Entry_ext2 + 0x30 +1: + cld /* 0xFC */ + + xorw %ax, %ax /* 0x31, 0xC0; CF=0, ZF=1 */ + + /* this byte `nop' will be changed to `cwd' by bootlace for floppy */ + nop /* 0x90=nop, 0x99=cwd */ + /* cwd will set DL=0 forcibly for floppy A: */ + + movw %ax, %ss /* constant SS=0 */ + movw $0x7c00, %sp + + movw %sp, %bp /* constant BP=0x7c00 */ + movw %ax, %ds /* constant DS=0 */ + + pushw %ax /* 0x0000 at 0000:7bfe */ + movw $0x1000, %bx + pushw %bx /* 0x1000 at 0000:7bfc */ + pushw %ax /* 0x0000 at 0000:7bfa */ + /* SP=0x7bfa */ + + /* the 6 bytes in the stack are used by read_block(): + * 0000 ---- -2(%bp) + * 1000 ---- -4(%bp) + * 0000 ---- -6(%bp) + * Don't touch them! + */ + + movb %dl, 0x24(%bp) /* BIOS passes drive number in DL */ + + movb $0x41, %ah + movw $0x55AA, %bx + int $0x13 +#if 0 + jnc 1f + /* No EBIOS */ + movb $0x02, (ebios_ext2 - 1 - Entry_ext2 + 0x7c00) +#else + jc 1f #; No EBIOS + + //testb $1, %cl + //jz 1f #; No EBIOS +#if 0 + /* gcc-4.0.1 does not generate 2-byte code. */ + rcrb $1, %cl #; also can be rorb $1, %cl +#else + .byte 0xD0, 0xD9 #; ror cl: D0 C9 +#endif + jnc 1f #; No EBIOS + + movb $0x42, (ebios_ext2 - 1 - Entry_ext2 + 0x7c00) +#endif +1: + xorl %eax, %eax /* CF=0, ZF=1 */ + +#if 0 + /* the INC touches ZF flag, so use MOV instead */ + + incw %ax + incw %ax /* EAX=2=inode number for root dir */ +#else + + /* MOV keeps all flags untouched, so it is better than INC */ + + movb $2, %al /* EAX=2=inode number for root dir */ +#endif + + /* CF=0, ZF=1 because MOV and PUSH do not touch Flags */ + + /* read root dir to 0000:1000, and grldr to 1000:0000 */ + +4: + /* EAX holds the inode number: for root dir or grldr */ + + /* These 3 PUSHes is intended to place 1000:0000 onto the stack for + * grldr. For root dir, the stack is not used since CF is cleared. + * Although there is no corresponding POPs, this is safe enough + * because the program comes here only twice: the first is for + * the root dir, and the second is for grldr. + * + * For root dir, CF=0 and ZF=1. For grldr, CF=1. + */ + + pushw %di /* 0x1000, see "jz 4b" below. */ + pushw %ss /* 0x0000 */ + pushfw + + /* SP=0x7bf4 for root dir, or 0x7bee for grldr */ + + decl %eax /* EAX=(inode - 1) */ + + /* inode numbers are far less than 0x7fffffff, so it is safe to + * initialise EDX with CDQ */ + + cdq /* let EDX=0 */ + + divl 0x28(%bp) /* s_inodes_per_group */ + /* EAX=group number */ + pushl %edx /* EDX=inode number in the group */ + + /* group numbers are far less than 0x7fffffff, so it is safe to + * initialise EDX with CDQ */ + + cdq /* let EDX=0 */ + shll $5, %eax /* EAX=relative displacement of the group descriptor */ + divl 0x0e(%bp) /* bytes per block */ + /* EAX=relative block number for the group descriptor */ + /* DX=displacement in the block */ + /* EDX high=0 */ + + pushw %dx /* we don't care about EDX high word, because it is 0 */ + + addl 0x2c(%bp), %eax /* EAX=absolute block number for the group descriptor */ + /* CF=0, ZF=0 */ + + call read_block /* 0000:1000 points to the block data containing the group descriptor */ + /* ES changed and > 0, BX=0x1000 */ + /* ECX=EDX=0 */ + /* CF=0, ZF=0 */ + + popw %si /* DS:[BX+SI] points to the group descriptor */ + /* DS:[BX+SI+8] points to the starting block number of the group inode table */ + + popl %eax /* inode number in the group */ +// shll $7, %eax /* inode struct size = 0x80 */ +// /* EAX=relative displacement of the inode struct */ +// /* EDX=0 */ + movw 0x26(%bp), %dx /* EDX=inode size */ + mull %edx /* EDX:EAX=relative displacement of the inode struct */ + + divl 0x0e(%bp) /* bytes per block */ + /* EAX=relative block number for the inode struct */ + pushw %dx /* DX=displacement of the inode struct in the block */ + /* EDX high=0 */ + + addl 8(%bx, %si), %eax /* EAX=absolute block number for the inode struct */ + /* CF=0, ZF=0 */ + + call read_block /* 0000:1000 points to the block data containing the inode struct */ + /* ES changed and > 0, BX=0x1000 */ + /* ECX=EDX=0 */ + /* CF=0, ZF=0 */ + + popw %si /* DS:[BX+SI] points to the inode struct */ + + addw %bx, %si /* DS:SI points to the inode struct */ + + /* Move the inode struct to a known safe area(0000:0fa8 - 0000:0fff), + * that is, 0x58 bytes immediately before 0000:1000. We care about only + * the beginning 0x58 bytes of the 0x80-byte inode struct, the last + * 0x28 bytes are ignored. The area from 0xfa8+0x28 to 0xfa8+0x57 + * stores 12 direct block pointers. + * + * + * At address Initial value Stores what? + * ========== ============= ====================================== + * 0xfa8+0x04 (const) the size of the file in bytes + * + * 0xfa8+0x08 total blocks blocks left to read + * + * 0xfa8+0x0c 0 serial number of the block to read + * + */ + + pushw %ss + popw %es /* ES=0 */ + + leaw -0x58(%bx), %di /* BX=0x1000, so DI=0x0fa8 */ + //movw $0x0fa8, %di + movb $0x2c, %cl /* 0x2c words = 0x58 bytes */ + + repz movsw /* now ECX=0, BX=0x1000=DI */ + + movl %ecx, (0x0c - 0x58)(%di) /* block serial number of the file */ + /* ECX=0 means first block */ + /* DI=0x1000 */ + + movl (0x04 - 0x58)(%di), %eax /* i_size, the file size */ + decl %eax + + divl 0x0e(%bp) /* bytes per block */ + /* EDX=various */ + incl %eax + movl %eax, (0x08 - 0x58)(%di) /* total blocks for file data */ + + /* + * 0000:1000 trebly indirect block + * 0000:8000 indirect block + * 0000:c000 double indirect block + * 1000:0000 the file data + */ + + /* now DS:SI points to indirect block number */ + + lodsl /* indirect block number */ + testl %eax, %eax + jz 1f + + //pushw %ss + //popw %es /* ES=0 */ + movb $0x80, %bh /* ES:BX=0000:8000 */ +#if 0 + stc + call read_block +#else + call read_block_c +#endif + /* ES changed and > 0, BX=0x8000 */ + /* ECX=EDX=0 */ + /* ZF=0, CF=0 */ + + /* now DS:SI points to double indirect block number */ + + lodsl /* double indirect block number */ + testl %eax, %eax + jz 1f + +#if 0 + pushw %ss + popw %es /* ES=0 */ + movb $0xc0, %bh /* ES:BX=0000:c000 */ + stc + call read_block +#else + movb $0xc0, %bh /* ES:BX=0000:c000 */ + call read_block_c +#endif + /* ES changed and > 0, BX=0xc000 */ + /* ECX=EDX=0 */ + /* ZF=0, CF=0 */ + + /* now DS:SI points to trebly indirect block number */ + + lodsl /* trebly indirect block number */ + testl %eax, %eax /* CF=0, TEST always clears CF */ + jz 1f + /* ZF=0 */ + //pushw %ss + //popw %es /* ES=0 */ + //movb $0x10, %bh /* ES:BX=0000:1000 */ + //stc + call read_block /* 0000:1000 points to the block data */ + /* ES changed and > 0, BX=0x1000 */ + /* ECX=EDX=0 */ + /* ZF=0, CF=0 */ + + /* the block at 0000:1000, which contains the indirect block numbers, + * is just overwritten by the trebly indirect block */ + +1: + /* get absolute block number by block serial number */ + + movl (0x0c - 0x58)(%di), %ebx /* block serial number of the file */ + subl $12, %ebx + jc 3f /* direct block: block serial number < 12 */ + + pushw %bx + subl 0x14(%bp), %ebx + popw %ax + jnc 2f + + /* indirect block: 12 <= block serial number < 12 + 0x14(%bp) */ + + //addw 0x14(%bp), %bx + addb $(0x70 / 4), %ah + //xchgw %ax, %bx + jmp 8f + +2: + pushl %ebx + subl 0x10(%bp), %ebx + jc 7f /* EBX on the stack is < 0x10(%bp). double indirect block: + * 12 + 0x14(%bp) <= block serial number < 12 + 0x14(%bp) + 0x10(%bp) + */ + + /* trebly indirect block: block serial number >= 12 + 0x14(%bp) + 0x10(%bp) */ + + popl %eax /* discard the stack */ + xchgl %eax, %ebx /* move EBX to EAX */ + /* EDX=0 */ + divl 0x10(%bp) + /* EAX=indirect block number, < 0x14(%bp) */ + /* EDX=block number, < 0x10(%bp) */ + + pushl %edx /* EDX < 0x10(%bp) */ + testl %edx, %edx + jnz 7f + + /* EDX=0, so we need to load the double indirect block */ + + shlw $2, %ax + xchgw %ax, %bx + + /* get the double indirect block number from the trebly indirect + * block data */ + + movl (%bx, %di), %eax + +//6: + movw $0xc000, %bx /* ES:BX=0000:c000 */ + + //pushw %ss + //popw %es /* ES=0 */ + //stc + call read_block_c /* 0000:c000 points to the block data */ + /* ES changed and > 0, BX=0xc000 */ + /* ECX=EDX=0 */ + /* CF=0, ZF=0 */ +7: + popl %eax /* EAX < 0x10(%bp) */ + cdq /* let EDX=0 (notice the above jc 7f and jnz 7f) */ + divl 0x14(%bp) + /* EAX=indirect block number, < 0x14(%bp) */ + /* EDX=block number, < 0x14(%bp) */ + + pushw %dx /* EDX < 0x14(%bp) */ + testw %dx, %dx + jnz 7f + + /* if DX=0, we need to load the indirect block */ + + //addb $(0xb0 / 4), %ah + shlw $2, %ax + xchgw %ax, %bx + + /* get the indirect block number from the double indirect block data */ + + movl 0xb000(%bx, %di), %eax + //movl (%bx, %di), %eax +//5: + movw $0x8000, %bx /* ES:BX=0000:8000 */ + + //pushw %ss + //popw %es /* ES=0 */ + //stc + call read_block_c /* 0000:8000 points to the block data */ + /* ES changed and > 0, BX=0x8000 */ + /* ECX=EDX=0 */ + /* CF=0, ZF=0 */ +7: + popw %ax /* AX < 0x14(%bp) */ +8: + xchgw %ax, %bx +3: + shlw $2, %bx + movl (%bx, %di), %eax + + /* got it! EAX=absolute block number */ + + /* read block data to 1000:0000. For root dir, read each block to + * 1000:0000(overwrite the previous read). For grldr, read blocks + * one by one to the area starting at 1000:0000. + */ + + popfw + popw %bx + popw %es + pushfw + + /* CF=0 and ZF=1 for reading root dir, CF=1 for reading grldr */ + + call read_block /* 1000:0000 points to the block data */ + /* ES changed and > 0x1000, BX=0 */ + /* ECX=EDX=0 */ + /* CF=0, ZF=0 */ + + popfw + pushw %es + pushw %bx + pushfw + + jc 3f /* CF=1, we are reading grldr */ + + /* We have just read a block of the root dir to 1000:0000. + * So we check all dir entries in the block to see if anyone + * matches grldr. + */ + + xorw %si, %si + pushw %ss + popw %es /* ES=0 */ + +2: + pushw %ds /* DS=0 */ + movw %di, %ds /* DS=0x1000 */ + movw $(filename_ext2 - Entry_ext2 + 0x7c00), %di + + pushw %si + lodsl /* This is possible inode number for grldr */ + pushl %eax /* This is possible inode number for grldr */ + lodsw + xchgw %ax, %dx /* rec_len */ + lodsw /* AL=name_len, should be 5 for grldr */ + /* AH=file_type(1 for regular file) */ +#if 0 + cmpw $0x0105, %ax + jnz 5f + movb %al, %cl /* CH is already 0 */ + repz cmpsb +#else + decb %ah + //jnz 5f + xchgw %ax, %cx /* CX=name_len */ + repz cmpsb + jnz 5f + xchgw %ax, %cx /* movb $0, %al */ + scasb +#endif +5: + popl %eax /* This is possible inode number for grldr */ + popw %si + + /* DS=0x1000, EAX=inode number */ + + movw %ds, %di /* DI=0x1000 */ + popw %ds /* DS=0 */ + + stc /* indicates the new inode is for grldr */ + + jz 4b /* grldr is found with EAX=inode number */ + + addw %dx, %si + cmpw 0x0e(%bp), %si /* bytes per block */ + jb 2b + + /* file not found in this block, continue */ + + /* We are lucky that CF=0, which indicates we are dealing with + * the root dir. + */ + +3: + + /* CF=1 for grldr, CF=0 for root dir. */ + + incl (0x0c - 0x58)(%di) + decl (0x08 - 0x58)(%di) + jnz 1b + +#if 0 + /* The above 2 instructions INC and DEC do not touch CF, so we + * can omit this POP-PUSH pair. + */ + + popfw + pushfw +#endif + + movw $(msg_No_grldr_ext2 - Entry_ext2 + 0x7c00), %si + + jnc boot_error_ext2 /* grldr not found in the root dir */ + + /* All grldr blocks have been loaded to memory starting at 1000:0000, + * Before the boot, we pass boot_drive and boot_partition to grldr. + */ + + /* ES>0x1000, BX=0, ECX=EDX=0, DI=0x1000, SS=0, SI>0x7c00, DS=0 + * BP=0x7c00, SP<=0x7c00 + */ + + movw 0x24(%bp), %dx + + /* boot it now! */ + + pushw %di /* 0x1000 */ + pushw %ss /* 0x0000 */ + lret + +read_block_c: + + pushw %ss + popw %es /* ES=0 */ + stc + +/* read_block - read a block + * input: CF - indicator for overlap or consecution + * EAX = block number + * ES:BX - buffer + * + * output: if CF is cleared on input, ES:BX is initialized to 0000:1000 + * ES:BX - buffer filled with data + * ES, EAX - Changed + * ECX = 0 + * EDX = 0 + * ZF = 0 + * CF = 0 + */ + +read_block: + + jc 1f + + .byte 0xC4, 0x5E, 0xFC /* lesw -4(%bp), %bx */ + /* ES:BX=0000:1000 */ + jnz 1f + + //at this time, the gcc cannot generate 3 byte code + .byte 0xC4, 0x5E, 0xFA /* lesw -6(%bp), %bx */ + /* ES:BX=1000:0000 */ + //. = . - (. - read_block) / 6 +1: + movzbl 0x0d(%bp), %ecx /* CX=sectors per block */ + /* ECX high=0 */ + . = . - (. - 1b) / 6 + mull %ecx /* EAX=relative sector number */ + /* EDX=0 */ + . = . - (. - 1b) / 9 + addl 0x1c(%bp), %eax /* EAX=absolute sector number */ + +#if 1 + /* pass through, saving 4 bytes(call and ret) */ +#else + call readDisk_ext2 + ret +#endif + +/* Read sectors from disk, using LBA or CHS + * input: EAX = 32-bit LBA sector number + * CX = number of sectors to read + * ECX high word = 0 + * ES:BX = destination buffer + * + * output: No return on error + * BX not changed + * ES = ES + 0x20 * CX + * EAX = EAX + CX + * ZF = 0 + * CF = 0 + */ + +readDisk_ext2: +2: + pushal + //xorl %edx, %edx /* EDX:EAX = LBA */ + pushl %edx /* hi 32bit of sector number */ + pushl %eax /* lo 32bit of sector number */ + pushw %es /* buffer segment */ + pushw %bx /* buffer offset */ + pushw $1 /* 1 sector to read */ + pushw $16 /* size of this parameter block */ + + //xorl %ecx, %ecx + pushl 0x18(%bp) /* lo:sectors per track, hi:number of heads */ + popw %cx /* ECX = sectors per track */ + divl %ecx /* residue is in EDX */ + /* quotient is in EAX */ + /* EDX high=0, DH=0 */ + incw %dx /* DL=sector number */ + popw %cx /* ECX = number of heads */ + pushw %dx /* push sector number into stack */ + xorw %dx, %dx /* EDX:EAX = cylinder * TotalHeads + head */ + divl %ecx /* residue is in EDX, head number */ + /* quotient is in EAX, cylinder number */ + /* EDX high=0, EAX high=0 */ + + + xchgb %dl, %dh /* head number should be in DH */ + /* DL = 0 */ + popw %cx /* pop sector number from stack */ + xchgb %al, %ch /* lo 8bit cylinder should be in CH */ + /* AL = 0 */ + shlb $6, %ah /* hi 2bit cylinder ... */ + orb %ah, %cl /* ... should be in CL */ + + incw %ax /* AL=1, read 1 sector */ + + /* Instead of 0x0e, the LBA indicator at 2(%bp) is + * + * 0x42 for LBA + * + * and + * + * 0x02 for CHS + */ +#if 0 + movb $0x42, %ah + /* ebios_ext2 - 1 points to 0x42 that can be changed to 0x02 */ +#else + movb $0x02, %ah + /* ebios_ext2 - 1 points to 0x02 that can be changed to 0x42 */ +#endif +ebios_ext2: + + //andb 2(%bp), %ah + + movw %sp, %si /* DS:SI points to disk address packet */ + movb 0x24(%bp), %dl /* drive number */ + int $0x13 + jc disk_error_ext2 + movw %es, %ax + addw $0x20, %ax /* here, carry is cleared */ + movw %ax, %es + popaw /* remove parameter block from stack */ + popal + incl %eax /* next sector, here ZF=0 */ + loop 2b + ret + + //. = . - (. - readDisk_ext2)/74 + +//msg_DiskReadError_ext2: +// +// .ascii "disk error\0" + +msg_No_grldr_ext2: + + .ascii "No " + +filename_ext2: + .ascii "grldr\0" + + . = Entry_ext2 + 0x1ee + +filename_end_ext2: + + .word (filename_ext2 - Entry_ext2)+(filename_end_ext2 - filename_ext2 - 1)*2048 + + . = Entry_ext2 + 0x1f0 + +disk_error_ext2: + + movw $(msg_DiskReadError_ext2 - Entry_ext2 + 0x7c00), %si + +boot_error_ext2: + +/* prints string DS:SI (modifies AX BX SI) */ + +//print_ext2: +1: + lodsb (%si), %al /* get token */ + //xorw %bx, %bx /* video page 0 */ + movb $0x0e, %ah /* print it */ + int $0x10 /* via TTY mode */ + cmpb $0, %al /* end of string? */ + jne 1b /* until done */ +#if 1 + + /* The caller will change this to + * ljmp $0x9400, $(try_next_partition - _start1) + */ + +1: jmp 1b + +#else + /* boot failed, try to hand over the control to supervisor */ + ldsw (1f + 3 - Entry_ext2)(%bp), %si + lodsl + cmpl $0x9400b8fa, %eax +1: jnz 1b /* no supervisor, hang up. */ + ljmp $0x9400, $(try_next_partition - _start1) + + //. = . - (. - disk_error_ext2) / 30 +#endif + + . = Entry_ext2 + 0x1fe + + .word 0xAA55 + + . = _start1 + 0xA00 + +#define INSIDE_GRLDR + +#include "ntfsbs.S" + + . = _start1 + 0x1200 + + .arch i586, jumps + +#ifdef DEBUG + + . = Entry_ext2 + 0x201 + +debug_print: + + pushfl + pushal + movl %eax, %ebp + call 2f +#if 0 + popal + pushal + movl %ebx, %ebp + call 2f + popal + pushal + movl %ecx, %ebp + call 2f + popal + pushal + movl %edx, %ebp + call 2f + popal + pushal + movl %esi, %ebp + call 2f + popal + pushal + movl %edi, %ebp + call 2f + popal + popfl + pushfl + pushal + pushfl + popl %ebp /* flags */ + call 2f + movw %ds, %bp + shll $16, %ebp + movw %es, %bp + call 2f + movw $0x0e0d, %ax /* print CR */ + int $0x10 /* via TTY mode */ + movw $0x0e0a, %ax /* print LF */ + int $0x10 /* via TTY mode */ +#endif + popal + popfl + ret +2: + movw $7, %cx +1: + xorw %bx, %bx /* video page 0 */ + movl %ebp, %eax + shrl %cl, %eax + shrl %cl, %eax + shrl %cl, %eax + shrl %cl, %eax + andb $0x0f, %al + addb $0x30, %al + movb $0x0e, %ah /* print char in AL */ + int $0x10 /* via TTY mode */ + + decw %cx + testw %cx, %cx + jns 1b + + movw $0x0e20, %ax /* print space */ + int $0x10 /* via TTY mode */ + ret +#endif + +#if 1 + /* restore GRLDR_CS */ + + /* this code is executed at 0000:MONITOR, which must be a 16-byte + * aligned address. The address 0000:MONITOR should be designed in + * a way that could avoid memory confliction with volume boot records + * (currently FAT12/16/32/NTFS/EXT2/3 are built in). + */ + + /* CS=code */ + + .align 16 + +restore_GRLDR_CS: +2: + call 1f +1: + popw %bx # instruction pointer of 1b + movw %cs, %ax + shrw $4, %bx + addw %ax, %bx # BX=segment value of this code + pushw %bx + pushw $(1f - 2b) + lret +1: + /* modify gdt base */ + xorl %eax, %eax + movw %bx, %ax + shll $4, %eax + addl $(gdt -2b), %eax + movl %eax, %cs:(gdt - 2b + 2) + + movw $GRLDR_CS, %bx + movw %bx, %es + movw %ds, %bx # save old DS to BX + + cli + lgdt %cs:(gdt - 2b) + movl %cr0, %eax + orb $1, %al + movl %eax, %cr0 + + movw $8, %si + movw %si, %ds + + xorl %esi, %esi + xorl %edi, %edi + movl $(0x9000 / 4), %ecx + + cld + repz movsl + + movw $16, %si + movw %si, %ds + + andb $0xfe, %al + movl %eax, %cr0 + + movw %bx, %ds # restore DS from BX + + ljmp $GRLDR_CS, $(try_next_partition - _start1) + +#endif + +# Descriptor tables +# +# NOTE: The intel manual says gdt should be sixteen bytes aligned for +# efficiency reasons. However, there are machines which are known not +# to boot with misaligned GDTs, so alter this at your peril! If you alter +# GDT_ENTRY_BOOT_CS (in asm/segment.h) remember to leave at least two +# empty GDT entries (one for NULL and one reserved). +# +# NOTE: On some CPUs, the GDT must be 8 byte aligned. This is +# true for the Voyager Quad CPU card which will not boot without +# This directive. 16 byte aligment is recommended by intel. +# + .align 16 +gdt: + /* this is the default null entry in GDT */ + .word gdt_end - gdt - 1 # gdt limit + .long (GRLDR_CS * 16 + gdt - _start1) # linear address of gdt + .word 0 # pad 2 bytes + + /* real mode data segment base=0x200000 */ + .word 0xFFFF, 0 + .byte 0x20, 0x92, 0, 0 + + /* real mode data segment base=0 */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0, 0 + +gdt_end: + +helper_start: + + /* helper function begins here + * before the call: + * CF=1 : indicates an invalid or corrupt entry + * CF=0 : indicates a valid entry + * + * on return: + * CF=1 : means "below", try next entry + * CF=0,ZF=1 : means "equal", helper did nothing, so we need + * a further try to boot via NT bootsector + * CF=0,ZF=0 : means "above", helper succeeded, boot it now + */ + + sti + + /* DS=SS=0x9400 */ + pushw %cs + popw %ds + + pushw $FS_BOOT + popw %es + + /* ES=FS_BOOT */ + + /* Format of partition information blocks. + * + * Offset Length in bytes Field + * 00h 1 Set to 80h if this partition is active. + * 01h 1 Partition's starting head. + * 02h 2 Partition's starting sector and track. + * 04h(SI) 1 Partition's ID number. + * 05h 1 Partition's ending head. + * 06h 2 Partition's ending sector and track. + * 08h 4 Starting LBA. + * 0Ch 4 Partition's length in sectors. + */ + + pushw %ds /* DS=0x9400 */ + pushw %es /* ES=FS_BOOT */ + pushal + pushfw + + //pushw %si + //stc + //jc invalid_or_null /* invalid or null entry */ +#if 0 + /* backup 63 sectors at FS_BOOT:0 to 63 sectors at FS_BOOT:8000 + * this piece of code is no longer useful. + */ + pushw %es + popw %ds + xorw %si, %si + movw $0x8000, %di + movw $0x3f00, %cx + cld + repz movsw +#endif + +#if (defined(GRLDR_MBR)) || (defined(GRLDR_INSTALL)) + testb $0x80, %cs:0x02 /* boot previous MBR first? */ + jnz 2f /* no, continue to find GRLDR */ + + /* yes, call the routine for booting the previous MBR. + * it will not return on success. + * on failure, it will return here + */ + + /* before we call the routine, we will check if the user want to + * skip this step and continue to find the GRLDR + */ +#if 0 + movw $(press_space_bar_string - _start1), %si + cmpw $0x3920, %cs:0x04 + je 1f + movw $(press_hot_key_string - _start1), %si +1: + /* if timeout==0, don't display the message */ + + cmpb $0, %cs:0x03 + je 1f + call print_message /* CS:SI points to message string */ + movw $(press_any_key_string - _start1), %si + call print_message /* CS:SI points to message string */ +#else + cmpb $0, %cs:0x03 + je 1f + movw $(press_hot_key_pre - _start1), %si + call print_message + movw $(press_hot_key_name - _start1), %si + call print_message + movw $(press_hot_key_sub - _start1), %si + call print_message +#endif +1: + call sleep_5_seconds + jc 1f /* desired hot-key pressed */ + call boot_prev_mbr //Error_modify +1: + orb $0x80, %cs:0x02 +2: +#endif + popfw + popal + popw %es + popw %ds + + pushw %ds /* DS=0x9400 */ + pushw %es /* ES=FS_BOOT */ + pushal + pushfw + + //cmpb $0x0e, 0x00 /* EBIOS previously checked OK? */ + //jbe 1f /* yes, skip the check */ + movb $0x02, 0x00 /* initialise this byte to 0x02 */ + movb $0x41, %ah /* EBIOS check existence */ + movw $0x55aa, %bx + int $0x13 + jc 1f /* No EBIOS */ + cmpw $0xaa55, %bx + jnz 1f /* No EBIOS */ + testb $1, %cl + jz 1f /* No EBIOS */ + movb $0x42, 0x00 /* LBA supported, save 0x42 to 9400:0000 */ +1: + popfw + popal + popw %es + popw %ds + + pushw %ds /* DS=0x9400 */ + pushw %es /* ES=FS_BOOT */ + pushal + pushfw + + pushaw + cmpw $0x1c2, %si + jne 1f + /* initialize partition number and partition entries end */ + movw $0xffff, 0x1bc /* hd partition number */ + movw $0x01fe, 0x1ba /* partition entries end */ +1: + pushw %dx + testb %dl, %dl + jns 1f /* floppy, use normal CHS mode */ + cmpw $0x1f2, %si /* is it a primary partition? */ + ja 2f /* no, it is an extended partition */ + movl 4(%si), %eax + movl %eax, 8(%si) /* parent part_start saved here */ + xorl %eax, %eax + movl %eax, 4(%si) /* current part_start(0) saved here */ +2: + //movl -4(%si), %eax + //cmpl $0xfffffe00, %eax /* check the starting CHS */ + //jb 1f /* use normal CHS mode */ + + /* get CHS total number of sectors */ + pushw %es + pushw %ds + movb $8, %ah /* read drive parameters changes DX,ES,DI */ + //movb $0x80, %dl /* BIOS drive number is in DL */ + int $0x13 + popw %ds + popw %es + jc 3f + testb $63, %cl + jnz 2f +3: + /* failed to get drive parameters, use maximum value */ +#if 0 + popw %dx + pushw %dx + cmpb $0x80, %dl + jne 3f + pushw %ds + xorw %ax, %ax + movw %ax, %ds + cmpb $0, 0x475 + popw %ds + je 3f + +3: +#endif + movw $0xffff, %cx + movw %cx, %dx +2: + //xorl %eax, %eax + movzbl %dh, %eax + incw %ax + movzbl %cl, %edx + andb $63, %dl + mulw %dx /* DX=0, AX=product */ + shrb $6, %cl + xchgb %cl, %dh + xchgb %ch, %dl + incw %dx /* DX=total cylinders */ + mull %edx /* EDX=0, EAX=product */ + + /* check the partition's starting LBA */ + movl 4(%si), %ebx + addl 8(%si), %ebx /* EBX=start_LBA */ + + testl %ebx, %ebx + je 1f + + ///* we always use LBA mode */ + ////cmpl %eax, %ebx + ////jb 1f /* use normal CHS mode */ + cmpb $0x42, 0x00 /* EBIOS present? */ + jne 1f /* no, skip the LBA mode int13 call */ + + /* load partition boot track to FS_BOOT using LBA mode */ + popw %ax /* AX=orig DX which holds drive number DL */ + pushw %ax + pushl %edx /* EDX=0, higher 4 bytes of starting LBA */ + pushl %ebx /* lower 4 bytes of starting LBA */ + pushw %es /* ES=FS_BOOT */ + pushw %dx /* DX=0, ES:0 is the buffer */ + //pushl $0x003f0010 /* transfer 63 sectors */ + pushw $0x3f /* transfer 63 sectors */ + pushw $0x10 /* size of disk address packet */ + xchgw %ax, %dx /* restore drive number DL from AL */ + movb $0x42, %ah /* extended read */ + movw %sp, %si /* DS:SI points to disk address packet */ + int $0x13 /* ignore the read failure */ + popaw /* adjust the stack */ + jc 1f + popw %dx + popaw + + //popw %ax /* discard flags in the stack */ + popfw + clc + + pushfw /* push new flags with CF=0 */ + pushaw + pushw %dx +1: + popw %dx + popaw + + popfw + popal + popw %es + popw %ds + + pushw %ds /* DS=0x9400 */ + pushw %es /* ES=FS_BOOT */ + pushal + pushfw + + pushw %si + + pushfw + pushw %es +//--------------------------------------------------------- + /* print "Try (hd0,n): " or "Try (fd0): "*/ + pushw %ds + popw %es /* ES=DS=CS=0x9400 */ + + cld /* for stosb */ + xorw %ax, %ax + testb %dl, %dl + jns 1f /* floppy */ + /* hard drive */ +#if 0 + movw %si, %ax + subw $0x1c2, %ax + shrw $4, %ax + cmpw $0x1fe, %si /* is in MBR? */ + jb 1f /* yes */ + /* no, it is an entry in an extended partition */ + movb $0xFC, (add_sub_si + 2 - _start1) /* addw $-4, %si */ + incw 0x1bc /* logical partition number */ + movb 0x1bc, %al +#else + incw 0x1bc /* logical partition number */ + movw 0x1bc, %ax + cmpb $4, %al + jb 1f + movb $0xFC, (add_sub_si + 2 - _start1) /* addw $-4, %si */ +#endif +1: + /* AL=partition number, AH=0 */ + pushw %ax + + movw $(partition_message - _start1 + 7), %di /* drive type */ + movb %dl, %al + shrb $7, %al /* drive type: floppy=0, harddrive=1 */ + shlb $1, %al + addw $0x6466, %ax /* "fd" or "hd" */ + stosw + movb %dl, %al + andb $0x7f, %al /* drive number */ + aam /* convert binary to decimal, AH=high, AL=low */ + testb %ah, %ah + jz 1f + addb $0x30, %ah + movb %ah, (%di) + incw %di +1: + addb $0x30, %al + stosb + + popw %ax + + testb %dl, %dl + jns 2f /* floppy */ + /* this is a hard drive, the partition number is in AL */ + movb $0x2c, (%di) /* "," */ + incw %di + aam /* convert binary to decimal, AH=high, AL=low */ + testb %ah, %ah + jz 1f + addb $0x30, %ah + movb %ah, (%di) + incw %di +1: + addb $0x30, %al + stosb +2: + movl $0x00203a29, (%di) /* "): \0" */ + + movw $(partition_message - _start1), %si + call print_message /* CS:SI points to message string */ +//--------------------------------------------------------- + popw %es + popfw + //stc + jc invalid_or_null /* invalid or null entry */ + + xorw %si, %si + pushw %es + popw %ds + + /* DS=ES=FS_BOOT */ + + /* First, check for ext2 filesystem */ + + cmpw $0xEF53, 0x438 /* Magic signature */ + jnz 1f + xorl %eax, %eax + cmpl %eax, 0x400 /* s_inodes_count */ + jz 1f + cmpl %eax, 0x404 /* s_blocks_count */ + jz 1f +// cmpw %ax, 0x458 /* s_inode_size, usually 0x80 */ +// jz 1f + cmpl %eax, 0x420 /* s_blocks_per_group */ + jz 1f + cmpl %eax, 0x428 /* s_inodes_per_group */ + jz 1f + movl 0x414, %eax /* s_first_data_block */ + movw %ax, %bx /* BX=1 for 1K block, 0 otherwise */ + shrl $1, %eax /* must be 0 */ + jnz 1f + movl 0x418, %ecx /* s_log_block_size */ + cmpl $4, %ecx /* max size of block is 16K */ + ja 1f + negw %cx /* CF=0 for 1K block, CF=1 otherwise */ + adcw %ax, %bx /* EAX=0 */ + decw %bx + jnz 1f + + /* BX = 0 */ + /* EAX= 0 */ + + movw $0x80, %ax /* EXT2_GOOD_OLD_INODE_SIZE */ + movw %ax, %cs:0x826 /* inode size */ + movl 0x44C, %ecx /* ECX=s_rev_level */ + jecxz 3f /* EXT2_GOOD_OLD_REV */ + movw 0x458, %ax /* AX=s_inode_size */ + testw %ax, %ax + jz 1f /* invalid inode size */ + pushw %ax + pushw %dx + movb 0x418, %cl /* s_log_block_size */ + addb $10, %cl + xorw %dx, %dx /* DX=0 */ + incw %dx /* DX=1 */ + shlw %cl, %dx /* DX=block size in bytes */ + xchgw %ax, %cx /* CX=s_inode_size */ + xchgw %ax, %dx /* AX=block size in bytes */ + xorw %dx, %dx /* DX:AX=block size in bytes */ + divw %cx /* quo=AX, rem=DX */ + testw %dx, %dx + popw %dx + popw %ax + jnz 1f /* invalid inode size */ + movw %ax, %cs:0x826 /* inode size */ +3: + /* BX = 0 */ + + /* super block is sane */ + + //pushw %cs + //popw %ds + ///* DS=SS=0x9400 */ + ///* ES=FS_BOOT */ + cld + movw $0x800, %si + xorw %di, %di + movw $0x0200, %cx /* yes, we need 2 sectors if enable debug */ + + repz cs movsw /* CS segment override prefix(=0x2E) */ + + /* modify the boot partition number */ + + /* the boot partition number is at offset 0x25 for ext2 */ + + testb %dl, %dl + jns 3f /* no modification for floppy */ + movw $0x25, %di + movw %cs:0x1bc, %ax /* partition number */ + stosb +3: + /* fix for ext2 partition: hidden_sectors, offset 0x1c */ + popw %si /* DI points to old entry in MBR */ + pushw %si + xorl %eax, %eax /* let hidden_sectors=0 for floppy */ + testb %dl, %dl + jns 3f /* floppy */ + movl %cs:4(%si), %eax + addl %cs:8(%si), %eax +3: + /* BX = 0 */ + + movl %eax, %es:0x1c(%bx) /* adjust hidden_sectors for EXT2 */ + + /* fix for ext2 partition: EBIOS indicator, offset 0x02 */ + + movb %cs:0x00(%bx), %al + movb %al, %es:0x02(%bx) + + /* fix for ext2 partition: sectors per block, offset 0x0d */ + /* fix for ext2 partition: bytes per block, offset 0x0e */ + /* fix for ext2 partition: dwords per block(dpb), offset 0x14 */ + /* fix for ext2 partition: square of dpb, offset 0x10 */ + + movb %es:0x418, %cl /* s_log_block_size */ + //incw %cx + movl $2, %eax + shlw %cl, %ax + movb %al, %es:0x0d(%bx) + shlw $9, %ax /* block size is word wide */ + movw %ax, %es:0x0e(%bx) + shrw $2, %ax + movl %eax, %es:0x14(%bx) + addb $8, %cl + shll %cl, %eax + movl %eax, %es:0x10(%bx) + + + /* fix for ext2 partition: sectors per track, offset 0x18 */ + /* fix for ext2 partition: number of heads, offset 0x1a */ +#if 1 + pushw %ds + pushw %es + pushw %bx + pushw %dx + movb $8, %ah /* read drive parameters changes DX,ES,DI,BX */ + movb $0x80, %dl /* BIOS drive number is in DL */ + int $0x13 + movw %dx, %ax + popw %dx + popw %bx + popw %es + popw %ds + jc 3f + andb $63, %cl + jz 3f + movb %cl, %es:0x18(%bx) + shrw $8, %ax + incw %ax + movw %ax, %es:0x1a(%bx) +3: +#else + testb %dl, %dl + jns 3f /* floppy */ + popw %di /* DI points to old entry in MBR */ + pushw %di + movw %cs:1(%di), %ax + andb $63, %ah + movb %ah, %es:0x18 + xorb %ah, %ah + incw %ax + movw %ax, %es:0x1a +3: +#endif + + /* fix for ext2 partition: s_inodes_per_group, offset 0x28 */ + movl %es:0x428, %eax /* s_inodes_per_group */ + movl %eax, %es:0x28(%bx) + + /* fix for ext2 partition: block number for group descriptors, offset 0x2c */ + /* At which block the group descriptors begin? */ + movl %es:0x414, %eax /* s_first_data_block */ + incw %ax + movl %eax, %es:0x2c(%bx) + + /* fix for ext2 partition: on error go back to supervisor, offset 0x01fc */ + movw $0x01fc, %si + movw %si, %di + lodsw + cmpw $0xFEEB, %ax /* EB FE is jmp back to itself(infinite loop) */ + jnz 3f + decw %ax /* AL=0xEA, ljmp */ + stosb + //movw $(try_next_partition - _start1), %ax + movw $MONITOR, %ax + stosw + //movw %cs, %ax /* AX=0x9400 */ + xorw %ax, %ax + stosw /* the last byte 0x00 is in the next sector! */ +// addw $0x0f, %di +// movw $(restore_GRLDR_CS - _start1), %si +// movw $((gdt_end - restore_GRLDR_CS) / 4), %cx +// .byte 0x2e /* %cs: prefix */ +// repz movsl +3: + + movw $(EXT2_message - _start1), %si + call print_message /* CS:SI points to message string */ + + clc + jmp move_entries_and_return + +1: + #; It is not EXT2. Check for FAT12/16/32/NTFS. + + /* DS=ES=FS_BOOT */ + + cmpw $0x200, 0x0b(%si) /* bytes per sector */ + jne 1f /* not a normal BPB */ + movb 0x0d(%si), %al /* sectors per cluster */ + testb %al, %al + jz 1f /* invalid if = 0 */ + movb %al, %cl + movw $128, %ax + divb %cl /* quo=AL, rem=AH */ + testb %ah, %ah + jnz 1f /* invalid if not 2^n */ + movw 0x18(%si), %ax /* sectors per track */ + testw %ax, %ax + jz 1f /* invalid if = 0 */ + cmpw $63, %ax + ja 1f /* invalid if > 63 */ + movw 0x1a(%si), %ax /* number of heads */ + decw %ax /* Max head number, should be a byte */ + testb %ah, %ah /* should be 0 */ + jnz 1f /* invalid if number of heads > 256 */ + cmpb $0xf0, 0x15(%si) /* media descriptor */ + jb 1f + + cmpb $0x42, %cs:0x00 /* EBIOS present? */ + jne 3f + //movb $0x41, %ah /* EBIOS check existence */ + //movw $0x55aa, %bx + //int $0x13 + //jc 3f /* No EBIOS */ + //cmpw $0xaa55, %bx + //jnz 3f /* No EBIOS */ + //testb $1, %cl + //jz 3f /* No EBIOS */ + movb $0x0e, 0x02(%si) /* force LBA */ +3: + cld + movw $0x0600, %bx /* FAT12/FAT16 */ + movw $0x003c, %cx /* FAT12/FAT16 */ + + movb 0x10(%si), %al /* number of FATs(NTFS:0, FAT:1,2) */ + cmpb $2, %al + ja 1f /* abnormal FAT */ + movw 0x11(%si), %ax /* max root entries */ + testw %ax, %ax + jnz 2f /* FAT12/FAT16 */ + + /* FAT32 or NTFS */ + movw 0x13(%si), %ax /* total sectors(small) */ + testw %ax, %ax + jnz 1f /* invalid FAT32 BPB */ + movw 0x16(%si), %ax /* sectors per FAT(small) */ + testw %ax, %ax + jnz 1f /* invalid FAT32 BPB */ + movb 0x10(%si), %al /* number of FATs(NTFS:0, FAT:1,2) */ + testb %al, %al + jz 8f + + /* FAT32 */ + movl 0x20(%si), %eax /* FAT32 total sectors */ + testl %eax, %eax + jz 1f + movl 0x24(%si), %eax /* FAT32 sectors per FAT */ + testl %eax, %eax + jz 1f + movw $0x0400, %bx /* FAT32 */ + movw $0x0058, %cx /* FAT32 */ + movw $(FAT32_message - _start1), %si + jmp 7f +8: + /* NTFS */ + movl 0x20(%si), %eax /* FAT32 total sectors */ + testl %eax, %eax + jnz 1f + //movw 0x11(%si), %ax /* max root entries */ + //testw %ax, %ax + //jnz 1f + movw 0x0e(%si), %ax /* reserved sectors */ + testw %ax, %ax + jnz 1f + + /* BUG fix for extended NTFS partition */ + popw %si /* SI points to old entry in MBR */ + pushw %si + xorl %eax, %eax /* let hidden_sectors=0 for floppy */ + testb %dl, %dl + jns 3f /* floppy */ + movl %cs:4(%si), %eax + addl %cs:8(%si), %eax +3: + movl %eax, 0x1c /* adjust hidden_sectors for NTFS */ + + movb %dl, 0x24 /* adjust drive number for NTFS */ + +#if 1 + // Load NTFS using internal boot sector at 0xA00 + + movw $(NTFS5_message - _start1), %si + call print_message /* CS:SI points to message string */ + + movw $0xA00, %bx + movw $0x52, %cx + + pushw %cs + popw %ds + + /* DS=SS=0x9400 */ + /* ES=FS_BOOT */ + + movw %bx, %si + xorw %di, %di + lodsw + stosw + addw %cx, %si + addw %cx, %di + movw $0x800, %cx + subw %di, %cx + + repz movsb + + /* modify the boot partition number */ + movb %es:1, %al + addb $5, %al /* AL is less than 0x80 */ + cbw /* AH=0 */ + xchgw %ax, %di /* move AX to DI */ + movb $0xff, %al /* partition=whole drive for floppy */ + testb %dl, %dl + jns 3f /* no modification for floppy */ + movb 0x1bc, %al /* partition number */ +3: + stosb + + /* fix for NTFS partition: on error go back to supervisor, offset 0x01fa */ + + movw $0x01fa, %di + movw %es:(%di), %ax + cmpw $0xFEEB, %ax /* EB FE is jmp back to itself(infinite loop) */ + jnz 3f + decw %ax /* AL=0xEA, ljmp */ + stosb + //movw $(try_next_partition - _start1), %ax + movw $MONITOR, %ax + stosw + + //movw %cs, %ax /* AX=0x9400 */ + xorw %ax, %ax + stosw /* DI=0x01ff */ +3: + clc + jmp move_entries_and_return + +#else + + /* modify the boot partition number */ + movb $0xB6, %al /* 0xB6="MOV DH,imm8" */ + movb %cs:0x1bc, %ah + testb %dl, %dl + js 3f + movb $0xff, %ah /* partition number for floppy is whole drive */ +3: + /* before the call: + * AH= partition number + * AL= 0xB6 ; 0xB6 is opcode of "MOV DH,imm8" + * DL= drive number + * + * on return: CF=0 if there is NTFS boot record; + * CF=1 otherwise. + * CF of flags_orig on the stack will set if CF=1 + */ + + call modify_NTFS_boot_record + //jnc move_entries_and_return + //movw $(NTFS5_message - _start1), %si + ////jmp 4f + //call print_message /* CS:SI points to message string */ + //stc + jmp move_entries_and_return + +#endif + +2: + /* FAT12/FAT16 */ + movb 0x10(%si), %al /* number of FATs(NTFS:0, FAT:1,2) */ + testb %al, %al + jz 1f + movw 0x16(%si), %ax /* sectors per FAT(small) */ + testw %ax, %ax + jz 1f + movw $(FAT16_message - _start1), %si + cmpw $12, %ax + ja 7f + movw $(FAT12_message - _start1), %si +7: + /* BUG fix for extended FAT12/16/32 partition */ + popw %di /* DI points to old entry in MBR */ + pushw %di + xorl %eax, %eax /* let hidden_sectors=0 for floppy */ + testb %dl, %dl + jns 3f /* floppy */ + movl %cs:4(%di), %eax + addl %cs:8(%di), %eax +3: + movl %eax, 0x1c /* adjust hidden_sectors for FAT */ + + call print_message /* CS:SI points to message string */ + pushw %cs + popw %ds + /* DS=SS=0x9400 */ + /* ES=FS_BOOT */ + movw %bx, %si + xorw %di, %di + lodsw + stosw + addw %cx, %si + addw %cx, %di + movw $0x0200, %cx + subw %di, %cx + repz movsb + /* modify the boot partition number */ + movb %es:1, %al + addb $5, %al /* AL is less than 0x80 */ + cbw /* AH=0 */ + xchgw %ax, %di /* move AX to DI */ + movb $0xff, %al /* partition=whole drive for floppy */ + testb %dl, %dl + jns 3f /* no modification for floppy */ + movb 0x1bc, %al /* partition number */ +3: + stosb + + /* fix for FAT12/16/32 partition: on error go back to supervisor, offset 0x01fa */ + //pushw %es + //popw %ds + movw $0x01fa, %di + //movw %di, %si + //lodsw + movw %es:(%di), %ax + cmpw $0xFEEB, %ax /* EB FE is jmp back to itself(infinite loop) */ + jnz 3f + decw %ax /* AL=0xEA, ljmp */ + stosb + //movw $(try_next_partition - _start1), %ax + movw $MONITOR, %ax + stosw + //movw %cs, %ax /* AX=0x9400 */ + xorw %ax, %ax + stosw /* DI=0x01ff */ +3: + + clc + jmp move_entries_and_return +1: + #; It is not FAT12/16/32/NTFS. Check for extended partition. + + /* DS=ES=FS_BOOT */ + + pushw %cs + popw %es + + /* ES=SS=0x9400 */ + /* DS=FS_BOOT */ + + popw %si + pushw %si + cmpb $0x05, %es:(%si) /* extended */ + je 1f + cmpb $0x0f, %es:(%si) /* Win95 extended (LBA) */ + je 1f + cmpb $0x15, %es:(%si) /* hidden extended */ + je 1f + cmpb $0x1f, %es:(%si) /* hidden win95 extended (LBA) */ + je 1f + cmpb $0x85, %es:(%si) /* Linux extended */ + je 1f + movw $(non_MS_message - _start1), %si +4: + call print_message /* CS:SI points to message string */ + stc + jmp move_entries_and_return +1: + /* extended partition entry */ + cmpw $0x1fe, %si + jb 1f + decw %es:0x1bc /* count the partitions in extended zone */ +1: + movw $(extended_message - _start1), %si + call print_message /* CS:SI points to message string */ + movw $0x1be, %si + movw $4, %cx +5: + //xorl %eax, %eax + //cmpl %eax, (%si) + //jnz 2f + movl (%si), %eax + cmpw 2(%si), %ax /* Is EAX high word equal to AX? */ + jnz 2f + cmpb %al, %ah /* Is AL=AH? */ + jnz 2f + + /* now all 4 bytes in EAX are equal to each other. */ + cmpl %eax, 4(%si) + jnz 2f + cmpl %eax, 8(%si) + jnz 2f + cmpl %eax, 12(%si) + jz 3f /* entry with 16 dups of a byte means empty entry */ +2: + movb (%si), %al + shlb $1, %al + jnz 1f + //jnz 3f /* invalid entry is treated as empty entry */ + movb 2(%si), %al + and $63, %al /* starting sector number */ + jz 1f + //jz 3f /* invalid entry is treated as empty entry */ + movb 6(%si), %al + and $63, %al /* ending sector number */ + jz 1f + //jz 3f /* invalid entry is treated as empty entry */ + movl 8(%si), %eax /* starting LBA */ + testl %eax, %eax + jz 1f + //jz 3f /* invalid entry is treated as empty entry */ + movl 12(%si), %eax /* total number of sectors in partition */ + testl %eax, %eax + jz 1f +3: + addw $16, %si + loop 5b + cmpw $0xaa55, (%si) + jnz 1f + + movw $0x1be, %si + movw $4, %cx + popw %bx /* the old SI points to extended partition ID in MBR */ + pushw %bx +5: +#if 1 + //xorl %eax, %eax + //cmpl %eax, (%si) + //jnz 2f + movl (%si), %eax + cmpw 2(%si), %ax /* Is EAX high word equal to AX? */ + jnz 2f + cmpb %al, %ah /* Is AL=AH? */ + jnz 2f + + /* now all 4 bytes in EAX are equal to each other. */ + cmpl %eax, 4(%si) + jnz 2f + cmpl %eax, 8(%si) + jnz 2f + cmpl %eax, 12(%si) + jz 3f /* entry with 16 dups of a byte means empty entry */ +2: + /* now it is an acceptable entry */ + movw %es:0x1ba, %di /* partition entries end */ + /* ensure our stack not to be overwritten by the partition entries */ + cmpw $0x83f0, %di + ja 3f /* try next */ + /* ensure our code not to be overwritten by the partition entries */ + cmpw $0x3fe, %di + jne 6f + /* more entries stores at 0x9be00-0x9c3ff */ + movw $0x7e00, %di + movw %di, %es:0x1ba +6: + addw $16, %es:0x1ba /* increment partition entries end */ + + lodsl + stosl + lodsl + stosl + + xchgw %ax, %dx /* save AL(the partition ID)to DL */ + + lodsl + xchgl %eax, %edx /* restore AL from DL(the partition ID) + * and save EAX to EDX */ + cmpb $0x05, %al + je 6f + cmpb $0x0f, %al + je 6f + cmpb $0x15, %al + je 6f + cmpb $0x1f, %al + je 6f + cmpb $0x85, %al + je 6f + /* normal partition, copied to 0x941fe-0x943fb */ + addl %es:4(%bx), %edx /* current partition start */ +6: + /* extended partition, copied to 0x941fe-0x943fb */ + xchgl %eax, %edx /* restore or update EAX from EDX */ + stosl + lodsl /* adjust SI only */ + movl %es:8(%bx), %eax /* parent partition start ... */ + stosl /* ... stored here */ + jmp 2f +3: + addw $16, %si +#endif + //. = 5b + 0x7c +2: + loop 5b + + /* extended partition is not a normal one, so set carry to try next */ + stc + jmp move_entries_and_return + +invalid_or_null: +1: + movw $(invalid_message - _start1), %si + call print_message /* CS:SI points to message string */ + stc + +move_entries_and_return: + popw %si + pushfw + pushw %cs + popw %ds + pushw %cs + popw %es + pushw %si + cmpw $0x202, %si + jne 1f + /* move entries backward 1 entry */ + movw $0x1fe, %di + movw $0x20e, %si + movw $0xf8, %cx /* 0x1f0 bytes = 0xf8 words */ + cld /* move upward */ + repz movsw + movw $0x3ee, %di + movw $0x7e00, %si + movw $0x8, %cx /* 0x10 bytes = 0x8 words */ + cld /* move upward */ + repz movsw + movw $0x7e00, %di + movw $0x7e10, %si + movw $0x2f8, %cx /* 0x5f0 bytes = 0x2f8 words */ + cld /* move upward */ + repz movsw + cmpw $0x7e10, 0x1ba + jne 2f + movw $0x40e, 0x1ba +2: + subw $0x10, 0x1ba + +1: + popw %si + movw $0x1ff, (add_sub_si + 5 - _start1) + cmpw $0x1fe, 0x1ba + jne 1f + decw (add_sub_si + 5 - _start1) + cmpw $0x31b2, %si /* floppy? */ + je 1f /* yes */ + cmpw $0x1f2, %si + ja 2f /* logical partition */ + jb 1f /* primary partition 0, 1, 2 */ + /* primary partition 3 */ + cmpw $0x0003, 0x1bc /* are there any logical partitions? */ + ja 1f /* yes */ +2: +inc_hard_drive: + + /* all partitions on the drive have been checked, try next drive. + * + * the current stack is: + * + * SP + 38 : DS + * SP + 36 : ES + * SP + 32 : EAX + * SP + 28 : ECX + * SP + 24 : EDX + * SP + 20 : EBX + * SP + 16 : ESP_temp + * SP + 12 : EBP + * SP + 8 : ESI + * SP + 4 : EDI + * SP + 2 : flags_orig + * SP : flags + * + */ + + /* get total hard drives */ + xorw %ax, %ax + movw %ax, %ds + movb 0x475, %dh + pushw %cs + popw %ds +// cmpb $16, %dh +// jnb 2f +// movb $16, %dh +//2: + orb $0x80, %dh /* CF=0, DH=Max harddrive number + 1 */ + //xchgw %ax, %cx /* CL=Max harddrive number + 1, CH=0 */ + movw %sp, %bp + movb 24(%bp), %dl /* BIOS drive number is in DL */ +2: + jnc 3f + call print_message /* CS:SI points to message string */ + movw $(drive_number_string - _start1), %si + movb %dl, %al + andb $0x7f, %al + aam /* AH=high decimal, AL=low decimal */ + addw $0x3030, %ax + xchgb %al, %ah + movw %ax, 9(%si) + call print_message /* CS:SI points to message string */ +3: + incw %dx + cmpb %dh, %dl + jnb 2f /* all drives checked, try floppy finally */ + + pushw %bx + pushw %dx + pushw %es + movb $8, %ah /* read drive parameters changes DX, ES, DI */ + int $0x13 + popw %es + jc 3f /* try next hard drive */ + //xchgw %ax, %cx /* this moves CL to AL */ + andb $63, %cl /* CL=sectors per track, CF cleared */ + stc + jz 3f /* try next hard drive */ + popw %dx /* get DL */ + popw %bx + movb %dl, %ch /* DL saved at BP high byte in the stack */ + pushw %cx /* push new BX onto stack */ + pushw %dx + //movb $0x02, %ah + //movw %ax, %si /* save AX to SI: read 1 track */ + movw $0x201, %ax /* read 1 sector */ + movw $0x7e00, %bx /* read MBR to 9400:7e00 */ + movw $1, %cx + //popw %dx + //pushw %dx + xorb %dh, %dh + stc + int $0x13 + sti +3: + popw %dx + popw %bx /* BL=sectors per track, BH=DL */ + + //movw %si, %bx /* BL=sectors per track */ + + movw $(Error_while_reading_string - _start1), %si + jc 2b /* read failure, try next hard drive */ + + /* on seccessful return, should be: ah=0 for OK, al=1 for 1 sector */ + //decw %ax /* some BIOSes return incorrect AL */ + testb %ah, %ah + stc + jnz 2b + + /* The new partition table might be empty or invalid. + * Move the new partition table onto the old one while checking + */ + + //movb %dl, %bh /* DL saved at BP high byte in the stack */ + + movw $0x7fbe, %si + movw $0x01be, %di + +3: + cmpw $0x1fe, %di + jnb 3f + + xorl %ecx, %ecx + + lodsl + stosl + orl %eax, %ecx + lodsl + stosl + orl %eax, %ecx + lodsl + stosl + orl %eax, %ecx + lodsl + stosl + orl %eax, %ecx + jecxz 3b /* null entry, check next */ + + //lodsw + //stosw + movb -16(%si), %al + shlb $1, %al + stc + xchgw %ax, %si /* save SI to AX */ + movw $(partition_boot_indicator_string - _start1), %si + jnz 2b + xchgw %ax, %si /* restore SI from AX */ + //lodsw + //stosw + movb -14(%si), %al + andb $63, %al + stc + xchgw %ax, %si /* save SI to AX */ + movw $(partition_sectors_per_track_string - _start1), %si + jz 2b + xchgw %ax, %si /* restore SI from AX */ + //lodsw + //stosw + //lodsw + //stosw + movb -10(%si), %al + andb $63, %al + stc + xchgw %ax, %si /* save SI to AX */ + movw $(partition_sectors_per_track_string - _start1), %si + jz 2b + xchgw %ax, %si /* restore SI from AX */ + //lodsl + //stosl + movl -8(%si), %eax + testl %eax, %eax + stc + xchgw %ax, %si /* save SI to AX */ + movw $(partition_start_sector_string - _start1), %si + jz 2b + xchgw %ax, %si /* restore SI from AX */ + + //lodsl + //stosl + movl -4(%si), %eax + testl %eax, %eax + stc + xchgw %ax, %si /* save SI to AX */ + movw $(partition_end_sector_string - _start1), %si + jz 2b + xchgw %ax, %si /* restore SI from AX */ + + jmp 3b +3: + cmpw $0xAA55, (%si) + stc + xchgw %ax, %si /* save SI to AX */ + movw $(no_boot_signature_string - _start1), %si + jnz 2b + xchgw %ax, %si /* restore SI from AX */ + //lodsw + //stosw /* store boot signature */ + + /* Now the partition table is OK */ + + movw %bx, 12(%bp) /* adjust BP in the stack */ + + movw $0x1b2, 8(%bp) /* adjust SI in the stack */ + + /* temp change the code: call self_modify_once + * + * "call self_modify_once" at add_sub_si is: + * + * .byte 0xE8 + * .word (self_modify_once - add_sub_si - 3) + * + */ + movb $0xE8, (add_sub_si - _start1) + movw $(self_modify_once - add_sub_si - 3), (add_sub_si + 1 - _start1) + + /* initialize partition number and partition entries end */ + movw $0xffff, 0x1bc /* hd partition number */ + movw $0x01fe, 0x1ba /* partition entries end */ + + jmp 1f +2: + /* get here if all drives have been checked */ +#if 0 + movw $0x202, 8(%bp) /* adjust SI in the stack */ + + /* restore the original code: addw $-4, %si */ + movw $0xC683, (add_sub_si - _start1) /* 0x83, 0xC6 */ + movb $0xFC, (add_sub_si + 2 - _start1) /* 0xFC */ +#endif + //-------------------------------------------------------------------- + /* change the code: jmp Error_modify + * + * "jmp Error_modify" at Error_or_prev_MBR: + * + * .byte 0xE9 + * .word (Error_modify - Error_or_prev_MBR - 3) + * + */ + movb $0xE9, (Error_or_prev_MBR - _start1) + movw $(Error_modify - Error_or_prev_MBR - 3), (Error_or_prev_MBR + 1 - _start1) + //-------------------------------------------------------------------- + + //-------------------------------------------------------------------- + /* floppy search disabled ? */ +#if 0 + testb $1, 0x02 /* test bit0 of the third byte */ + jz 1f /* zero means floppy search enabled */ + /* 0x1fd or below means disable floppy search */ + decw (add_sub_si + 5 - _start1) +#else + movb 0x02, %al + andb $0x01, %al + subb %al, (add_sub_si + 5 - _start1) +#endif + //-------------------------------------------------------------------- + +1: +#if 0 + popfw + lahf /* Load Flags into AH Register. */ + /* AH = SF:ZF:xx:AF:xx:PF:xx:CF */ + /* CF will be moved to ZF */ + movb %ah, %al + andb $1, %al /* CF=0 */ + shlb $6, %al /* move CF to ZF */ + popfw + lahf /* Load Flags into AH Register. */ + /* AH = SF:ZF:xx:AF:xx:PF:xx:CF */ + andb $0xbf, %ah /* 0xbf= binary 1011 1111. It clears ZF */ + orb %al, %ah +#else + popw %ax /* AX=Flags */ + popfw /* Flags_orig */ + lahf /* Load Flags_orig into AH Register. */ + /* AH = SF:ZF:xx:AF:xx:PF:xx:CF */ + shlb $2, %ah + rorw $2, %ax /* move CF of Flags to ZF of Flags_orig */ +#endif + + sahf /* update flags */ + /* current CF is the CF of Flags_orig */ + /* current ZF is the CF of Flags */ + jc 1f /* CF=1 means failed in loading bootsector */ + popal /* get drive number DL */ + pushal + pushfw + cmpb $0xff, %cs:0x06 + jz 2f + movb %cs:0x1bc, %dh + testb %dl, %dl + js 3f + movb $0xff, %dh /* partition # for floppy is "whole drive" */ +3: + cmpw %cs:0x06, %dx + jz 2f + popfw + stc + pushfw +2: + popfw +1: + popal + popw %es + popw %ds + ret + +self_modify_once: + /* when we get here, SI should be 0x1b2, and BP high holds DL */ + addw $12, %si /* 0x83, 0xC6, 0x0C */ + movw %bp, %ax + movb %ah, %dl + + /* note: DS=0x9400 */ + + /* restore the original code: addw $12, %si */ + movw $0xC683, (add_sub_si - _start1) /* 0x83, 0xC6 */ + movb $0x0C, (add_sub_si + 2 - _start1) /* 0x0C */ + ret + +Error_modify: + cmpb $0xff, %cs:0x06 /* preferred drive? */ + jz 1f /* not active. Turn to the final step. */ + + /* preferred drive is already handled, so de-activate it now. */ + movb $0xff, %cs:0x06 + + /* we will do the second pass, from drive 0x80. */ + movb $0x7f, %dl /* this will become 0x80 after inc. */ + + /* pass "error" to PUSHF, simulating a load failure, in order + * to try the first entry after return from the helper function. + */ + + stc + + pushw $(helper_call + 3 - _start1) /* return address */ + pushw %cs /* 0x9400, it is for DS. */ + pushw $FS_BOOT /* 0x0d00, it is for ES. */ + pushal + //pushl %eax + //pushl %ecx + //pushl %edx + //pushl %ebx + //pushl %esp + //pushl %ebp + //pushl %esi + //pushl %edi + pushfw /* CF=1 */ + pushfw + + pushw %cs + popw %es /* ES=0x9400 */ + + /* redo from start: DL will be 0x80 after inc. */ + jmp inc_hard_drive +1: +boot_prev_mbr: + + /* prepare to boot the previous MBR */ + + /* at this moment DS=0x9400, ES=$FS_BOOT or ES=0x9400 */ + xorw %ax, %ax + //pushw %ax /* AX=0, for the segment of 0000:7c00 */ + movw %ax, %es /* ES=0x0000 */ + movw %ax, %ds /* DS=0x0000 */ + pushw %ds + pushw %es + movw $0x0202, %ax /* read 2 sectors ... */ + movw $0x7A00, %bx /* ... to 0000:7A00 */ + //pushw %bx /* BX=0x7c00, for the offset of 0000:7c00 */ + movw $0x0001, %cx /* from the first sector ... */ + movw $0x0080, %dx /* ... of the first hard drive */ + stc + int $0x13 + sti + popw %es + popw %ds + jc 1f + testb %ah, %ah + jnz 1f + cmpw $0xAA55, 0x7dfe + jne 1f + cmpw $0xAA55, 0x7bfe + jne 1f + + /* has a valid partition table ? */ + movw $0x7dbe, %si +3: + cmpw $0x7dfe, %si + jnb 3f /* partition table is OK */ + movw $4, %cx + + movw %si, %di +2: + lodsl + negl %eax + jc 2f + loop 2b + /* empty entry, check next */ + jmp 3b +2: + /* non-empty entry */ + movw %di, %si + + lodsw + shlb $1, %al + jnz 2f + lodsw + andb $63, %al + jz 2f + lodsw + lodsw + andb $63, %al + jz 2f + lodsl + negl %eax + jnc 2f + lodsl + negl %eax + jc 3b +2: + stc /* invalid partition table */ +3: + pushfw + + /* disable the boot of non-MBR bootsector ? */ + testb $2, %cs:0x02 /* test bit1 of the third byte */ + jz 2f /* zero means non-MBR enabled */ + popfw + jc 1f /* invalid partition table, print "Error" */ + + /* the partition table is valid */ + pushfw + +2: + /* the check passed, and the boot is permitted */ + popfw + + jc 2f /* invalid partition table */ + + /* use partition table in MBR instead */ + + /* copy 72 bytes at 0000:7bb8 to 0000:7db8 */ + + movw $0x7bb8, %si + movw $0x7db8, %di + movw $36, %cx + cld + repz movsw + +2: + testb $0x80, %cs:0x02 /* test bit 7 of the third byte */ + jz 2f /* zero means boot prev-MBR first */ + + movw $(Cannot_find_GRLDR_string - _start1), %si + call print_message /* CS:SI points to message string */ +//#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + movw $(press_space_bar_string - _start1), %si + cmpw $0x3920, %cs:0x04 + je 3f + movw $0x3920, %cs:0x04 + #;movw $(press_hot_key_string - _start1), %si +3: + call print_message /* CS:SI points to message string */ + movw $(prev_MBR_string - _start1), %si + call print_message /* CS:SI points to message string */ +//#else +// movw $(press_hot_key_pre - _start1), %si +// call print_message +// movw $(press_hot_key_name - _start1), %si +// call print_message +// movw $(press_hot_key_sub - _start1), %si +// call print_message +//#endif +3: + call sleep_5_seconds + /* if hot-key is pressed, wait forever until another key is pressed. */ + movb $0xff, %cs:0x03 + jc 3b /* desired hot-key is pressed */ +2: + /* boot the previous MBR */ + + /* clear the DUCE indicator */ + movl $0, 0x5FC /* DS=ES=0 */ + + //movb $0x80, %dl + ljmp $0, $0x7c00 +1: + /* no previous MBR, print "Error" */ + ///* Note the 0000:7C00 is on the stack */ + //popw %ax /* AX=0x0000 */ + //popw %ax /* AX=0x7C00 */ + + testb $0x80, %cs:0x02 /* are we called prior to the GRLDR search? */ + jnz 1f /* no, it is a failure at last */ + /* yes, so return to the caller */ + movw $(continue_string - _start1), %si + call print_message /* CS:SI points to message string */ + call sleep_5_seconds + ret +1: + movw $(message_string_helper - _start1), %si + call print_message /* CS:SI points to message string */ +1: jmp 1b /* hang */ + +sleep_5_seconds: + /* sleep 5 seconds */ + + /* sleep forever if %cs:0x03 is 0xff */ + + /* calculate the timeout ticks */ + + pushw %ds + pushl %esi + pushl %edx + + movl $0xffffffff, %edx + movzbl %cs:0x03, %eax + cmpb $0xff, %al + je 1f + movl $18, %edx /* 18.2 ticks per second. We simply use 18. */ + mulw %dx /* EDX=0, EAX=ticks */ + xchgw %ax, %dx /* EAX=0, EDX=ticks */ +1: + xorw %ax, %ax + movw %ax, %ds + movl 0x46c, %eax /* initial tick */ + movl %eax, %ecx /* ECX=initial tick */ + testl %edx, %edx + js 1f + addl %edx, %eax /* EAX=timeout tick */ + pushl %eax + + movzbl %cs:0x03, %eax + orl %eax, %eax + jz 3f + + movw $(hot_key_timeout_pre - _start1), %si + pushl %eax + call print_message + popl %eax + + movw $(hot_key_timeout_num - _start1), %si + call print_decimal +3: + movl %ecx, %esi + addl $18, %esi + + popl %eax + jmp 3f +1: + movl %edx, %eax /* EAX=0xffffffff */ + movl %edx, %esi +3: + movl 0x46c, %ebx /* EBX=current tick */ + cmpl %ecx, %ebx + jnb 2f + + /* current tick is less than initial tick, this means the ticks have + * overflowed to the next day, and EBX is rather small. */ + xorl %ecx, %ecx + movl %edx, %eax + movl $18, %esi +2: + /* check if there is any key press. */ + pushl %eax + movb $1, %ah + int $0x16 + pushw %ax + pushfw + + movb $0x11, %ah + int $0x16 + jnz 1f + popfw + jnz 2f + + /* no, there is no key press. */ + + popw %ax + popl %eax + + cmpl %esi, %ebx + jb 4f + pushl %esi + pushl %eax + pushl %edx + + + subl %esi, %eax + xorl %edx, %edx + movl $18, %esi + divl %esi + + movw $(hot_key_timeout_num - _start1), %si + pushl %ebx + call print_decimal + popl %ebx + + popl %edx + popl %eax + popl %esi + addl $18, %esi +4: + cmpl %eax, %ebx /* timeout? */ + jbe 3b /* no, continue to wait */ + + /* timeout reached, CF=0, no key pressed. */ + popl %edx + popl %esi + popw %ds + ret +1: + popfw +2: + /* yes, there is a key press. */ +#if 0 + /* clear the keyboard buffer */ + movb $1, %ah + int $0x16 + jz 1f /* no keys, end */ + movb $0, %ah + int $0x16 /* discard the key */ + jmp 1b +1: +#endif + + /* check if it is the desired key. */ + + xorw %cs:0x04, %ax /* CF=0 */ + popw %ax + je 1f + xorw %cs:0x04, %ax /* CF=0 */ + jne 2f /* not desired, return CF=0 */ + + /* remove the desired key from the keyboard buffer. */ + + movb $0, %ah + int $0x16 /* discard the key */ + jmp 3f +1: + /* remove the desired key from the keyboard buffer. */ + + movb $0x10, %ah + int $0x16 /* discard the key */ +3: + stc /* CF=1, the desired key pressed */ +2: + popl %eax + popl %edx + popl %esi + popw %ds + ret + +out_decimal: + /* + * input: EAX = number, CS:SI = buffer + */ + + pushl %edx + pushl %ecx + pushw %bx + + movl $10, %ecx + movw %si, %bx + +1: + xorl %edx, %edx + divl %ecx + addb $'0', %dl + movb %dl, %cs:(%si) + incw %si + orl %eax, %eax + jnz 1b + + pushw %si + +1: + decw %si + cmpw %bx, %si + jbe 1f + movb %cs:(%si), %al + xchgb %al, %cs:(%bx) + movb %al, %cs:(%si) + incw %bx + jmp 1b +1: + + popw %si + + popw %bx + popl %ecx + popl %edx + ret + +print_decimal: + pushw %si + call out_decimal + +1: + cmpb $'\b', %cs:(%si) + jz 2f + movb $' ', %cs:(%si) + incw %si + jmp 1b +2: + popw %si + call print_message + ret + +#if 0 +modify_NTFS_boot_record: + + /* before the call: + * AH= partition number + * AL= 0xB6 ; 0xB6 is opcode of "MOV DH,imm8" + * DL= drive number + * + * on return: CF=0 if there is NTFS boot record; + * CF=1 otherwise. + * CF of flags_orig on the stack will set if CF=1 + */ + + /* + * + * the current stack is: + * + * SP + 40 : DS + * SP + 38 : ES + * SP + 34 : EAX + * SP + 30 : ECX + * SP + 26 : EDX + * SP + 22 : EBX + * SP + 18 : ESP_temp + * SP + 14 : EBP + * SP + 10 : ESI + * SP + 6 : EDI + * SP + 4 : flags_orig + * SP + 2 : SI ; SI points to old entry in MBR + * SP : return_IP + * + */ + + /* DS=ES=FS_BOOT */ + + /* change NTLDR to GRLDR */ + + /* check GR or NT or anything else */ + + pushw %ax + + movw $0x200, %si + lodsw + cmpw $5, %ax + jne 1f /* failure */ + lodsw + testb %ah, %ah /* high byte of unicode ASCII should be 0 */ + jne 1f /* failure */ + + /* 'N' should be a capital letter */ + + cmpb $0x41, %al /* Less than 'A' */ + jb 1f /* failure */ + cmpb $0x5A, %al /* Greater than 'Z'*/ + ja 1f /* failure */ + + xchgw %ax, %cx /* save AX to CX. CL='N' */ + + lodsw + testb %ah, %ah /* high byte of unicode ASCII should be 0 */ + jne 1f /* failure */ + + /* 'T' should be a capital letter */ + + cmpb $0x41, %al /* Less than 'A' */ + jb 1f /* failure */ + cmpb $0x5A, %al /* Greater than 'Z'*/ + ja 1f /* failure */ + + movb %al, %ch /* save AL to CH. CH='T' */ + + lodsw + cmpw $0x4C, %ax /* 'L' */ + jne 1f /* failure */ + lodsw + cmpw $0x44, %ax /* 'D' */ + jne 1f /* failure */ + lodsw + cmpw $0x52, %ax /* 'R' */ + jne 1f /* failure */ + lodsw + cmpw $0x04, %ax /* length of "$I30" */ + jne 1f /* failure */ + lodsw + cmpw $0x24, %ax /* '$' */ + jne 1f /* failure */ + lodsw + cmpw $0x49, %ax /* 'I' */ + jne 1f /* failure */ + lodsw + cmpw $0x33, %ax /* '3' */ + jne 1f /* failure */ + lodsw + cmpw $0x30, %ax /* '0' */ + jne 1f /* failure */ + + + /* assume it is NT bootsector. first, find "NTLDR". CX holds "NT" */ + movw $0x0100, %di + movb %cl, %al /* AL="N" */ + movb $1, %ah /* AH=Carry for SAHF below */ + movl $0x52444c00, %ebx /* "LDR" */ + movb %ch, %bl /* 'T' */ + movw $0x00fa, %cx + + /* now AL holds 'N' and BL holds 'T' */ + + //cld /* already upward */ +3: + repnz scasb /* find "N" */ + jcxz 4f /* gets the end, exit */ + cmpl %ebx, (%di) /* is it "NTLDR"? */ + jnz 3b /* no, continue to find */ + + /* "NTLDR" is found, so we believe it is NT boot sector. */ + + movw $0x5247, -1(%di) /* change "NT" to "GR" */ + + /* CF=0 for now */ + + lahf /* Load Flags into AH */ + /* AH = SF:ZF:xx:AF:xx:PF:xx:CF */ + /* AH = binary xxxxxxx0 */ + jmp 3b +4: + sahf /* Store AH into flags SF ZF xx AF xx PF xx CF */ + + /* CF=0 means "NTLDR" is found, CF=1 means "NTLDR" is not found. */ + + jc 1f /* failure */ + + movl $0x00520047, 0x202 /* change to "G R L D R" */ + + /* check NT 4.0 */ + + movw $0x406, %si + movl (%si), %ebx /* NT 4.0 */ + cmpl $0x03E8B800, %ebx /* MOV AX, 03E8 */ + jnz 3f + + movl 0x84, %ebx + cmpl $0x680007E8, %ebx /* call 008e; push (0D00) */ + jnz 3f + +// movw 0x154, %bx /* CR LF at end of "A disk read error occurred." */ +// cmpw $0x0A0D, %bx /* CR LF */ +// jnz 3f +// movw 0x180, %bx /* CR LF at end of "A kernel file is missing from the disk." */ +// cmpw $0x0A0D, %bx /* CR LF */ +// jnz 3f +// movw 0x1A8, %bx /* CR LF at end of "A kernel file is too discontiguous." */ +// cmpw $0x0A0D, %bx /* CR LF */ +// jnz 3f +// movw 0x1F8, %bx /* CR LF at end of "NTLDR is compressed." */ +// cmpw $0x0A0D, %bx /* CR LF */ +// jnz 3f + + movl 0xE8, %ebx + cmpl $0x13CD80B2, %ebx /* "B2 80"="mov DL, 80", "CD 13"="int 13" */ + jnz 3f + + popw %ax + movw %ax, 4(%si) + + movl $0x68909090, %ebx /* nop;nop;nop;push (0D00) */ + movl %ebx, 0x84 + +// /* change CRLF in NTFS error messages to spaces */ +// movw $0x2020, %bx /* change CRLF to 2 spaces */ +// movw %bx, 0x154 +// movw %bx, 0x180 +// movw %bx, 0x1A8 +// movw %bx, 0x1F8 + + movb %dl, 0xE9 /* modify drive number */ + + /* modify NTFS boot record */ + movb $0xea, %al /* ljmp, hand over the control to supervisor */ + movb %al, 0x122 + //movw $(try_next_partition - _start1), %ax /* offset for ljmp */ + movw $MONITOR, %ax /* offset for ljmp */ + movw %ax, 0x123 + //movw %cs, %ax /* AX=0x9400, segment for ljmp */ + xorw %ax, %ax + movw %ax, 0x125 + + movw $(NTFS4_message - _start1), %si + call print_message /* CS:SI points to message string */ + clc + ret +3: + /* check NT 5.0 */ + + movw $0x44b, %si + movl (%si), %ebx /* NT 5.0 */ + cmpl $0x03E8B800, %ebx /* MOV AX, 03E8 */ + jz 2f + + movw $0x479, %si + movl (%si), %ebx /* NT 5.1 SP2 */ + cmpl $0x03E8B800, %ebx /* MOV AX, 03E8 */ + jnz 1f +2: + movl 0x71, %ebx + cmpl $0x680053E8, %ebx /* call 00C7; push (0D00) */ + jnz 1f + + //movw 0x183, %bx /* CR LF at begin of "A disk read error occurred." */ + movb 0x1F8, %bl + movb $1, %bh + movw (%bx), %bx + cmpw $0x0A0D, %bx /* CR LF */ + jnz 1f + //movw 0x1A0, %bx /* CR LF at begin of "NTLDR is missing." */ + movb 0x1F9, %bl + movb $1, %bh + movw (%bx), %bx + cmpw $0x0A0D, %bx /* CR LF */ + jnz 1f + //movw 0x1B3, %bx /* CR LF at begin of "NTLDR is compressed." */ + movb 0x1FA, %bl + movb $1, %bh + movw (%bx), %bx + cmpw $0x0A0D, %bx /* CR LF */ + jnz 1f + + popw %ax + movw %ax, 4(%si) + + movl $0x68909090, %ebx /* nop;nop;nop;push (0D00) */ + movl %ebx, 0x71 + + /* change CRLF in NTFS error messages to spaces */ + movw $0x2020, %ax + movb 0x1F8, %bl + movb $1, %bh + movw %ax, (%bx) // 0x183 + movb 0x1F9, %bl + movb $1, %bh + movw %ax, (%bx) // 0x1A0 + movb 0x1FA, %bl + movb $1, %bh + movw %ax, (%bx) // 0x1B3 + + /* modify NTFS boot record */ + movb $0xEA, %al /* ljmp, hand over the control to supervisor */ + movb %al, 0x167 + //movw $(try_next_partition - _start1), %ax /* offset for ljmp */ + movw $MONITOR, %ax /* offset for ljmp */ + movw %ax, 0x168 + //movw %cs, %ax /* AX=0x9400, segment for ljmp */ + xorw %ax, %ax + movw %ax, 0x16A + + cmpw $0x44b, %si + jne 2f + movw $(NTFS5_message - _start1), %si + jmp 3f +2: + movw $(NTFS5p_message - _start1), %si +3: + call print_message /* CS:SI points to message string */ + clc + ret +1: + /* NTFS boot record not found. */ + + movw $(NTFS_no_boot_record_message - _start1), %si + call print_message /* CS:SI points to message string */ + + popw %ax + popl %eax /* return_IP and SI */ + popfw + stc + pushfw + pushl %eax /* return_IP and SI */ + ret +#endif + +//#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) +move_helper: + + /* called only once and only when the boot loader loaded this code */ + pushw %si + pushw %bx + pushl %eax + + movw $0x0003, %ax /* set display mode: 80*25 color text */ + int $0x10 + + movw $0x200, %si + movw %si, %di + movw $0xf00, %cx + cld + repz movsw + + popl %eax + popw %bx + popw %si + ret +//#endif + +#if (defined(GRLDR_MBR)) || (defined(GRLDR_INSTALL)) +filesystem_boot: + /* The partition boot record successfully modified, just boot it */ + + /* + * The boot might fail, but we want to take back the control. + * So we save the registers now. + */ + pushw %ds + pushw %es + pushal + + /* DS=CS=GRLDR_CS, ES=FS_BOOT */ + + /* save GRLDR_CS */ + + movw %es, %bx # save old ES to BX + + cli + lgdt gdt - _start1 + movl %cr0, %eax + orb $1, %al + movl %eax, %cr0 + + movw $8, %si + movw %si, %es + + xorl %esi, %esi + xorl %edi, %edi + movl $(0x9000 / 4), %ecx + + cld + repz movsl + + movw $16, %si + movw %si, %es + + andb $0xfe, %al + movl %eax, %cr0 + + movw %bx, %es # restore ES from BX + + /* move FS_BOOT:0000 to 0:7c00 */ +#if 0 + /* for single sector boot record */ + movw $0x0200, %cx /* move 2 sectors, the old FS_BOOT:0000 will + * keep untouched. */ +#else + /* for 4-sector NTFS boot record */ + movw $0x0400, %cx /* move 4 sectors, the old FS_BOOT:0000 will + * keep untouched. */ +#endif + xorw %si, %si + pushw %si /* SI=0, for the segment of 0000:7c00 */ + movw $0x7c00, %di + pushw %di /* DI=0x7c00, for the offset of 0000:7c00 */ + pushw %es /* ES=FS_BOOT */ + popw %ds /* DS=FS_BOOT */ + pushw %si /* SI=0 */ + popw %es /* ES=0 */ + cld + repz movsw + + movw $MONITOR, %di + movw $(restore_GRLDR_CS - _start1), %si + movw $((gdt_end - restore_GRLDR_CS) / 4), %cx + cld + repz cs movsl /* CS segment override prefix(=0x2E) */ + + pushw %es /* ES=0 */ + popw %ds /* DS=0 */ + sti + lret //ljmp $0, $0x7c00 +#endif + +press_space_bar_string: + .ascii "\r\nPress space bar\0" + +press_hot_key_pre: + .ascii "\r\nPress \0" + +press_hot_key_sub: + .ascii " to start GRUB, any other key to boot previous MBR ...\0" + +hot_key_timeout_pre: + .ascii "\r\nTimeout : \0" + +hot_key_timeout_num: + .ascii " \b\b\b\0" + +continue_string: + .ascii "\r\nInvalid previous MBR. Press any key to start GRUB ...\0" + +Cannot_find_GRLDR_string: + .ascii "\r\nCannot find GRLDR.\0" + +prev_MBR_string: + .ascii " to hold the screen, any other key to boot previous MBR ...\0" + +Error_while_reading_string: + .ascii "\r\nError while reading MBR of \0" + +drive_number_string: + .ascii "drive (hd0 ) \0" + +partition_boot_indicator_string: + .ascii "\r\nInvalid boot indicator in partition table of \0" + +partition_sectors_per_track_string: + .ascii "\r\nInvalid sectors_per_track in partition table of \0" + +partition_start_sector_string: + .ascii "\r\nInvalid start_sector in partition table of \0" + +partition_end_sector_string: + .ascii "\r\nInvalid end_sector in partition table of \0" + +no_boot_signature_string: + .ascii "\r\nNo boot signature in partition table of \0" + +message_string_helper: + .ascii "\r\nError: Cannot find GRLDR in all devices. Press Ctrl+Alt+Del to restart.\0" + +partition_message: + .ascii "\r\nTry (hd0,0 ) : \0" + +EXT2_message: + .ascii "EXT2: \0" +NTFS4_message: + .ascii "NTFS4: \0" +NTFS5_message: + .ascii "NTFS5: \0" +NTFS5p_message: + .ascii "NTFS5p: \0" +FAT32_message: + .ascii "FAT32: \0" +FAT16_message: + .ascii "FAT16: \0" +FAT12_message: + .ascii "FAT12: \0" +non_MS_message: + .ascii "non-MS: skip \0" +extended_message: + .ascii "Extended: \0" +invalid_message: + .ascii "invalid or null \0" +#if 0 +NTFS_no_boot_record_message: + .ascii "This partition is NTFS but with unknown boot record. Please\r\ninstall Microsoft NTFS boot sectors to this partition correctly, or create an\r\nFAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.\0" +#endif + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + . = _start1 + 0x1ffa +#else + . = . + (0x3ec - ((. - _start1) % 0x200)) % 0x200 + +press_hot_key_name: + + /* hot key name, the address is (grldr_signature - 16) */ + + .ascii "hot-key\0" + + . = press_hot_key_name + 14 + + //. = . + (0x3fa - ((. - _start1) % 0x200)) % 0x200 +#endif + + /* version word of grldr.mbr, the address is (grldr_signature - 2) */ + + .word 2 + +grldr_signature: + .byte 0x47, 0x52, 0x55, 0xaa /* signature for helper */ + + .align 0x200 + +#if (! defined(GRLDR_MBR)) && (! defined(GRLDR_INSTALL)) + + /* pre_stage2 start at 0x2000 for grldr */ + + . = _start1 + 0x2000 + +#endif + +#if defined(GRLDR_MBR) + /* if the size is less than 8192, let it be 8192 */ + . = . + (0x2000 - (. - _start1)) * (0x4000 / (. - _start1 + 0x2001)) +#endif + +pre_stage2_start: + + --- grub2-1.99.orig/debian/grub-extras/915resolution/915resolution.c +++ grub2-1.99/debian/grub-extras/915resolution/915resolution.c @@ -0,0 +1,978 @@ +/* 915resolution - Utility to change vbemodes on the intel + * integrated video chipset */ + +/* + * Based on Nathan Coulson's http://nathancoulson.com/proj/eee/grub-1.96-915resolution-0.5.2-3.patch + * Oct 10, 2008, Released as 915 + * Oct 10, 2008, Updated to include support for 945GM thanks to Scot Doyle + */ + +/* Copied from 915 resolution created by steve tomjenovic + * 915 resolution was in the public domain. + * + * All I have done, was make the above program run within + * the grub2 environment. + * + * Some of the checks are still commented, as I did not find + * easy replacement for memmem. + * + * Slightly edited by Nathan Coulson (conathan@gmail.com) + */ + +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003,2007 Free Software Foundation, Inc. + * Copyright (C) 2003 NIIBE Yutaka + * + * GRUB 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 3 of the License, or + * (at your option) any later version. + * + * GRUB 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 GRUB. If not, see . + */ + + +/* 915 resolution by steve tomljenovic + * + * This was tested only on Sony VGN-FS550. Use at your own risk + * + * This code is based on the techniques used in : + * + * - 855patch. Many thanks to Christian Zietz (czietz gmx net) + * for demonstrating how to shadow the VBIOS into system RAM + * and then modify it. + * + * - 1280patch by Andrew Tipton (andrewtipton null li). + * + * - 855resolution by Alain Poirier + * + * This source code is into the public domain. + */ + +#include +#include +#include +#include +#include +#include +#include + +GRUB_MOD_LICENSE ("GPLv3+"); + +#define printf grub_printf +#define malloc grub_malloc +#define free grub_free +#define strcmp grub_strcmp +#define fprintf(stream,template,args...) grub_printf(template, ## args) +#define strtol(x,y,z) grub_strtoul(x,y,z) +#define atoi(x) grub_strtoul(x,NULL,10) +#define assert(x) +#define memset grub_memset +#define outl grub_outl +#define outb grub_outb +#define inl grub_inl +#define inb grub_inb + +#define NEW(a) ((a *)(malloc(sizeof(a)))) +#define FREE(a) (free(a)) + +#define VBIOS_START 0xc0000 +#define VBIOS_SIZE 0x10000 + +#define VBIOS_FILE "/dev/mem" + +#define FALSE 0 +#define TRUE 1 + +#define MODE_TABLE_OFFSET_845G 617 + +#define RES915_VERSION "0.5.3" + +#define ATI_SIGNATURE1 "ATI MOBILITY RADEON" +#define ATI_SIGNATURE2 "ATI Technologies Inc" +#define NVIDIA_SIGNATURE "NVIDIA Corp" +#define INTEL_SIGNATURE "Intel Corp" + +#define DEBUG 0 + +typedef unsigned char * address; +typedef unsigned char byte; +typedef unsigned short word; +typedef unsigned char boolean; +typedef unsigned int cardinal; + +typedef enum { + CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM, CT_945GME, + CT_946GZ, CT_G965, CT_Q965, CT_965GM, CT_G33, CT_Q33, CT_Q35, CT_500GMA +} chipset_type; + +char * chipset_type_names[] = { + "UNKNOWN", "830", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM", "945GME", + "946GZ", "G965", "Q965", "965GM", "G33", "Q33", "Q35", "500GMA" +}; + +typedef enum { + BT_UNKWN, BT_1, BT_2, BT_3 +} bios_type; + +char * bios_type_names[] = {"UNKNOWN", "TYPE 1", "TYPE 2", "TYPE 3"}; + +int freqs[] = { 60, 75, 85 }; + +typedef struct { + byte mode; + byte bits_per_pixel; + word resolution; + byte unknown; +} __attribute__((packed)) vbios_mode; + +typedef struct { + byte unknow1[2]; + byte x1; + byte x_total; + byte x2; + byte y1; + byte y_total; + byte y2; +} __attribute__((packed)) vbios_resolution_type1; + +typedef struct { + unsigned long clock; + + word x1; + word htotal; + word x2; + word hblank; + word hsyncstart; + word hsyncend; + + word y1; + word vtotal; + word y2; + word vblank; + word vsyncstart; + word vsyncend; +} __attribute__((packed)) vbios_modeline_type2; + +typedef struct { + byte xchars; + byte ychars; + byte unknown[4]; + + vbios_modeline_type2 modelines[]; +} __attribute__((packed)) vbios_resolution_type2; + +typedef struct { + unsigned long clock; + + word x1; + word htotal; + word x2; + word hblank; + word hsyncstart; + word hsyncend; + + word y1; + word vtotal; + word y2; + word vblank; + word vsyncstart; + word vsyncend; + + word timing_h; + word timing_v; + + byte unknown[6]; +} __attribute__((packed)) vbios_modeline_type3; + +typedef struct { + unsigned char unknown[6]; + + vbios_modeline_type3 modelines[]; +} __attribute__((packed)) vbios_resolution_type3; + + +typedef struct { + cardinal chipset_id; + chipset_type chipset; + bios_type bios; + + int bios_fd; + address bios_ptr; + + vbios_mode * mode_table; + cardinal mode_table_size; + + byte b1, b2; + + boolean unlocked; +} vbios_map; + + +static cardinal get_chipset_id(void) { + outl(0x80000000, 0xcf8); + return inl(0xcfc); +} + +static chipset_type get_chipset(cardinal id) { + chipset_type type; + + switch (id) { + case 0x35758086: + type = CT_830; + break; + + case 0x25608086: + type = CT_845G; + break; + + case 0x35808086: + type = CT_855GM; + break; + + case 0x25708086: + type = CT_865G; + break; + + case 0x25808086: + type = CT_915G; + break; + + case 0x25908086: + type = CT_915GM; + break; + + case 0x27708086: + type = CT_945G; + break; + + case 0x27a08086: + type = CT_945GM; + break; + + case 0x27ac8086: + type = CT_945GME; + break; + + case 0x29708086: + type = CT_946GZ; + break; + + case 0x29a08086: + type = CT_G965; + break; + + case 0x29908086: + type = CT_Q965; + break; + + case 0x2a008086: + type = CT_965GM; + break; + + case 0x29c08086: + type = CT_G33; + break; + + case 0x29b08086: + type = CT_Q35; + break; + + case 0x29d08086: + type = CT_Q33; + break; + + case 0x81008086: + type = CT_500GMA; + break; + + default: + type = CT_UNKWN; + break; + } + + return type; +} + + +static vbios_resolution_type1 * map_type1_resolution(vbios_map * map, word res) { + vbios_resolution_type1 * ptr = ((vbios_resolution_type1*)(map->bios_ptr + res)); + return ptr; +} + +static vbios_resolution_type2 * map_type2_resolution(vbios_map * map, word res) { + vbios_resolution_type2 * ptr = ((vbios_resolution_type2*)(map->bios_ptr + res)); + return ptr; +} + +static vbios_resolution_type3 * map_type3_resolution(vbios_map * map, word res) { + vbios_resolution_type3 * ptr = ((vbios_resolution_type3*)(map->bios_ptr + res)); + return ptr; +} + + +static boolean detect_bios_type(vbios_map * map, int entry_size) { + unsigned i; + short int r1, r2; + + r1 = r2 = 32000; + + for (i=0; i < map->mode_table_size; i++) { + if (map->mode_table[i].resolution <= r1) { + r1 = map->mode_table[i].resolution; + } + else { + if (map->mode_table[i].resolution <= r2) { + r2 = map->mode_table[i].resolution; + } + } + + /*printf("r1 = %d r2 = %d\n", r1, r2);*/ + } + + return (r2-r1-6) % entry_size == 0; +} + + +static void close_vbios(vbios_map * map); + + +static vbios_map * open_vbios(chipset_type forced_chipset) { + vbios_map * map = NEW(vbios_map); + memset (map, 0, sizeof(vbios_map)); + + /* + * Determine chipset + */ + + if (forced_chipset == CT_UNKWN) { + map->chipset_id = get_chipset_id(); + + map->chipset = get_chipset(map->chipset_id); + } + else if (forced_chipset != CT_UNKWN) { + map->chipset = forced_chipset; + } + else { + map->chipset = CT_915GM; + } + + /* + * Map the video bios to memory + */ + + map->bios_ptr = (unsigned char *) VBIOS_START; + +#if 0 + /* + * check if we have ATI Radeon + */ + + if (memmem(map->bios_ptr, VBIOS_SIZE, ATI_SIGNATURE1, strlen(ATI_SIGNATURE1)) || + memmem(map->bios_ptr, VBIOS_SIZE, ATI_SIGNATURE2, strlen(ATI_SIGNATURE2)) ) { + fprintf(stderr, "ATI chipset detected. 915resolution only works with Intel 800/900 series graphic chipsets.\n"); + close(map->bios_fd); + exit(2); + } + + /* + * check if we have NVIDIA + */ + + if (memmem(map->bios_ptr, VBIOS_SIZE, NVIDIA_SIGNATURE, strlen(NVIDIA_SIGNATURE))) { + fprintf(stderr, "NVIDIA chipset detected. 915resolution only works with Intel 800/900 series graphic chipsets.\n"); + close(map->bios_fd); + exit(2); + } + + /* + * check if we have Intel + */ + + if (map->chipset == CT_UNKWN && memmem(map->bios_ptr, VBIOS_SIZE, INTEL_SIGNATURE, strlen(INTEL_SIGNATURE))) { + fprintf(stderr, "Intel chipset detected. However, 915resolution was unable to determine the chipset type.\n"); + + fprintf(stderr, "Chipset Id: %x\n", map->chipset_id); + + fprintf(stderr, "Please report this problem to stomljen@yahoo.com\n"); + + close_vbios(map); + exit(2); + } +#endif + + /* + * check for others + */ + + if (map->chipset == CT_UNKWN) { + fprintf(stderr, "Unknown chipset type and unrecognized bios.\n"); + fprintf(stderr, "915resolution only works with Intel 800/900 series graphic chipsets.\n"); + + fprintf(stderr, "Chipset Id: %x\n", map->chipset_id); + close_vbios(map); + return 0; + } + + /* + * Figure out where the mode table is + */ + + { + address p = map->bios_ptr + 16; + address limit = map->bios_ptr + VBIOS_SIZE - (3 * sizeof(vbios_mode)); + + while (p < limit && map->mode_table == 0) { + vbios_mode * mode_ptr = (vbios_mode *) p; + + if (((mode_ptr[0].mode & 0xf0) == 0x30) && ((mode_ptr[1].mode & 0xf0) == 0x30) && + ((mode_ptr[2].mode & 0xf0) == 0x30) && ((mode_ptr[3].mode & 0xf0) == 0x30)) { + + map->mode_table = mode_ptr; + } + + p++; + } + + if (map->mode_table == 0) { + fprintf(stderr, "Unable to locate the mode table.\n"); + fprintf(stderr, "Please run the program 'dump_bios' as root and\n"); + fprintf(stderr, "email the file 'vbios.dmp' to stomljen@yahoo.com.\n"); + + fprintf(stderr, "Chipset: %s\n", chipset_type_names[map->chipset]); + close_vbios(map); + return 0; + } + } + + /* + * Determine size of mode table + */ + + { + vbios_mode * mode_ptr = map->mode_table; + + while (mode_ptr->mode != 0xff) { + map->mode_table_size++; + mode_ptr++; + } + } + + /* + * Figure out what type of bios we have + * order of detection is important + */ + + if (detect_bios_type(map, sizeof(vbios_modeline_type3))) { + map->bios = BT_3; + } + else if (detect_bios_type(map, sizeof(vbios_modeline_type2))) { + map->bios = BT_2; + } + else if (detect_bios_type(map, sizeof(vbios_resolution_type1))) { + map->bios = BT_1; + } + else { + fprintf(stderr, "Unable to determine bios type.\n"); + fprintf(stderr, "Please run the program 'dump_bios' as root and\n"); + fprintf(stderr, "email the file 'vbios.dmp' to stomljen@yahoo.com.\n"); + + fprintf(stderr, "Chipset: %s\n", chipset_type_names[map->chipset]); + fprintf(stderr, "Mode Table Offset: $C0000 + $%x\n", ((cardinal)map->mode_table) - ((cardinal)map->bios_ptr)); + fprintf(stderr, "Mode Table Entries: %u\n", map->mode_table_size); + return 0; + } + + return map; +} + +static void close_vbios(vbios_map * map) { + assert(!map->unlocked); + + FREE(map); +} + +static void unlock_vbios(vbios_map * map) { + + assert(!map->unlocked); + + map->unlocked = TRUE; + + switch (map->chipset) { + case CT_UNKWN: + break; + case CT_830: + case CT_855GM: + outl(0x8000005a, 0xcf8); + map->b1 = inb(0xcfe); + + outl(0x8000005a, 0xcf8); + outb(0x33, 0xcfe); + break; + case CT_845G: + case CT_865G: + case CT_915G: + case CT_915GM: + case CT_945G: + case CT_945GM: + case CT_945GME: + case CT_946GZ: + case CT_G965: + case CT_Q965: + case CT_965GM: + case CT_G33: + case CT_Q35: + case CT_Q33: + case CT_500GMA: + outl(0x80000090, 0xcf8); + map->b1 = inb(0xcfd); + map->b2 = inb(0xcfe); + + outl(0x80000090, 0xcf8); + outb(0x33, 0xcfd); + outb(0x33, 0xcfe); + break; + } + +#if DEBUG + { + cardinal t = inl(0xcfc); + printf("unlock PAM: (0x%08x)\n", t); + } +#endif +} + +static void relock_vbios(vbios_map * map) { + + assert(map->unlocked); + map->unlocked = FALSE; + + switch (map->chipset) { + case CT_UNKWN: + break; + case CT_830: + case CT_855GM: + outl(0x8000005a, 0xcf8); + outb(map->b1, 0xcfe); + break; + case CT_845G: + case CT_865G: + case CT_915G: + case CT_915GM: + case CT_945G: + case CT_945GM: + case CT_945GME: + case CT_946GZ: + case CT_G965: + case CT_Q965: + case CT_965GM: + case CT_G33: + case CT_Q35: + case CT_Q33: + case CT_500GMA: + outl(0x80000090, 0xcf8); + outb(map->b1, 0xcfd); + outb(map->b2, 0xcfe); + break; + } + +#if DEBUG + { + cardinal t = inl(0xcfc); + printf("relock PAM: (0x%08x)\n", t); + } +#endif +} + + +static void list_modes(vbios_map *map, cardinal raw) { + cardinal i, x, y; + + for (i=0; i < map->mode_table_size; i++) { + switch(map->bios) { + case BT_1: + { + vbios_resolution_type1 * res = map_type1_resolution(map, map->mode_table[i].resolution); + + x = ((((cardinal) res->x2) & 0xf0) << 4) | res->x1; + y = ((((cardinal) res->y2) & 0xf0) << 4) | res->y1; + + if (x != 0 && y != 0) { + printf("Mode %02x : %dx%d, %d bits/pixel\n", map->mode_table[i].mode, x, y, map->mode_table[i].bits_per_pixel); + } + + if (raw) + { + printf("Mode %02x (raw) :\n\t%02x %02x\n\t%02x\n\t%02x\n\t%02x\n\t%02x\n\t%02x\n\t%02x\n", map->mode_table[i].mode, res->unknow1[0],res->unknow1[1], res->x1,res->x_total,res->x2,res->y1,res->y_total,res->y2); + } + + } + break; + case BT_2: + { + vbios_resolution_type2 * res = map_type2_resolution(map, map->mode_table[i].resolution); + + x = res->modelines[0].x1+1; + y = res->modelines[0].y1+1; + + if (x != 0 && y != 0) { + printf("Mode %02x : %dx%d, %d bits/pixel\n", map->mode_table[i].mode, x, y, map->mode_table[i].bits_per_pixel); + } + } + break; + case BT_3: + { + vbios_resolution_type3 * res = map_type3_resolution(map, map->mode_table[i].resolution); + + x = res->modelines[0].x1+1; + y = res->modelines[0].y1+1; + + if (x != 0 && y != 0) { + printf("Mode %02x : %dx%d, %d bits/pixel\n", map->mode_table[i].mode, x, y, map->mode_table[i].bits_per_pixel); + } + } + break; + case BT_UNKWN: + break; + } + } +} + +static void gtf_timings(int x, int y, int freq, + unsigned long *clock, + word *hsyncstart, word *hsyncend, word *hblank, + word *vsyncstart, word *vsyncend, word *vblank) +{ + int hbl, vbl, vfreq; + + vbl = y + (y+1)/(20000.0/(11*freq) - 1) + 1.5; + vfreq = vbl * freq; + hbl = 16 * (int)(x * (30.0 - 300000.0 / vfreq) / + (70.0 + 300000.0 / vfreq) / 16.0 + 0.5); + + *vsyncstart = y; + *vsyncend = y + 3; + *vblank = vbl - 1; + *hsyncstart = x + hbl / 2 - (x + hbl + 50) / 100 * 8 - 1; + *hsyncend = x + hbl / 2 - 1; + *hblank = x + hbl - 1; + *clock = (x + hbl) * vfreq / 1000; +} + +static void set_mode(vbios_map * map, cardinal mode, cardinal x, cardinal y, cardinal bp, cardinal htotal, cardinal vtotal) { + int xprev, yprev; + cardinal i, j; + + for (i=0; i < map->mode_table_size; i++) { + if (map->mode_table[i].mode == mode) { + switch(map->bios) { + case BT_1: + { + vbios_resolution_type1 * res = map_type1_resolution(map, map->mode_table[i].resolution); + + if (bp) { + map->mode_table[i].bits_per_pixel = bp; + } + + res->x2 = (htotal?(((htotal-x) >> 8) & 0x0f) : (res->x2 & 0x0f)) | ((x >> 4) & 0xf0); + res->x1 = (x & 0xff); + + res->y2 = (vtotal?(((vtotal-y) >> 8) & 0x0f) : (res->y2 & 0x0f)) | ((y >> 4) & 0xf0); + res->y1 = (y & 0xff); + if (htotal) + res->x_total = ((htotal-x) & 0xff); + + if (vtotal) + res->y_total = ((vtotal-y) & 0xff); + } + break; + case BT_2: + { + vbios_resolution_type2 * res = map_type2_resolution(map, map->mode_table[i].resolution); + + res->xchars = x / 8; + res->ychars = y / 16 - 1; + xprev = res->modelines[0].x1; + yprev = res->modelines[0].y1; + + for(j=0; j < 3; j++) { + vbios_modeline_type2 * modeline = &res->modelines[j]; + + if (modeline->x1 == xprev && modeline->y1 == yprev) { + modeline->x1 = modeline->x2 = x-1; + modeline->y1 = modeline->y2 = y-1; + + gtf_timings(x, y, freqs[j], &modeline->clock, + &modeline->hsyncstart, &modeline->hsyncend, + &modeline->hblank, &modeline->vsyncstart, + &modeline->vsyncend, &modeline->vblank); + + if (htotal) + modeline->htotal = htotal; + else + modeline->htotal = modeline->hblank; + + if (vtotal) + modeline->vtotal = vtotal; + else + modeline->vtotal = modeline->vblank; + } + } + } + break; + case BT_3: + { + vbios_resolution_type3 * res = map_type3_resolution(map, map->mode_table[i].resolution); + + xprev = res->modelines[0].x1; + yprev = res->modelines[0].y1; + + for (j=0; j < 3; j++) { + vbios_modeline_type3 * modeline = &res->modelines[j]; + + if (modeline->x1 == xprev && modeline->y1 == yprev) { + modeline->x1 = modeline->x2 = x-1; + modeline->y1 = modeline->y2 = y-1; + + gtf_timings(x, y, freqs[j], &modeline->clock, + &modeline->hsyncstart, &modeline->hsyncend, + &modeline->hblank, &modeline->vsyncstart, + &modeline->vsyncend, &modeline->vblank); + if (htotal) + modeline->htotal = htotal; + else + modeline->htotal = modeline->hblank; + if (vtotal) + modeline->vtotal = vtotal; + else + modeline->vtotal = modeline->vblank; + + modeline->timing_h = y-1; + modeline->timing_v = x-1; + } + } + } + break; + case BT_UNKWN: + break; + } + } + } +} + +static void display_map_info(vbios_map * map) { + printf("Chipset: %s\n", chipset_type_names[map->chipset]); + printf("BIOS: %s\n", bios_type_names[map->bios]); + + printf("Mode Table Offset: $C0000 + $%x\n", ((cardinal)map->mode_table) - ((cardinal)map->bios_ptr)); + printf("Mode Table Entries: %u\n", map->mode_table_size); +} + + +static int parse_args(cardinal argc, char *argv[], chipset_type *forced_chipset, cardinal *list, cardinal *mode, cardinal *x, cardinal *y, cardinal *bp, cardinal *raw, cardinal *htotal, cardinal *vtotal) { + cardinal index = 0; + + *list = *mode = *x = *y = *raw = *htotal = *vtotal = 0; + *bp = 0; + + *forced_chipset = CT_UNKWN; + + + if ((argc > index) && !strcmp(argv[index], "-c")) { + index++; + + if(argc<=index) { + return 0; + } + + if (!strcmp(argv[index], "845")) { + *forced_chipset = CT_845G; + } + else if (!strcmp(argv[index], "855")) { + *forced_chipset = CT_855GM; + } + else if (!strcmp(argv[index], "865")) { + *forced_chipset = CT_865G; + } + else if (!strcmp(argv[index], "915G")) { + *forced_chipset = CT_915G; + } + else if (!strcmp(argv[index], "915GM")) { + *forced_chipset = CT_915GM; + } + else if (!strcmp(argv[index], "945G")) { + *forced_chipset = CT_945G; + } + else if (!strcmp(argv[index], "945GM")) { + *forced_chipset = CT_945GM; + } + else if (!strcmp(argv[index], "945GME")) { + *forced_chipset = CT_945GME; + } + else if (!strcmp(argv[index], "946GZ")) { + *forced_chipset = CT_946GZ; + } + else if (!strcmp(argv[index], "G965")) { + *forced_chipset = CT_G965; + } + else if (!strcmp(argv[index], "Q965")) { + *forced_chipset = CT_Q965; + } + else if (!strcmp(argv[index], "965GM")) { + *forced_chipset = CT_965GM; + } + else if (!strcmp(argv[index], "G33")) { + *forced_chipset = CT_G33; + } + else if (!strcmp(argv[index], "Q35")) { + *forced_chipset = CT_Q35; + } + else if (!strcmp(argv[index], "Q33")) { + *forced_chipset = CT_Q33; + } + else if (!strcmp(argv[index], "500GMA")) { + *forced_chipset = CT_500GMA; + } + else { + *forced_chipset = CT_UNKWN; + } + + index++; + + if (argc<=index) { + return 0; + } + } + + if ((argc > index) && !strcmp(argv[index], "-l")) { + *list = 1; + index++; + + if(argc<=index) { + return 0; + } + } + + if ((argc > index) && !strcmp(argv[index], "-r")) { + *raw = 1; + index++; + + if(argc<=index) { + return 0; + } + } + + if (argc-index < 3 || argc-index > 6) { + return -1; + } + + *mode = (cardinal) strtol(argv[index], NULL, 16); + *x = (cardinal)atoi(argv[index+1]); + *y = (cardinal)atoi(argv[index+2]); + + + if (argc-index > 3) { + *bp = (cardinal)atoi(argv[index+3]); + } + else { + *bp = 0; + } + + if (argc-index > 4) { + *htotal = (cardinal)atoi(argv[index+4]); + } + else { + *htotal = 0; + } + + if (argc-index > 5) { + *vtotal = (cardinal)atoi(argv[index+5]); + } + else { + *vtotal = 0; + } + + return 0; +} + +static void usage(void) { + printf("Usage: 915resolution [-c chipset] [-l] [mode X Y] [bits/pixel] [htotal] [vtotal]\n"); + printf(" Set the resolution to XxY for a video mode\n"); + printf(" Bits per pixel are optional. htotal/vtotal settings are additionally optional.\n"); + printf(" Options:\n"); + printf(" -c force chipset type (THIS IS USED FOR DEBUG PURPOSES)\n"); + printf(" -l display the modes found in the video BIOS\n"); + printf(" -r display the modes found in the video BIOS in raw mode (THIS IS USED FOR DEBUG PURPOSES)\n"); +} + +static int main (int argc, char *argv[]) +{ + vbios_map * map; + cardinal list, mode, x, y, bp, raw, htotal, vtotal; + chipset_type forced_chipset; + + printf("Intel 800/900 Series VBIOS Hack : version %s\n\n", RES915_VERSION); + + if (parse_args(argc, argv, &forced_chipset, &list, &mode, &x, &y, &bp, &raw, &htotal, &vtotal) == -1) { + usage(); + return 2; + } + + map = open_vbios(forced_chipset); + display_map_info(map); + + printf("\n"); + + if (list) { + list_modes(map, raw); + } + + if (mode!=0 && x!=0 && y!=0) { + unlock_vbios(map); + + set_mode(map, mode, x, y, bp, htotal, vtotal); + + relock_vbios(map); + + printf("Patch mode %02x to resolution %dx%d complete\n", mode, x, y); + + if (list) { + list_modes(map, raw); + } + } + + close_vbios(map); + + return 0; +} + + + + + +static grub_err_t +grub_cmd_915resolution (grub_command_t cmd __attribute__ ((unused)), + int argc, char *argv[]) +{ + return main (argc, argv); +} + +static grub_command_t cmd; + +GRUB_MOD_INIT(915resolution) +{ + cmd = grub_register_command ("915resolution", grub_cmd_915resolution, + "915resolution", "Intel VBE editor"); +} + +GRUB_MOD_FINI(915resolution) +{ + grub_unregister_command (cmd); +} --- grub2-1.99.orig/debian/grub-extras/915resolution/Makefile.core.def +++ grub2-1.99/debian/grub-extras/915resolution/Makefile.core.def @@ -0,0 +1,8 @@ +AutoGen definitions Makefile.tpl; + +module = { + name = '915resolution'; + i386_pc = contrib/915resolution/915resolution.c; + cflags = -Wno-error; + enable = i386_pc; +}; --- grub2-1.99.orig/debian/grub-extras/915resolution/COPYING +++ grub2-1.99/debian/grub-extras/915resolution/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. --- grub2-1.99.orig/debian/grub-extras/915resolution/README +++ grub2-1.99/debian/grub-extras/915resolution/README @@ -0,0 +1,11 @@ + +grub-extras is meant to be used as an overlay on grub2 source tree. + +Build instructions: + + - Copy grub-extras in a subdirectory of your grub2 checkout. + For example, "grub-extras". + + - Export GRUB_CONTRIB environment variable to point to this directory. + + - Build GRUB as usual. --- grub2-1.99.orig/debian/apport/source_grub2.py +++ grub2-1.99/debian/apport/source_grub2.py @@ -0,0 +1,93 @@ +'''apport package hook for grub2 + +Author: Jean-Baptiste Lallement + +This program 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 3 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' +from apport.hookutils import * +import os +import subprocess +import re + +def check_shell_syntax(path): + ''' Check the syntax of a shell script ''' + try: + subprocess.check_call(['/bin/sh', '-n', path], + stderr=open(os.devnull,'w')) + except subprocess.CalledProcessError: + return False + return True + +def check_shell_syntax_harder(path): + ''' Check the syntax of a shell script ''' + try: + # sh -n is tempting, but not good enough. Consider this case: + # + # GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash nomodeset” + # + # The quotes are Unicode quotes, not valid in the shell and probably + # caused by copying a line out of a web page. This is parsed as an + # instruction to run the 'splash' command with argument 'nomodeset”' + # and with the GRUB_CMDLINE_LINUX_DEFAULT environment variable set + # to '”quiet'. 'sh -n' allows this because this is a valid parse + # and it's possible that the command 'splash' might exist, but what + # we need to know is whether sourcing the file will fail. + # + # Unfortunately this test may involve executing code. However, this + # file is already sourced as root when running update-grub, so it + # seems unlikely that this could do any further harm. + subprocess.check_call(['/bin/sh', '-ec', '. %s' % re.escape(path)], + stderr=open(os.devnull,'w')) + except subprocess.CalledProcessError: + return False + return True + +def _attach_file_filtered(report, path, key=None): + '''filter out password from grub configuration''' + if not key: + key = path_to_key(path) + + if os.path.exists(path): + with open(path,'r') as f: + filtered = [l if not l.startswith('password') + else '### PASSWORD LINE REMOVED ###' + for l in f.readlines()] + report[key] = ''.join(filtered) + +def add_info(report): + if report['ProblemType'] == 'Package': + # To detect if root fs is a loop device + attach_file(report, '/proc/cmdline','ProcCmdLine') + _attach_file_filtered(report, '/etc/default/grub','EtcDefaultGrub') + attach_file_if_exists(report, '/boot/grub/device.map', 'DeviceMap') + + invalid_grub_script = [] + if not check_shell_syntax_harder('/etc/default/grub'): + invalid_grub_script.append('/etc/default/grub') + + # Check scripts in /etc/grub.d since some users directly change + # configuration there + grubdir='/etc/grub.d' + for f in os.listdir(grubdir): + fullpath=os.path.join(grubdir, f) + if f != 'README' and os.access(fullpath, os.X_OK) \ + and not check_shell_syntax(fullpath): + invalid_grub_script.append(fullpath) + attach_file(report, fullpath) + + # TODO: Add some UI to ask if the user modified the invalid script + # and if he still wants to report it + if invalid_grub_script: + report['InvalidGrubScript'] = ' '.join(invalid_grub_script) + +if __name__ == '__main__': + r = {} + r['ProblemType'] = 'Package' + add_info(r) + for k, v in r.iteritems(): + print '%s: "%s"' % (k, v) + print "========================================" --- grub2-1.99.orig/debian/po/dz.po +++ grub2-1.99/debian/po/dz.po @@ -0,0 +1,410 @@ +# Translation of grub2 debconf templates to Dzongkha +# Copyright (C) 2010 Dzongkha Localization +# This file is distributed under the same license as the PACKAGE package. +# Jurmey Rabgay , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2001-12-31 19:57-0500\n" +"Last-Translator: Dawa \n" +"Language-Team: Dzongkha \n" +"Language: dz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2;plural=(n!=1)\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst ནང་ལས་ ཅེན་ལོཌི་འབད་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB དུས་མཐུན་ཡིག་ཚུགས་ཚུ་གིས་ /boot/grub ནང་ལུ་ GRUB སྔོན་བཤུལ་གཞི་སྒྲིག་ཅིག་སྐྱོན་འཛིན་འབད་ནུག" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"ཁྱོད་རའི་རིམ་ལུགས་ནང་ལུ་ GRUB གི་སྔོན་བཤུལ་ཐོན་རིམ་ཚབ་བཙུགས་འབད་ནི་གི་དོན་ལུ་ /boot/grub/menu." +"lst འདི་ ཁྱོད་རའི་ཡོད་བཞིན་པའི་སྔོན་བཤུལ་གཞི་སྒྲིག་ནང་ལས་ ཅེན་ལོཌི་ GRUB ༢ ལུ་ བདེ་སྒྲིག་འབད་དགོཔ་སྦེ་" +"འོས་སྦྱོར་འབད་ནུག། གཞི་སྒྲིག་འདི་ ཡང་ཅིན་ འཕྲལ་ར་རང་བཞིན་གྱིས་ལཱ་འབད་བཏུབ།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"ཁྱོད་ཀྱིས་ menu.lst ནང་ལས་ ཅེན་ལོ་ཌིང་དང་ལེན་འབད་དེ་ GRUB ༢ གཞི་སྒྲིག་གསརཔ་འདི་ MBR " +"(Master Boot Record) ལུ་ཐད་ཀར་གཞི་བཙུགས་མ་འབད་བའི་ཧེ་མ་ གཡོག་བཀོལ་བཏུབ་མི་བཏུབ་བལྟ་དགོ་" +"པའི་འོས་སྦྱོར་འབད་དེ་ཡོད།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"ཁྱོད་ཀྱིས་ག་དེ་སྦེ་ གྲོས་ཐག་གཅད་རུང་ ཤུལ་ལས་ MBR གཟུགས་བརྙན་་རྙིངམ་འདི་ འོག་གི་བརྡ་བཀོད་འདི་ རུཊི་སྦེ་" +"སྤྲོད་ཐོག་ལས་ GRUB 2 གིས་ཚབ་བཙུགས་འབད་ཚུགས།" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB གཞི་བཙུགས་ ཐབས་འཕྲུལ་ཚུ :" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc ཐུམ་སྒྲིལ་འདི་ ཡར་བསྐྱེད་འབད་ཡོདཔ། དཀར་ཆག་འདི་གིས་ རང་བཞིན་ གཡོག་བཀོལ་ grub-གཞི་" +"བཙུགས་ གང་རུང་ཡོད་པ་ཅིན་ ཐབས་འཕྲུལ་ སེལ་འཐུ་འབད་བཅུགཔ་ཨིན།" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +" GRUB core གཟུགས་བརྙན་ འདི་ GRUB modulesཡང་ན་ grub.cfg ལས་ སོ་སོ་སྦེ་མི་འགྱོ་ནིའི་དོན་ལུ་ " +"གནས་སྟངས་མང་ཤོས་ཅིག་ནང་ རང་བཞིན་གྱི་ grub-གཞི་བཙུགས་ གཡོག་བཀོལ་ནི་འདི་ འོས་སྦྱོར་འབད་ཡོདཔ་ཨིན། " + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"ག་དེམ་ཅིག་སྦེ་ ཁྱོད་རའི་BIOS གིས་ ཌའིབ་ག་འདི་ བུཊི་ ཌའིབ་སྦེ་ ངོས་འཛིན་འབད་འབདཝ་ཨིན་ན་མ་ཤེས་པ་" +"ཅིན་ ཆ་མཉམ་ལུ་ GRUB གཞི་བཙུགས་འབད་ནི་འི་ཐབས་ལམ་ལེགས་ཤོམ་ཅིག་ཨིན།" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"དྲན་འཛིན: GRUB འདི་ བར་བཅད་ བུཊི་ དྲན་ཐོ་ལུ་ཡང་ གཞི་བཙུགས་འབད་ཚུགསཔ་ཨིནམ་དང་ འོས་ལྡན་ བར་" +"བཅད་ལ་ལོ་གཅིག་ནཱ་ལུ་བྱིན་ཏེ་ཡོདཔ་ཨིན། ཨིན་རུང་ འདི་གིས་ GRUB ལུ་ blocklist ཐབས་རིག་ལག་ལེ་ན་" +"འཐབ་ཅབུག་སྟེ་ བློ་གཏད་མ་ཚུགསཔ་བཟོཝ་ཨིནམ་ལས་ འདི་ངོ་སྦྱོར་མི་འབད།" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB བུཊི་ མངོན་གསལ་པ་འདི་ ཧེ་མ་ལས་ ཌིཀསི་མེད་མི་ ཡང་ན་ མཐུན་མོང་མ་ཡིན་པའི་ངོས་འཛིན་པ་འདི་ " +"དོན་དག་གང་རུང་ལུ་བརྟེན་ བསྒྱུར་བཅོས་སོང་ཡོད་མི་ལུ་གཞི་བཙུགས་འབད་ནུག། གཞི་བཙུགས་འབད་ཡོད་པའི་ GRUB " +"core གཟུགས་བརྙན་འདི་ GRUB མོ་ཌུལསི་ དང་ grub.cfg དང་ མཉམ་འབྱུང་སྦེ་སྡོད་བཏུབ་ ངེས་བདེན་བཟོ་" +"དགོ། GRUB འདི་ བུཊི་ཐབས་འཕྲུལ་ འོས་ལྡན་ལུ་འབྲི་ཡོདཔ་ངེས་བདེན་་སྦེ་ཤེས་ཚུགས་ནིའི་དོལུ་ ལོག་ཞིབ་དཔྱད་" +"འབད་གནང་།" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr " GRUB བུཊི་ ཐབས་འཕྲུལ་ལུ་འབྲི་ནི་ འཐུས་ཤོར་འབྱུང་ཡོདཔ - འཕྲོ་མཐུད་དེ་འབད་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB འདི་ འོག་གི་ཐབས་འཕྲུལ་ཚུ་ནང་གཞི་བཙུགས་འབད་མ་ཚུགས་པས:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"ག་དེ་འབད་རུང་ འཕྲོ་མཐུད་འབད་ནི་ཨིན་ན? འཕྲོ་མཐུད་འབད་བ་ཅིན་ ཁྱོད་ཀྱི་གློག་རིག་འདི་ལེགས་ཤོམ་སྦེ་འགོ་" +"བཙུགས་མི་ཚུགས།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB གཞི་བཙུགས་འཐུས་ཤོར་བྱུང་ཡོདཔ། - ལོག་འབད་རྩོལ་བསྐྱེད་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"ཁྱོད་ཀྱིས་ ཐབས་འཕྲུལ་གཞན་ཚུ་ནང་ GRUB གཞི་བཙུགས་འབད་ཚུགསཔ་འོང་ ཨིན་རུང་ ཁྱོད་རའི་རིམ་ལུགས་འདི་ " +"ཐབས་འཕྲུལ་དེ་ལས་བུཊི་འབད་བཏུབ་ག་ཞིབ་དཔྱད་འབད་དགོ། དེ་མེན་པ་ཅིན་ GRUB སྔོན་བཤུལ་ལས་དུས་མཐུན་" +"འབད་མི་དེ་ཆ་མེད་འགྱོ་འོང་།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB གཞི་བཙུགས་མ་འབད་བར་འཕྲོ་མཐུད་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"ཁྱོད་ཀྱིས་ ཐབས་འཕྲུལ་གང་རུང་ནང་ GRUB གཞི་བཙུགས་མ་འབད་ནི་སྦེ་གདམ་ཁ་བརྐྱབས་ནུག འཕྲོ་མཐུད་དེ་འབད་བ་" +"ཅིན་ བུཊི་མངོན་གསལ་པ་འདི་ ལེགས་ཤོམ་སྦེ་རིམ་སྒྲིག་མི་འབདཝ་་འོང་། དེ་ལས་ ཁྱོད་ཀྱི་གློག་རིག་འདི་ཤུལ་ལས་" +"འགོ་བཙུགསཔ་ད་ ཧེ་མ་ལས་བུཊི་ས་ཁོངས་ག་ཅི་ཡོད་རུང་ ལག་ལེན་འཐབ་འོང་། གལ་སྲིད་ བུཊི་ས་ཁོངས་ ནང་ ཧེ་" +"མའི་ཐོན་རིམ་ GRUB ༢ འདི་ཡོད་པ་ཅིན་ མོ་ཌུལ་འདི་མངོན་གསལའབད་མི་ཚུགས་ནི་ ཡང་ན་ ད་ལྟོའི་རིམ་སྒྲིག་ཡིག་" +"སྣོད་འདི་ལེགས་སྐྱོང་འཐབ་མི་ཚུགསཔ་འོང་།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"ཁྱོད་ཀྱིས་ ཧེ་མ་ལས་ བུཊི་མངོན་གསལ་འབད་མི་སོར་སོ་ཅིག་གཡོག་བཀོལ་འདོད་ཡོད་པ་ཅིན་ ཡང་ན་ འ་ནི་འདི་ " +"བུཊི་མངོན་གསལ་འབད་མི་ཅིག་དགོཔ་མེད་པའི་དམིགས་བསལ་གྱི་ས་ཁོངས་མེན་པ་ཅིན་ འཕྲོ་མཐུད་མ་འབད། དེ་མེན་པ་" +"ཅིན་ ག་ཏེ་འབད་རུང་ GRUB གཞི་བཙུགས་འབད་དགོ།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "/boot/grub ནང་ལས་GRUB 2 རྩ་བསྐྲད་གཏང་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "/boot/grub ནང་ལས་ GRUB 2 ཡིག་སྣོད་ཆ་མཉམ་ རྩ་བསྐྲད་གཏང་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"འདི་གིས་ བུཊི་མངོན་གསལ་པ་སོ་སོ་གཅིག་གཞི་བཙུགས་མ་འབད་ཚུན་ རིམ་སྒྲིག་འདི་ བུཊི་འབད་མ་བཏུབ་བཟོ་འོང་།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "ད་ལྟོ་ར་ GRUB ༢ ལུ་གཞི་བསྒྱུར་མཇུག་བསྡུ་ནི་ཨིན་ན?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"རིམ་ལུགས་འདི་ལུ་ གཞི་བཙུགས་འབད་ཡོད་པའི་ GRUB སྔོན་བཤུལ་བུཊི་མངོན་གསལ་འབད་མིའི་ནང་ལས་ཡིག་སྣོད་ཚུ་" +"འདུག ཨིན་རུང་ ད་ལྟོ་འབདཝ་ད་ ཌིཀསི་ཚུ་གུ་ GRUB ༢ བུཊི་དྲན་ཐོ་གཞི་བཙུགས་འབད་དེ་ཡོད:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"GRUB སྤྱོད་ཤུལ་འདི་ ལག་ལེན་འཐབ་སྟེ་མེདཔ་བཟུམ་ཅིག་ཡོདཔ་དང་ འདི་གི་ཚབ་ལུ་ ཌིཀསི་གུ་ཡོད་མི་ GRUB 2 " +"གཟུགས་བརྙན་ཚུ་དུས་མཐུན་བཟོ་ཞིནམ་ལས་ GRUB སྤྱོད་ཤུལ་ཡིག་སྣོད་རྙིངམ་ཚུ་ གཞི་བསྒྱུར་འབད་ནི་མཇུག་བསྡུ། ཁྱོད་" +"ཀྱིས་ GRUB 2 གཟུགས་བརྙན་ཚུ་དུས་མཐུན་མ་བཟོ་བ་ཅིན་ འདི་ཚུ་ ཐུམ་སྒྲིལ་གསརཔ་ཚུ་དང་གཅིག་ཁར་མཐུན་འགྱུར་" +"ཅན་མི་འོང་ནི་ཨིནམ་དང་ ཁྱོད་ཀྱི་རིམ་ལུགས་ཚུལ་མཐུན་སྦེ་ཊི་འབད་ནི་ལས་བཀག་ཆ་འབད་འོང་།" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"GRUB 2 གཞི་བཙུགས་ཀྱིས་ བཀོད་སྤྱོད་རིམ་ལུགས་ གཞན་གཅིག་གུ་ བུཊི་དྲན་ཐོ་འདི་ཚུ་ གསར་བསྐྲུན་མ་འབདཝ་" +"ལས་ GRUB 2 ལུ་ གཞི་བསྒྱུར་འབད་ཚར་དགོ།" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "ལི་ནགསི་བརྡ་བཀོད་གྲལ་ཐིག་:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"འོག་གི་ ལི་ནགསི་བརྡ་བཀོད་གྲལཐིག་འདི་ from from /etc/default/grub or the `kopt' " +"parameter in GRUB Legacy's menu.lst. ལས་ ཕྱིར་དོན་འབད་འབདཝ་ཨིན། འདི་ངེས་བདེན་ཨིནམ་" +"བདེན་སྦྱོར་འབད་ཞིནམ་ལས་ དགོས་མཁོ་ཡོད་པ་ཅིན་ལེགས་བཅོས་འབད། བརྡ་བཀོད་གྲལ་ཐིག་འདི་སྟོངམ་ཨིན་རུང་བཏུབ།" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "ལི་ནགསི་སྔོན་སྒྲིག་བརྡ་བཀོད་གྲལ་ཐིག་:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"འོག་གི་ཡིག་རྒྱུན་འདི་ སྔོན་སྒྲིག་དཀར་ཆག་ཐོ་བཀོད་ཀྱི་དོན་ལུ་ ལི་ནགསི་ཚད་འཛིན་སྦེ་ལག་ལེན་འཐབ་ནི་ཨིན་ དེ་" +"འབདཝ་ད་ སླར་གསོ་ཐབས་ལམ་གྱི་དོན་ལུ་མེན།" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD བརྡ་བཀོད་གྲལ་ཐིག་:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"འོག་གི་ kFreeBSD བརྡ་བཀོད་གྲལ་ཐིག་འདི་ /etc/default/grub or the `kopt' parameter " +"in GRUB Legacy's menu.lst ལས་ ཕྱིར་འདོན་འབད་འབདཝ་ཨིན། འདི་ངེས་དེན་ཨིནམ་བདེན་སྦྱོར་འབད་" +"ཞིནམ་ལས་ དགོས་མཁོ་ཡོད་པ་ཅིན་ ལེགས་བཅོས་འབད། བརྡ་བཀོད་གྲལ་ཐིག་འདི་ སྟོངམ་ཨིན་རུང་བཏུབ།" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD སྔོན་སྒྲིག་བརྡ་བཀོད་གྲལ་ཐིག་:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"འོག་གི་ཡིག་རྒྱུན་ཚུ་ སྔོན་སྒྲིག་དཀར་ཆག་ཐོ་བཀོད་ཀྱི་དོན་ལུ་ kFreeBSD སྦེ་ལག་ལེན་འཐབ་འོང་ དེ་འབདཝད་ " +"སླར་གསོ་ཐབས་ལམ་གྱི་དོན་ལུ་ལག་ལེན་མི་འཐབ།" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map འདི་ ལོག་བཟོ་ཡོདཔ།" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"ཡིག་སྣོད་ /boot/grub/device.map འདི་ རྩ་བརྟན་ ཐབས་འཕྲུལ་མིང་ཚུ་ལག་ལེན་འཐབ་སྦེ་ལོག་འབྲི་ཡོདཔ་" +"ཨིན། གནད་དོན་མང་ཤོས་ཅིག་ནང་ འདི་གིས་ མ་འོངས་པའི་ནང་བསྒྱུར་བཅོས་འབད་ནི་མར་ཕབ་འབད་དགོཔ་་ཨིནམ་" +"དང་ GRUB གིས་ བཟོ་བཏོན་འབད་ཡོད་པའི་ བུཊི་དཀར་ཆག་ཐོ་བཀོད་ཚུ་ལུ་གནོད་སྐྱོན་འབྱུ་ཕཅུག་ནི་མི་འོང་།" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"ག་དེ་སྦེ་རངུ་ ཁྱོད་ཀྱི་རིམ་ལུགས་ནང་ ཌིཀསི་གཅིག་ལས་ལྷགཔ་སྦེ་ཡོདཔ་ལས་ ཁྱོད་ ཐབས་འཕྲུ་ས་ཁྲ་རྙིངམ་འདི་ལུ་" +"བརྟེན་ཚུགས། ཁྱོད་ལུ་ GRUB's (hdN) འདྲེན་འཕྲུལ་ ཨང་བཏགས་ནིའི་་སྲོལ་སྒྲིག་ བུཊི་དཀར་ཆག་ཐོ་བཀོད་ཚུ་" +"ཡོད་མེད་ཞིབ་དཔྱད་འབད་ཞིནམ་ལས་ དགོས་མཁོ་དང་བསྟུན་ཏེ་ དུས་མཐུན་བཟོ།" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"འཕྲིན་དོན་འདི་ཧ་མ་གོཝ་ ཡང་ན་ ཁྱོད་ལུ་ སྲོལ་སྒྲིག་དཀར་ཆག་ཐོ་བཀོད་གང་རངུ་མེད་པ་ཅིན་ འཕྲིན་དོན་འདི་" +"སྣང་མེད་སྦེ་བཞག།" + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "ཡང་ཅིན་ ཁྱོད་ར་ལུ་ GRUB ༢ འདི་ MBR ལས་ ནམ་ཨིན་རུང་ མངོན་གསལ་འབད་འདོད་ཡོད་པ་ཅིན་ འོག་" +#~ "གི་བརྡ་བཀོད་འདི་ རྩ་བའི་ཐོག་ལས་འབད་བཏུབ:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUB གཞི་བཙུགས་འཐུས་ཤོར་བྱུང་ཡོདཔ། འཕྲོ་མཐུད་འབད་ནི་ཨིན་ན?" --- grub2-1.99.orig/debian/po/sl.po +++ grub2-1.99/debian/po/sl.po @@ -0,0 +1,430 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-12-09 10:50+0100\n" +"Last-Translator: Vanja Cvelbar \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" +"%100==4 ? 3 : 0);\n" +"X-Poedit-Language: Slovenian\n" +"X-Poedit-Country: SLOVENIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Verižno nalaganje iz menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "Skript za nadgradnjo je zaznal namestitev GRUB Legacy v /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Da zamenjate različico GRUB Legacy na vašem sistemu vam priporočamo, da se /" +"boot/grub/menu.lst spremeni tako, da verižno naloži GRUB 2 iz vaše obstoječe " +"namestitve GRUB Legacy. To dejanje lahko zdaj izvedete samodejno." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Priporočamo vam, da sprejmete verižno nalaganje GRUB 2 iz datoteke menu.lst " +"in preverite delovanje namestitve GRUB2 preden ga namestite na MBR (Master " +"Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Kakorkoli se odločite, stari MBR lahko kasneje vedno zamenjate z GRUB 2, če " +"izvedete kot root sledeči ukaz:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Namestitvene naprave za GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Nadgrajevanje paketa grub-pc. Ta meni vam omogoči izbiro naprav za katere " +"želite samodejno zagnati grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"V večini primerov je priporočen samodejni zagon grub-install, da preprečite " +"neskladja med jedrom GRUBa in moduli ali grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"V primeru, da niste prepričani kateri pogon je označuje vaš BIOS za " +"zagonskega, je ponavadi dobro, da namestite GRUB kar na vse." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Opomba: GRUB je mogoče namestiti tudi na zagonski zapis razdelka. Primerni " +"razdelki so na tem spisku. To pa zahteva uporabo mehanizma blocklist, ki je " +"manj zanesljiv in zato ni priporočen." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Zagonski nalagalnik GRUB je bil nameščen na disku, ki ni več prisoten ali se " +"mu je spremenil enolični identifikator. Važno je, da so jedro GRUBa in " +"moduli ter grub.cfg skladni. Preverite prosim, da je GRUB zapisan na " +"pravilno zagonsko napravo." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Napaka pri pisanju na zagonsko napravo za GRUB. Želite nadaljevati?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Napaka pri nameščanju GRUBa na sledeče naprave:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Želite vseeno nadaljevati? V primeru, da boste nadaljevali se računalnik " +"mogoče ne bo pravilno zagnal." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Nameščanje GRUBa na zagonsko napravo ni uspelo. Želite še enkrat poskusiti?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Mogoče lahko namestite GRUB na katero drugo napravo, preveriti pa morate, da " +"se bo lahko vaš sistem zagnal iz te naprave. Drugače bo posodobitev iz " +"zastarelega GRUB prekinjena ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Želite nadaljevati, ne da bi namestili GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Izbrali ste, da ne boste namestili GRUBa na nobeno napravo. V primeru, da " +"nadaljujete zagonski nalagalnik ne bo pravilno nastavljen. Računalnik bo ob " +"naslednjem zagonu uporabil karkoli je bilo prej nameščeno na zagonskem " +"sektorju. V primeru, da se tam nahaja starejša različica GRUB 2 mogoče ta ne " +"bo uspela naložiti modulov ali brati sedanje nastavitvene datoteke." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"V primeru, da že uporabljate različen zagonski nalagalnik in želite s tem " +"nadaljevati ali pa je to posebno zagonsko okolje kjer ne rabite zagonskega " +"nalagalnika lahko vsekakor nadaljujete. V ostalih primerih bi morali nekam " +"namestiti GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Želite odstraniti GRUB 2 iz /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" +"Želite odstraniti iz /boot/grub vse datoteke, ki se nanašajo na GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Zaradi tega se sistem ne bo mogel zagnati, razen, če uporabite drugi " +"zagonski nalagalnik." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Želite zdaj dokončati pretvorbo v GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Na tem sistemu so še nameščene datoteke iz zastarelega GRUBa, a zdaj je " +"nameščen tudi zagonski zapis GRUB 2 na sledečih diskih:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Zdi se verjetno, da zastareli GRUB ni več v uporabi in da bi morali namesto " +"tega nadgraditi te diske na GRUB 2 ter dokončati pretvorbo v GRUB 2 z " +"odstranitvijo datotek za zastareli GRUB. V primeru, da ne boste izvedli " +"nadgradnje na GRUB 2 lahko pride do nezdružljivosti z novimi paketi in težav " +"pri zagonu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Običajno bi morali dokončati pretvorbo v GRUB 2 razen, če so bili ti " +"zagonski zapisi ustvarjeni pri nameščanju GRUB 2 na drugem operacijskem " +"sistemu." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Ukazna vrstica Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Sledeči ukaz za Linux je vzet iz datoteke /etc/default/grub ali iz parametra " +"`kopt' v datoteki menu.lst sistema GRUB Legacy. Preverite prosim, da je " +"točen in ga po potrebi popravite." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Privzeta ukazna vrstica Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Sledeča vrstica bo uporabljena kot parameter Linuxa za privzeti vnos v " +"meniju, ne pa za reševalni način." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Ukazna vrstica kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Sledeči ukaz za kFreeBSD je vzet iz datoteke /etc/default/grub ali iz " +"parametra `kopt' v datoteki menu.lst sistema GRUB Legacy. Preverite " +"prosim, da je točen in ga po potrebi popravite." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Privzeta ukazna vrstica kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Sledeča vrstica bo uporabljena kot parameter kFreeBSD za privzeti vnos v " +"meniju, ne pa za reševalni način." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "ustvarjena je bila datoteka /boot/grub/device.map" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Datoteka /boot/grub/device.map je bila prepisana s stabilnimi imeni naprav. " +"V večini primerov bo to v prihodnosti močno zmanjšalo potrebo po njenih " +"spremembah. Na vnose v zagonskem meniju, ki jih ustvari GRUB to ne bi smelo " +"imeti učinka." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Ker imate več kot en disk na vašem sistemu je možno, da ste bili odvisni od " +"starega spiska naprav. Preverite prosim ali imate kakšen vnos po meri v " +"zagonskem meniju, ki se naslanja na poimenovanje diskov (hdN) v GRUBu in ga " +"posodobite, če je to potrebno." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"V primeru, da tega sporočila ne razumete ali nimate nobenih vnosov po meri " +"v zagonskem meniju se za to sporočilo ne menite." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "V primeru, da želite, da se GRUB 2 naloži neposredno iz MBRja, lahko v " +#~ "obeh primerih zaženete (kot sistemski skrbnik) sledeči ukaz:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUB ni bil nameščen. Želite nadaljevati?" --- grub2-1.99.orig/debian/po/sk.po +++ grub2-1.99/debian/po/sk.po @@ -0,0 +1,418 @@ +# Slovak translations for grub2 package. +# Copyright (C) 2010 THE grub2'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub2 package. +# Slavko , 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-07-19 07:49+0200\n" +"Last-Translator: Slavko \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Zreťaziť z menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Aktualizačné skripty GRUB zistili nastavenie starej verzie GRUB (Legacy) v /" +"boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Na nahradenie starej verzie GRUB (Legacy) vo vašom systéme, je odporúčané " +"aby bol /boot/grub/menu.lst prispôsobený na zreťazenie (chainload) " +"zavádzacieho obrazu GRUB 2 z vášho existujúceho nastavenia GRUB (Legacy). " +"Tento krok môže byť automaticky vykonaný teraz." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Je odporúčané aby ste schválili zreťazenie GRUB 2 z menu.lst a overili, že " +"nastavenie vášho nového GRUB 2 je funkčné ešte predtým, ako bude zapísaný do " +"vášho MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Nech sa rozhodnete akokoľvek, neskôr môžete nahradiť obraz MBR s GRUB 2 " +"spustením nasledujúceho príkazu s právami root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Zariadenia na inštaláciu GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Balík grub-pc je aktualizovaný. Toto menu vám umožňuje vybrať si, pre ktoré " +"zariadenia bude automaticky spustený grub-install, ak nejaké vyberiete." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Vo väčšine prípadov je odporúčané spustiť automaticky grub-install, aby ste " +"predišli tomu, že máte nainštalované rôzne verzie základného obrazu GRUB a " +"modulov GRUB, či grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Ak si nie ste istý, ktoré zariadenie je nastavené na zavádzanie vo vašom " +"BIOSe, často je dobrý nápad nainštalovať GRUB na všetky." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Poznámka: je možné nainštalovať GRUB aj do zavádzacieho sektora partície a v " +"zozname sú aj niektoré príslušné partície. Avšak, tento spôsob vynúti aby " +"GRUB požil mechanizmus blocklist, ktorý ho robí menej spoľahlivým a preto " +"nie je odporúčaný." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Zavádzač GRUB bol predtým nainštalovaný na disk, ktorý sa už v systéme " +"nenachádza alebo ktorého unikátny identifikátor bol z nejakého dôvodu " +"zmenený. Je dôležité zaistiť, aby nainštalovaný základný obraz GRUB mal " +"rovnakú verziu ako moduly GRUB a grub.cfg. Prosím pre istotu znova " +"skontrolujte, že je GRUB zapisovaný do správnych zavádzacích zariadení." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Zápis GRUBu do zavádzacieho zariadenia zlyhal – pokračovať?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Inštalácia GRUB zlyhala na týchto zariadeniach:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Chcete napriek tomu pokračovať? Ak áno, môže sa stať, že váš počítač " +"nenaštartuje správne." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Zápis GRUB do zavádzacieho zariadenia zlyhal – skúsiť znova?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Možno sa vám podarí nainštalovať GRUB aj na niektoré iné zariadenie, ale " +"musíte skontrolovať, že váš systém dokáže z neho zavádzať. Inak bude " +"aktualizácia zo starého GRUB (Legacy) zrušená." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Pokračovať bez inštalácie GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Zvolili ste si neinštalovať GRUB na žiadne zariadenie, ak budete pokračovať, " +"zavádzač nemusí byť správne nastavený a pri ďalšom štarte tohoto počítača " +"bude použité to, čo bolo v zavádzacom sektore predtým. Ak je v zavádzacom " +"sektore predchádzajúca verzia GRUB 2, nemusí sa jej podariť načítať moduly " +"alebo spracovať aktuálny konfiguračný súbor." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Ak už používate iný zavádzač a chcete ho zachovať, alebo ak používate " +"špeciálne prostredie, v ktorom zavádzač nepotrebujete, potom môžete " +"pokračovať. V opačnom prípade by ste mali niekde GRUB nainštalovať." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Odstrániť GRUB 2 z /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Chcete odstrániť všetky súbory GRUB 2 z /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Týmto nebude možné váš systém naštartovať, kým nebude nainštalovaný iný " +"zavádzač." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Dokončiť konverziu na GRUB 2 teraz?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Tento systém má stále nainštalované súbory zo starého zavádzača GRUB " +"(Legacy), ale má nainštalované aj nové zavádzacie záznamy GRUB 2 na týchto " +"diskoch:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Vyzerá to, že starý GRUB (Legacy) už nie je používaný, a tak môžete na " +"týchto diskoch aktualizovať obrazy GRUB 2 a dokončiť konverziu na GRUB 2 " +"odstránením súborov starého GRUB (Legacy). Ak nezaktualizuje tieto obrazy " +"GRUB 2, potom nemusia byť kompatibilné s novými balíkmi a môžu narušiť " +"správne zavádzanie systému." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Mali by ste dokončiť konverziu na GRUB 2, ibaže boli tieto zavádzacie " +"záznamy vytvorené inštaláciou GRUB 2 iného operačného systému." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linuxový príkazový riadok:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Nasledujúci príkazový riadok Linuxu bol získaný z /etc/default/grub alebo z " +"parametra 'kopt' z menu.lst starého GRUB (Legacy). Skontrolujte prosím jeho " +"správnosť a prípadne ho upravte. Príkazový riadok môže byť aj prázdny." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Predvolený Linuxový príkazový riadok:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Nasledujúci reťazec bude použitý ako Linuxové parametre predvolenej položky " +"menu, ale nie pre záchranný režim." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Príkazový riadok kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Nasledujúci príkazový riadok kFreeBSD bol získaný z /etc/default/grub alebo " +"z parametra 'kopt' z menu.lst starého GRUB (Legacy). Skontrolujte prosím " +"jeho správnosť a prípadne ho upravte. Príkazový riadok môže byť aj prázdny." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Predvolený príkazový riadok kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Nasledujúci reťazec bude použitý ako kFreeBSD parametre predvolenej položky " +"menu, ale nie pre záchranný režim." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map bol aktualizovaný" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Súbor /boot/grub/device.map bol upravený tak, aby používal stabilné mená " +"zariadení. Väčšinou to významne zníži potrebu zmien v budúcnosti a položky " +"zavádzacieho menu, generované GRUBom, by tým nemali byť ovplyvnené." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Avšak, keďže máte vo svojom systéme viac ako jeden disk, je možné, že systém " +"závisí na starej mape zariadení. Skontrolujte prosím, že nepoužívate žiadne " +"položky menu, ktoré závisia na číslovaní zariadení GRUBu (hdN) a prípadne " +"ich aktualizuje." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Ak nerozumiete tejto správe, alebo ak nemáte žiadne vlastné položky " +"zavádzacieho menu, môžete túto správu ignorovať." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Keď sa rozhodnete zavádzať GRUB 2 priamo z MBR, môžete to urobiť pomocou " +#~ "nasledujúceho príkazu (ako root):" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Inštalácia GRUB zlyhala. Pokračovať?" --- grub2-1.99.orig/debian/po/ro.po +++ grub2-1.99/debian/po/ro.po @@ -0,0 +1,470 @@ +# translation of ro.po to Romanian +# Romanian translations for grub package +# Traducerea în limba română pentru pachetul grub. +# Copyright (C) 2007 THE grub'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub package. +# +# Eddy Petrișor , 2007,2008. +# ioan-eugen STAN , 2010. +# Lucian Adrian Grijincu , 2010. +msgid "" +msgstr "" +"Project-Id-Version: ro\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-12-12 20:08+0200\n" +"Last-Translator: Andrei POPESCU \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: 2\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Încărcare înlănțuită din menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Scripturile de înnoire ale lui GRUB au detectat în /boot/grub o configurație " +"pentru vechiul GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Pentru a înlocui vechea versiune a lui GRUB, se recomandă modificarea " +"fișierului /boot/grub/menu.lst, astfel încât să încarce o imagine GRUB 2 din " +"configurația existentă. Acest pas poate fi făcut chiar acum în mod automat." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Este recomandat să acceptați înlănțuirea lui GRUB 2 din menu.lst și să " +"verificați că noua configurație pentru GRUB 2 funcționează, înainte de " +"instalarea în înregistrarea principală de boot (MBR)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Indiferent ce decideți, puteți înlocui ulterior imaginea MBR veche cu GRUB 2 " +"executând următoarea comandă cu privilegii root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Dispozitive pentru a instala GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Pachetul grub-pc este în curs de înnoire. Acest meniu vă permite să alegeți " +"pentru ce dispozitive doriți să ruleze automat grub-install, dacă este cazul." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Rularea automată a utilitarului grub-install este recomandată în majoritatea " +"situațiilor, pentru ca imaginea GRUB instalată fie sincronizată cu modulele " +"GRUB sau grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Dacă nu știți sigur care unitate este desemnată ca unitatea de pornire de " +"către BIOS este o idee bună să instalați GRUB pe toate unitățile." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Notă: este posibil să instalați GRUB în înregistrarea boot a unei partiții, " +"iar unele partiții adecvate sunt prezentate aici. Totuși, aceasta va forța " +"GRUB să utilizeze mecanismul blocklist, care este mai puțin fiabil. În " +"consecință această metodă nu este recomandată." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Încărcătorul de sistem GRUB a fost instalat pe un disc care nu mai este " +"prezent, sau al cărui identificator unic a fost modificat dintr-un motiv " +"oarecare. Este important să vă asigurați că imaginea GRUB rămâne " +"sincronizată cu modulele GRUB și grub.cfg. Vă rugăm verificați din nou, " +"pentru a vă asigura că GRUB este scris pe dispozitivul boot corect." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Scrierea GRUB pe dispozitivul boot a eșuat. Se continuă?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Instalarea GRUB pe următoarele dispozitive a eșuat:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Doriți să continuați oricum? Dacă da, este posibil ca sistemul să nu " +"pornească corespunzător." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Scrierea GRUB pe dispozitivul de pornire a eșuat. Se încearcă din nou?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Puteți instala GRUB pe alt dispozitiv, însă ar trebui să verificați dacă " +"sistemul va porni de pe acel dispozitiv. Altfel, înnoirea de la GRUB Legacy " +"va fi anulată." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Continuați fără să instalați GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Ați ales să nu instalați GRUB pe niciun dispozitiv. Dacă veți continua, este " +"posibil ca încărcătorul de sistem să nu fie configurat corespunzător, iar la " +"pornirea calculatorului acesta va folosi ce se afla deja în sectorul de " +"pornire. Dacă există o versiune mai veche de GRUB 2 în sectorul de pornire " +"este posibil ca aceasta să nu poată încărca modulele sau să proceseze " +"fișierul de configurare curent." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Dacă folosiți deja un alt încărcător de sistem și doriți să continuați, sau " +"dacă acesta este un mediu special în care nu aveți nevoie de încărcător de " +"sistem, atunci ar trebui să continuați. Altfel, ar trebui să instalați GRUB " +"undeva." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Se îndepărtează GRUB 2 din /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Doriți ca toate fișierele GRUB 2 să fie îndepărtate din /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Aceasta va împiedica pornirea sistemului, în afara cazului în care este " +"instalat un alt încărcător de sistem." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Terminați acum conversia la GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Acest sistem mai are instalate fișiere din GRUB Legacy, dar acum are " +"instalat și GRUB 2 pe aceste discuri:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Este foarte probabil ca GRUB Legacy să nu mai fie folosit și ar trebui să " +"actualizați imaginile GRUB 2 pe aceste discuri și să definitivați trecerea " +"la GRUB 2 îndepărtând fișierele GRUB Legacy vechi. Dacă nu actualizați " +"aceste imagini GRUB 2, ele ar putea fi incompatibile cu noile pachete și ar " +"putea împiedica sistemul să pornească corespunzător." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"În general este bine să încheiați conversia la GRUB 2, în afara cazului în " +"care acele fișiere au fost create de o instalare GRUB 2 a altui sistem de " +"operare." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linia de comandă Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Această linie de comandă Linux a fost extrasă din /etc/default/grub sau " +"parametrul „kopt” din fișierul menu.lst al vechiului GRUB. Verificați " +"corectitudinea acesteia și modificați-o, dacă este nevoie." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linia de comandă implicită Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Următorul șir va fi folosit ca parametru pentru Linux pentru poziția " +"implicită din meniu, dar nu și pentru cea de recuperare." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Linia de comandă kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Această linie de comandă kFreeBSD a fost extrasă din /etc/default/grub sau " +"parametrul „kopt” din fișierul menu.lst al vechiului GRUB. Verificați " +"corectitudinea acesteia și modificați-o, dacă este nevoie." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Linia de comandă implicită kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Următorul șir va fi folosit ca parametru pentru kFreeBSD pentru poziția " +"implicită din meniu, dar nu și pentru cea de recuperare." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map a fost regenerat" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Fișierul /boot/grub/device.map a fost rescris să folosească nume stabile de " +"dispozitive. În majoritatea cazurilor, acest lucru va reduce semnificativ " +"nevoia de a-l modifica ulterior și intrările în meniu generate de grub nu ar " +"trebui să fie afectate. " + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Totuși, deoarece există mai mult de un disc în sistem, este posibil ca " +"sistemul să depindă de vechea hartă de dispozitive. Verificați dacă aveți " +"intrări personalizate în meniu care depind de numerotarea GRUB (hdN) și " +"actualizați-le dacă este cazul." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Dacă nu înțelegeți acest mesaj, sau nu există poziții personalizate în " +"meniu, îl puteți ignora." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "În orice caz, atunci când veți dori ca GRUB 2 sa fie încărcat direct din " +#~ "MBR, puteți rula (ca root) comanda următoare:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Instalarea GRUB a eșuat. Continuați?" + +#~ msgid "GRUB 1.95 numbering scheme transition" +#~ msgstr "Tranziția la schema de numerotare pentru GRUB 1.95" + +#~ msgid "" +#~ "As of version 1.95, GRUB 2 has changed its numbering scheme. Partitions " +#~ "are now counted starting from 1 rather than 0. This is to make it " +#~ "consistent with device names of Linux and the other kernels used in " +#~ "Debian. For example, when using Linux as the kernel, \"(hd0,1)\" refers " +#~ "to the same partition as the /dev/sda1 device node." +#~ msgstr "" +#~ "Începând cu versiunea 1.95, GRUB 2 și-a schimbat schema de numerotare. " +#~ "Partițiile sunt acum numerotate începând de la 1 (în loc de 0). Acest " +#~ "lucru este consecvent cu numele de dispozitive ale Linux-ului și a altor " +#~ "nuclee folosite în Debian. De exemplu, când se folosește nucleul Linux, " +#~ "„(hd0,1)” se referă la aceiași partiție ca și nodul de dispozitiv /dev/" +#~ "sda1." + +#~ msgid "" +#~ "Because of this, there's a chance your system becomes unbootable if " +#~ "update-grub(8) is run before GRUB is updated, generating a grub.cfg file " +#~ "that your installed GRUB won't yet be able to parse correctly. To ensure " +#~ "your system will be able to boot, you have to:" +#~ msgstr "" +#~ "De aceea, există riscul ca sistemul să nu mai pornească dacă update-grub" +#~ "(8) este rulat înainte ca GRUB să fie actualizat, generând astfel un " +#~ "fișier grub.cfg pe care GRUB-ul instalat nu-l va putea încă analiza " +#~ "corect. Pentru a vă asigura că sistemul va putea porni, va trebui să:" + +#~ msgid "" +#~ " - Reinstall GRUB (typically, by running grub-install).\n" +#~ " - Rerun update-grub to generate a new grub.cfg." +#~ msgstr "" +#~ " - Reinstalați GRUB (în mod normal, prin rularea lui grub-install).\n" +#~ " - Rulați din nou update-grub pentru a genera un nou grub.cfg." --- grub2-1.99.orig/debian/po/ar.po +++ grub2-1.99/debian/po/ar.po @@ -0,0 +1,445 @@ +# translation of grub.ar.po to Arabic +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Ossama M. Khayat , 2008, 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub.ar\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-07-16 02:38+0300\n" +"Last-Translator: Ossama M. Khayat \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "تفعيل التحميل التسلسلي من menu.lst؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "عثرت بريمجيات ترقية GRUB على إعداد سابق في /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"لتستبدل النسخة السابقة من GRUB في نظامك، يُستحسن تعديل الملف /boot/grub/menu." +"lst لتحميل GRUB 2 تسلسلياً من إعداد GRUB السابق. ويمكن تنفيذ هذه الخطوة " +"تلقائياً الآن." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"يُستحسن أن تقبل التحميل التسلسلي لمدير الإقلاع GRUB من خلال الملف menu.lst، " +"وتحقق من أن إعداد GRUB 2 صالح لاستخدامك، قبل أن تُبّته مباشرة على سجل الإقلاع " +"الرئيسي MBR الخاص بك." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "تعذر تثبيت GRUB على الأجهزة التالية:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +#, fuzzy +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} م.ب.، ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} م.ب.، ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "تعذر تثبيت GRUB على الأجهزة التالية:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"هل تريد الاستمرار على أي حال؟ إن فعلت، فقد لا يتمكن جهازك من بدء التشغيل كما " +"يجب." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "تعذر تثبيت GRUB. تريد المحاولة مجدداً؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"قد تتمكن من تثبيت GRUB على جهاز آخر، لكن يجب أن تتحقق من إمكانية نظامك " +"الإقلاع من ذلك الجهاز. وإن لم يكن كذلك، فسيتم إلغاء الترقية من نظام GRUB " +"القديم." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "تريد الاستمرار دون تثبيت GRUB؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is an " +#| "earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"اخترت عدم تثبيت GRUB على أية جهاز. إن استمريت، فقد لا يتم تهيئة محمّل الإقلاع " +"بشكل صحيح، كما يستخدم حاسبك أي نظام موجود على قطاع الإقلاع مسبقاً. إن كان " +"هناك نسخة سابقة من GRUB 2 في قطاع الإقلاع، فقد لا يستطيع تحميل الوحدات أو " +"قراءة ملف التهيئة الحالي بشكل صحيح." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"إن كنت تستخدم محمل إقلاع آخر وتريد الاستمرار باستخدامه، أو إن كانت لديك بيئة " +"عمل خاصة حيث لا تحتاج إلى محمل إقلاع، فيجب عليك الاستمرار على أي حال. وإلا " +"يجب أن تقوم بتثبيت GRUB في مكان ما." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "إنهاء التحويل إلى GRUB 2 الآن؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"لا زال النظام يحتوي على ملفات GRUB قديمة مثبتة، كما يحتوي أيضاً على سجلات " +"إقلاع GRUB 2 على هذه الأقراص:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"يبدو أن GRUB القديم لم يعد مستخدماً، ويجب عليك الترقية إلى GRUB 2 وإنهاء " +"التحويل إلى GRUB 2 بإزالة ملفات GRUB القديمة. وإن لم تقم بعملية الترقية هذه، " +"فقد لا يكون نظام الإقلاع متوافقاً مع الحزم الجديدة ويتسبب ذلك بعدم إقلاع نظام " +"كما هو مفترض." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"بشكل عام، يجب عليك إنهاء التحويل إلى GRUB 2 إلا إن كانت سجلات الإقلاع هذه قد " +"أنشأها تثبيت GRUB 2 لنظام تشغيل آخر." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "سطر أوامر لينكس:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"سطر أوامر لينكس التالي تم استخراجه من /etc/default/grub أو\n" +"مُعطى `kopt' في ملف menu.lst الخاص بحزمة GRUB القديمة. رجاءً تحقق من\n" +"صحته وقم بتعديله إن كانت هناك ضرورة." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "سطر أوامر لينكس الافتراضي:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"سيتم استخدام سلسلة الحروف التالية كمُعطيات لتشغيل النظام لمُدخل القائمة\n" +"الافتراضي ولكن ليس لوضع الإنقاذ." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "سطر أوامر KFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"سطر أوامر KFreeBSD التالي تم استخراجه من /etc/default/grub أو\n" +"مُعطى `kopt' في ملف menu.lst الخاص بحزمة GRUB القديمة. رجاءً تحقق من صحته وقم " +"بتعديله إن كانت هناك ضرورة." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "سطر أوامر KFreeBSD الافتراضي:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"سيتم استخدام النص التالي كمُعطى KFreeBSD لمُدخل القائمة\n" +"الافتراضي ولكن ليس لوضع الإنقاذ." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "تم إعادة إنشاء /boot/grub/device.map" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"تم إعادة كتابة الملف /boot/grub/device.map ليستخدم أسماء الأجهزة الصحيحة. في " +"معظم الحالات، سيقلل هذا العمل الحاجة إلى التغييرات بشكل كبير في المستقبل، " +"كما أن مُدخلات قائمة إقلاع GRUB الناتجة لن تتأثر." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"على كل، حيث أنه لديك اكثر من قرص في نظامك، من المحتمل أنه كان يعتمد على " +"خريطة الأجهزة القديمة. فالرجاء التحقق مما إذا كان لديك أية مُدخلات قائمة " +"مخصصة تعتمد على طريقة GRUB لترقيم الأجهزة، (hdN)، وقم بتحديثها إن كانت " +"ضرورياً." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"إن لم تعرف مقصود هذه الرسالة، أو إن لم يكن لديك أية مُدخلات مُخصصة في القائمة، " +"يمكنك تجاهل هذه الرسالة." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "في أي من الحالتين، متى ما أردت تحميل GRUB 2 مباشرة من سجل الإقلاع الرئيسي " +#~ "MBR، يمكنك ذلك بإصدار الأمر التالي كمُستخدم root:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "تعذر تثبيت GRUB. تريد الاستمرار؟" --- grub2-1.99.orig/debian/po/nl.po +++ grub2-1.99/debian/po/nl.po @@ -0,0 +1,417 @@ +# Dutch translation of grub2 debconf templates. +# Copyright (C) 2008-2011 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub2 package. +# Paul Gevers , 2008-2010. +# Jeroen Schot , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-14\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-12-06 08:19+0100\n" +"Last-Translator: Jeroen Schot \n" +"Language-Team: Debian l10n Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Doorschakelen vanuit menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUBs opwaardeerscripts hebben een oude-stijl GRUB opstelling in /boot/grub " +"gedetecteerd." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Om de oude-stijl versie van GRUB op uw systeem te vervangen wordt het " +"aangeraden om het /boot/grub/menu.lst bestand zo te laten aanpassen dat er " +"een GRUB 2 opstartopname wordt geladen vanuit uw bestaande oude-stijl GRUB " +"opstelling. Deze stap kan nu automatisch worden uitgevoerd." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"U wordt aangeraden om het doorschakelen van GRUB 2 vanuit menu.lst te " +"accepteren, en daarna te verifiëren dat de nieuwe GRUB 2 opstelling werkt " +"voordat het in de MBR (Master Boot Record) wordt geïnstalleerd." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Waar u ook voor kiest, u kunt de oude MBR opname later door GRUB 2 vervangen " +"door het volgende commando uit te voeren (met beheerdersrechten (root)):" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB installatie apparaten:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Het grub-pc pakket wordt bijgewerkt. Dit menu stelt u in staat om de " +"apparaten te selecteren waar u wilt dat grub-install automatisch gedraaid " +"wordt." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Het wordt over het algemeen aanbevolen om grub-install automatisch te laten " +"draaien om te voorkomen dat de geïnstalleerde GRUB kernopname niet meer " +"gesynchroniseerd is met GRUB modules of grub.cfg. " + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Indien u niet zeker weet welk station door de BIOS wordt gebruikt als " +"opstartstation, is het vaak een goed idee om GRUB op alle stations te " +"installeren." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Merk op dat het ook mogelijk is om GRUB naar opstartstructuren op partities " +"te installeren. Enkele geschikte partities worden hier aangeboden. Dit wordt " +"echter niet aangeraden omdat het GRUB dwingt om een bloklijstmechanisme te " +"gebruiken waar het minder betrouwbaar van wordt." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Het GRUB opstartprogramma was voorheen geïnstalleerd op een schijf die niet " +"langer aanwezig is, of waarvan de unieke identificatie is veranderd. Het is " +"belangrijk om ervoor te zorgen dat de geïnstalleerde GRUB kernopname " +"gesynchroniseerd blijft met GRUB modules en grub.cfg. Controleer of GRUB wel " +"naar het juiste opstartapparaat wordt geschreven." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Schrijven van GRUB naar opstartapparaat mislukt. Doorgaan?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Het installeren van de volgende apparaten is mislukt: " + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Wilt u desondanks verder gaan? Verder gaan kan ervoor zorgen dat uw computer " +"niet meer goed opstart." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Schrijven van GRUB naar opstartapparaat mislukt. Opnieuw proberen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"U kunt proberen om GRUB te installeren op een ander apparaat, maar het wordt " +"aangeraden om eerst te controleren of u kunt opstarten vanaf dat apparaat. " +"Als u dit niet probeert, zal het nu opwaarderen van de oude-stijl GRUB " +"geannuleerd worden." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Verder gaan zonder GRUB te installeren?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"U heeft ervoor gekozen om GRUB niet te installeren. Als u nu doorgaat zou " +"het kunnen dat het opstartprogramma niet correct geconfigureerd is en dat de " +"computer bij de volgende start de informatie gebruikt die vroeger in de " +"opstartsector stond. Indien daar een eerdere versie van GRUB 2 staat, kan " +"het zijn dat modules niet geladen kunnen worden of dat het huidige " +"configuratiebestand niet verwerkt kan worden." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"U kunt verder gaan als u al een ander opstartprogramma gebruikt en deze wilt " +"blijven gebruiken, of als dit een speciale omgeving is waar u geen " +"opstartprogramma nodig heeft. In de overige gevallen wilt u waarschijnlijk " +"GRUB installeren." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "GRUB 2 uit /boot/grub verwijderen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Wilt u dat alle GRUB 2 bestanden worden verwijderd uit /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Dit heeft tot gevolg dat het systeem niet opgestart kan worden tenzij er een " +"ander opstartprogramma is geïnstalleerd." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Wilt u de conversie naar GRUB 2 nu afronden?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Dit systeem heeft nog steeds bestanden van het oude-stijl GRUB " +"opstartprogramma geïnstalleerd, maar er zijn nu ook GRUB 2 opstartopnames " +"geïnstalleerd op de volgende schijven:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Het lijkt erop dat de oude-stijl GRUB niet langer gebruikt wordt en het " +"wordt aanbevolen dat u de conversie naar GRUB 2 afrond door de GRUB 2 " +"opnames op deze schijven op te waarderen en de oude-stijl GRUB bestanden te " +"verwijderen. Indien u de GRUB 2 opnames niet opwaardeert, is het mogelijk " +"dat ze incompatibel zijn met de nieuwe pakketten en kunnen ze uw systeem " +"verhinderen correct op te starten." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"In het algemeen zult u de conversie naar GRUB 2 willen afmaken, tenzij deze " +"opstartopnames gemaakt zijn door een GRUB 2 op een ander besturingssysteem." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux-commandoregel:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"De volgende Linux-commandoregel is gebaseerd op /etc/default/grub of op de " +"'kopt'-parameter gevonden in het menu.lst bestand van de oude-stijl GRUB. " +"Wilt u deze op correctheid controleren en indien nodig aanpassen? De " +"commandoregel mag leeg zijn." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Standaard Linux-commandoregel:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"De volgende regel zal, behalve in de herstelmodus, gebruikt worden voor de " +"Linux parameters in de standaard menuoptie." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD-commandoregel:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"De volgende kFreeBSD-commandoregel is gebaseerd op /etc/default/grub of op " +"de 'kopt'-parameter gevonden in het menu.lst bestand van de oude-stijl GRUB. " +"Wilt u deze op correctheid controleren en indien nodig aanpassen? De " +"commandoregel mag leeg zijn." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Standaard kFreeBSD-commandoregel:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"De volgende regel zal, behalve in de herstelmodus, gebruikt worden voor de " +"kFreeBSD parameters in de standaard menuoptie." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map is opnieuw aangemaakt" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Het bestand /boot/grub/device.map is zo herschreven dat het stabiele " +"apparaatnamen gebruikt. In de meeste gevallen zal dit de noodzaak van " +"toekomstige veranderingen verlagen en zullen door GRUB gegenereerde " +"opstartmenu-items ongewijzigd zijn." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Het is mogelijk dat het systeem afhankelijk was van de oude apparatenlijst, " +"aangezien er meer dan één schijf aanwezig is. Het wordt aanbevolen dat u de " +"opstartmenu-items controleert op het gebruik van GRUB's schijfbenummering " +"(hdN) en deze zo nodig aanpast." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"U kunt deze melding negeren indien u deze melding niet begrijpt, of als er " +"geen zelfgemaakte menu-items aanwezig zijn." --- grub2-1.99.orig/debian/po/pt.po +++ grub2-1.99/debian/po/pt.po @@ -0,0 +1,430 @@ +# Portuguese translation for grub2's debconf messages +# Copyright (C) 2007 Miguel Figueiredo +# This file is distributed under the same license as the grub2 package. +# +# Miguel Figueiredo , 2007, 2010, 2011. +# Ricardo Silva , 2008. +# Tiago Fernandes , 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.98-1\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-09-11 20:39+0100\n" +"Last-Translator: Miguel Figueiredo \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Carregar em cadeia a partir do menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Os scripts de actualização do GRUB detectaram uma configuração do GRUB " +"Legacy em /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Por forma a substituir a versão antiga do GRUB que se encontra no sistema, é " +"recomendado que o /boot/grub/menu.lst seja ajustado para permitir carregar " +"imagem de boot do GRUB 2 a partir da configuração actual do GRUB antigo. " +"Esta etapa agora pode ser feita automaticamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"É recomendado que aceite carregar em cadeia o GRUB 2 a partir do menu.lst, e " +"verificar que a configuração do novo GRUB 2 está funcional, antes de ser " +"escrito no MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Qualquer que seja a sua decisão, pode substituir mais tarde a antiga imagem " +"do MBR com o GRUB 2, executando como root o seguinte comando:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "dispositivos de instalação GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"O pacote grub-pc está a ser actualizado. Este menu permite-lhe seleccionar " +"quais os dispositivos onde gostaria que o grub-install corresse " +"automaticamente, se algum." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Correr o grub-install automaticamente é recomendado na maior parte das " +"situações, para prevenir que a imagem core do GRUB instalada não fique " +"dessincronizada com os módulos do GRUB ou grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Se não têm a certeza de qual a drive designada como driver de arranque pela " +"sua BIOS, é normalmente boa ideia instalar o GRUB em todas elas." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: é possível instalar o GRUB no boot record de partições, e são " +"oferecidas algumas partições aqui. No entanto, isto força o GRUB a utilizar " +"o mecanismo blocklist, que o torna menos fiável. Assim não é recomendável." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"O boot loader do GRUB foi instalado num disco que não se encontra presente, " +"ou então o seu identificador único foi alterado por alguma razão. É " +"importante ter a certeza que a imagem core do GRUB se mantêm sincronizada " +"com os módulos do GRUB e grub.cfg. Por favor verifique de novo para ter a " +"certeza de que o GRUB é escrito nos dispositivos apropriados de arranque." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "A escrita do GRUB para o dispositivo de arranque falhou - continuar?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "A instalação do GRUB falhou nos seguintes dispositivos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Pretende continuar de qualquer modo? Em caso afirmativo, o seu computador " +"pode não arrancar em condições. " + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"A escrita do GRUB para o dispositivo de arranque falhou - tentar de novo?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Poderá instalar o GRUB noutro dispositivo, no entanto deverá verificar que o " +"seu sistema arranca desse dispositivo. Se não o fizer, a actualização a " +"partir do GRUB Legacy será cancelada." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Continuar sem instalar o GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Escolheu não instalar o GRUB em qualquer dispositivo. Se continuar, o gestor " +"de arranque pode não ficar correctamente configurado, e quando o computador " +"arrancar da próxima vez irá usar o que estiver anteriormente no sector de " +"arranque. Se existir uma versão anterior do GRUB 2 no sector de arranque, " +"poderá não ser capaz de carregar os módulos e gerir o ficheiro de " +"configuração actual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Se já estiver a utilizar um gestor de arranque diferente e quiser continuar " +"a fazê-lo, ou se se tratar de um ambiente especial onde não necessita de " +"gestor de arranque, deverá então continuar de qualquer modo. Caso contrário, " +"deverá instalar o GRUB em algum sitio." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Remover o GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Deseja remover todos os ficheiros do GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Isto fará com que o sistema não arranque até que seja instalado outro gestor " +"de arranque." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Finalizar a conversão para o GRUB 2 agora?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Este sistema ainda tem ficheiros instalados do gestor de arranque GRUB " +"Legacy, no entanto agora também tem registos de arranque do GRUB 2 " +"instalados nos discos seguintes:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Parece provável que o GRUB Legacy não esteja a ser usado, deve fazer a " +"actualização das imagens do GRUB 2 nestes discos e finalizar a conversão " +"para o GRUB 2 removendo os ficheiros antigos do GRUB Legacy. Se não " +"actualizar estas imagens GRUB 2 então estas podem ser incompatíveis com " +"novos pacotes e provocar uma falha no arranque do sistema." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Normalmente deverá finalizar a conversão para o GRUB 2 a não ser que estes " +"registos de arranque tenham sido criados por uma instalação do GRUB 2 noutro " +"sistema operativo." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linha de comandos do Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A seguinte linha de comandos Linux foi extraída de /etc/default/grub ou do " +"parâmetro `kopt' no menu.lst do GRUB Legacy. Por favor verifique que está " +"correcta, e modifique se necessário. É permitido que a linha de comandos " +"esteja vazia." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linha de comandos padrão do Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"A seguinte linha será utilizada como parâmetros para o Linux na entrada " +"predefinida do menu, mas não para o modo de recuperação." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "linha de comandos kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A seguinte linha de comandos kFreeBSD foi extraída a partir de /etc/default/" +"grub ou do parâmetro `kopt' no menu.lst do GRUB Legacy. Por favor verifique " +"que está correcta, e modifique se necessário. É permitido que a linha esteja " +"vazia." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Linha de comandos padrão do kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"A seguinte linha será utilizada como parâmetros para o kFreeBSD para a " +"entrada por omissão do menu, mas não para o modo de recuperação." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "O /boot/grub/device.map foi recriado" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"O ficheiro /boot/grub/device.map foi reescrito para usar nomes de " +"dispositivos estáveis. Na maioria dos casos, esta acção reduz " +"significativamente a necessidade de alterações no futuro e as entradas de " +"menu geradas pelo GRUB não deverão ser afectadas." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"No entanto, desde que está presente no sistema mais do que um disco, é " +"possível que o sistema esteja dependente do mapa antigo de dispositivos " +"(device map). Por favor verifique se tem algumas entradas personalizadas no " +"menu de arranque que dependam da numeração de drives do GRUB (hdN), e " +"actualize-as se necessário." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Se não entende esta mensagem ou se não tiver entradas personalizadas no menu " +"de arranque, pode ignorar esta mensagem." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Em qualquer dos casos, quando quiser que o GRUB 2 seja carregado " +#~ "directamente a partir do MBR, pode fazê-lo executando (como root) o " +#~ "seguinte comando: " + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "A instalação do GRUB falhou. Continuar?" --- grub2-1.99.orig/debian/po/eo.po +++ grub2-1.99/debian/po/eo.po @@ -0,0 +1,416 @@ +# grub2 po-debconf translation to Esperanto +# Copyright (C) 2010, 2011 Software in the Public Interest +# This file is distributed under the same license as the grub2 package. +# Felipe Castro , 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-06-29 21:08-0300\n" +"Last-Translator: Felipe Castro \n" +"Language-Team: Esperanto \n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Ĉu ĉen-ŝargi (chainload) el menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Aktualigaj skriptoj de GRUB detektis agordon de la malaktuala GRUB en /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Por anstataŭigi la malaktualan version de GRUB en via sistemo, oni " +"rekomendas ke /boot/grub/menu.lst estu akomodita por ŝargi je ekŝarga bildo " +"GRUB 2 el via ekzistanta agordo de malaktuala GRUB. Tiu ĉi paŝo povas esti " +"aŭtomate farata nun." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Oni rekomendas ke vi akceptu ĉen-ŝargi je GRUB 2 el menu.lst, kaj kontrolu " +"ĉu via nova agordo de GRUB 2 bone funkcias antaŭ ol ĝi estu skribata al la " +"MBR (Mastra Ekŝarga Registro)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Kia ajn estu via decido, per GRUB 2 vi povos poste anstataŭigi la malnovan " +"bildon MBR, uzante la jenan komandon kiel root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Aparatoj instalataj de GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"La pako grub-pc estas ĝisdatigata. Tiu ĉi menuo ebligas al vi elekti iujn " +"ajn aparatojn por esti aŭtomate instalotaj de grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Lanĉi grub-install aŭtomate estas rekomendinda plej kutime, por eviti ke la " +"instalita kerna bildo GRUB malsinkroniĝu kun la moduloj GRUB aŭ grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Se vi ne certas pri kiu pelilo estas difinita kiel ekŝarga por via BIOS, " +"ordinare estas bona ideo instali GRUB por ĉiuj el ili." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Rimarko: eblas instali GRUB ankaŭ al diskpartaj ekŝargaj registroj, kaj " +"kelkaj taŭgaj diskpartoj estas disponigataj ĉi tie. Tamen, tio devigas ke " +"GRUB uzu meĥanismon bloklisto, kio igas ĝin malpli fidinda, do tio ne estas " +"rekomendinda afero." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"La ekŝargilo GRUB estis antaŭe instalita al disko kiu ne plu ekzistas, " +"aŭ kies unika identigilo ŝanĝis ial ajn. Estas grave certigi ke la instalita " +"kerna bildo GRUB teniĝu sinkrona kun la moduloj GRUB kaj grub.cfg. Bonvolu " +"rekontroli por certigi ke GRUB estas skribota al taŭgaj ekŝargaj aparatoj." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Skribado de GRUB al ekŝarga aparato malsukcesis - ĉu daŭrigi?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB malsukcesis instali al la jenaj aparatoj:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Ĉu vi volas daŭrigi iel ajn? Se jes, eble via komputilo ne ekŝargiĝu ĝuste." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Skribado de GRUB al ekŝarga aparato malsukcesis - ĉu reprovi?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Vi povas instali GRUB en iu alia aparato, kvankam vi devos kontroli ĉu via " +"sistemo ekŝargiĝos el tiu aparato. Alimaniere, la aktualigo el malnova GRUB " +"estos nuligata." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Ĉu daŭrigi sen instali GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Vi elektis ne instali GRUB al iu ajn aparato. Se vi daŭrigas, la ekŝargilo " +"eble ne estos ĝuste agordita, kaj kiam tiu ĉi komputilo sekve ekŝaltos, ĝi " +"uzos kion ajn estu antaŭe en la ekŝarga sektoro. Se ekzistas pli frua versio " +"de GRUB 2 en la ekŝarga sektoro, ĝi eble ne povos ŝargi je moduloj aŭ trakti " +"la nunan agordo-dosieron." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Se vi jam uzas malsaman ekŝargilon kaj vi volas daŭrigi kun tio, aŭ se tio " +"ĉi estas speciala medio kie vi ne bezonas ekŝargilon, tiam vi devos daŭrigi " +"tiel mem. Alie, vi devos instali GRUB ien ajn." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Ĉu forviŝi GRUB 2 el /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Ĉu vi volas forviŝi ĉiujn dosierojn GRUB 2 el /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Tio ĉi igos la sistemon ne ekŝargebla, krom se alia ekŝargilo estu instalita." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Ĉu finigi konverton al GRUB 2 nun?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Tiu ĉi sistemo ankoraŭ havas dosierojn el la malaktuala ekŝargilo GRUB " +"instalita, sed ĝi nun ankaŭ havas ekŝargajn registrojn de GRUB 2 instalitaj " +"en tiuj ĉi diskoj: " + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Ŝajnas ke la malaktuala GRUB ne plu estas uzata, kaj ke vi devos anstataŭe " +"aktualigi al bildoj GRUB 2 en tiuj ĉi diskoj, kaj finigi la konverton al " +"GRUB 2 forigante malnovajn malaktualajn dosierojn GRUB. Se vi ne aktualigos " +"tiujn ĉi bildojn GRUB 2, tiel ili povos esti malkongruaj al la novaj pakoj " +"igante ke via sistemo ĉesu ekŝargi senprobleme." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Vi devos ordinare finigi la konverton al GRUB 2, malkondiĉe ke tiuj ĉi " +"ekŝarg-registroj estu kreitaj de sistemo kun GRUB 2 instalita, en alia " +"operaciuma sistemo." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linuksa komand-linio:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La jena linuksa komand-linio estas elprenita el /etc/default/grub aŭ el la " +"parametro 'kopt' en la menu.lst de malaktuala GRUB. Bonvolu kontroli ĉu ĝi " +"estas korekta, kaj modifu ĝin laŭ neceso. Estas permesate ke la komand-linio " + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linuksa implicita komand-linio:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"La jena ĉeno estos uzata kiel linuksajn parametrojn por la ordinara menuero " +"sed ne por la restariga reĝimo." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Ordon-linio de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La jena linuksa komand-linio de kFreeBSD estas elprenita el /etc/default/" +"grub aŭ el la parametro 'kopt' en la menu.lst de malaktuala GRUB. Bonvolu " +"kontroli ĉu ĝi estas korekta, kaj modifu ĝin laŭ neceso. Estas permesate ke " +"la komand-linio estu malplena." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Implicita komand-linio de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"La jena ĉeno estos uzata kiel parametrojn de kFreeBSD por la ordinara " +"menuero sed ne por la restariga reĝimo." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map estas regenerita" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"La dosiero /boot/grub/device.map estas reskribita por uzi stabilajn aparat-" +"nomojn. En la plejparto de la situacioj, tio devus multe malpliigi la " +"bezonon ŝanĝi ĝin estonte, kaj ekŝarg-menueroj kreitaj de GRUB ne devos esti " +"influataj." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Tamen, ĉar vi havas pli ol unu disko en via sistemo, eblas ke la sistemo " +"dependas de malnova aparat-mapo. Bonvolu kontroli ĉu ekzistas iun " +"personigitan ekŝarg-menueron, kiu surbaziĝas en disk-numerigo de GRUB (hdN), " +"kaj ĝisdatigu ĝin se necese." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Se vi ne komprenas tiun ĉi mesaĝon, aŭ se vi havas neniun personigitan " +"ekŝargan menueron, vi povas preteratenti ĉi tiun mesaĝon." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Ĉiukondiĉe, kiam vi volos ke GRUB 2 estu rekte ŝargata el MBR, vi povos " +#~ "fari tion per lanĉado (kie root) de la jena komando:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "La instalado de GRUB malsukcesis. Ĉu daŭrigi?" --- grub2-1.99.orig/debian/po/ug.po +++ grub2-1.99/debian/po/ug.po @@ -0,0 +1,410 @@ +# Uyghur translation for grub_debian. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Sahran , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: grub_debian\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-20 11:29+0600\n" +"Last-Translator: Sahran \n" +"Language-Team: Uyghur Computer Science Association \n" +"Language: Uyghur\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst دىن Chainload قىلامدۇ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB نەشرىنى يۇقىرىلىتىش قوليازمىسى /boot/grub غا ئورنىتىلغان GRUB Legacy نى " +"بايقىدى." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"سىستېمىڭىزدىكى GRUB Legacy نى ئالماشتۇرۇش ئۈچۈن /boot/grub/menu.lst نى " +"نۆۋەتتىكى مەۋجۇت GRUB Legacy تەڭشىكىدە GRUB 2 قوزغىتىش يېتەكلىگۈچ تەسۋىرىنى " +"يۈكلەڭ. ھازىر بۇ مەشغۇلاتنى ئۆزلۈكىدىن ئىجرا قىلالايدۇ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"سىزنىڭ menu.lst دىكى chainloading GRUB 2 نى قوبۇل قىلىشىڭىزنى تەۋسىيە " +"قىلىمىز ھەمدە GRUB 2 بىۋاسىتە MBR (ئاساسىي يېتەكلەش خاتىرىسى)غا ئورنىتىشتىن " +"ئىلگىرى يېڭى GRUB 2 تەڭشىكىنىڭ نورمال خىزمەت قىلىدىغانلىقىنى جەزملەڭ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"قانداق ھۆكۈم چىقىرىشىڭىزدىن قەتئىينەزەر، سىز كېيىن root سالاھىيىتىدە " +"تۆۋەندىكى بۇيرۇقنى ئىجرا قىلىپ GRUB 2 بىلەن كونا MBR تەسۋىرىنى " +"ئالماشتۇرالايسىز:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB ئورنىتىش ئۈسكۈنىسى:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc بوغچىسى يېڭىلاندى. بۇ تىزىملىك سىزنىڭ قايسى ئۈسكۈنىدە grub-install " +"نى ئۆزلۈكىدىن ئىجرا قىلىشنى تاللىشىڭىزغا يول قويىدۇ، ئەگەر بار بولسا." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"كۆپىنچە ئەھۋاللاردا grub-install نى ئۆزلۈكىدىن ئىجرا قىلىش تەۋسىيە قىلىنىپ، " +"ئورنىتىلغان GRUB نىڭ يادرولۇق تەسۋىرى بىلەن GRUB بۆلىكى ياكى grub.cfg نىڭ " +"قەدەمداش بولماسلىقىنىڭ ئالدى ئېلىنىدۇ." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"ئەگەر BIOS نىڭ قايسى قوزغاتقۇچنى ئاساسىي يېتەكلىگۈچ سۈپىتىدە " +"ئىشلىتىدىغانلىقىنى جەزملىيەلمىسىڭىز، GRUB نى بۇ قوزغاتقۇچلارنىڭ ھەممىسىگە " +"ئورنىتىش ئادەتتە ياخشى چارە بولالايدۇ." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"دىققەت: GRUB نى رايوننىڭ يېتەكلەش خاتىرىسىگە ئورناتسىڭىزمۇ بولىدۇ، بۇ جايدا " +"مۇۋاپىق بولغان رايونلار تەمىنلەندى. ئەمما بۇنداق بولغاندا GRUB مەجبۇرىي قارا " +"تىزىملىك مېخانىزمىنى ئىشلىتىپ، ئىشەنچلىكلىكىنىڭ تۆۋەنلەپ كېتىشىنى كەلتۈرۈپ " +"چىقىرىدۇ، شۇڭلاشقا ئىشلىتىش تەۋسىيە قىلىنمايدۇ." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB قوزغىتىش يېتەكلىگۈچ يوقالغان دىسكىدىن بىرىگە ئورنىتىلغان ياكى ئۇنىڭ " +"بىردىنبىر بەلگىسى مەلۇم سەۋەبلەردىن ئۆزگەرگەن. ئورنىتىلغان GRUB نىڭ يادرولۇق " +"تەسۋىرى ۋە GRUB بۆلىكى شۇنداقلا grub.cfg نى قەدەمداشلاش ناھايىتى مۇھىم. " +"قايتا بىر قېتىم تەكشۈرۈپ GRUB نىڭ مۇۋاپىق قوزغىتىش ئۈسكۈنىسىگە " +"ئورنىتىلغانلىقىغا كاپالەتلىك قىلىڭ." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB, ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB, ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "GRUB نى قوزغىتىش ئۈسكۈنىسىگە يازالمىدى - داۋاملاشتۇرامدۇ؟" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB نى تۆۋەندىكى ئۈسكۈنىگە ئورنىتالمىدى:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"داۋاملاشتۇرۇۋېرەمسىز؟ ئەگەر مۇشۇنداق قىلسىڭىز، كومپيۇتېرىڭىز توغرا " +"قوزغىلالماسلىقى مۇمكىن." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB نى قوزغىتىش ئۈسكۈنىسىگە يېزىش مەغلۇپ بولدى - قايتا سىنامدۇ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"سىز GRUB نى باشقا ئۈسكۈنىگە ئورنىتالىشىڭىز مۇمكىن، تەكشۈرۈشنى جەزملىشىڭىز " +"زۆرۈر بولسىمۇ سىستېمىڭىز شۇ ئۈسكۈنىدىن قوزغىلىدۇ. بولمىسا GRUB Legacy دىن " +"يېڭىلاشتىن ۋاز كېچىدۇ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB نى ئورناتماي داۋاملاشتۇرامدۇ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"سىز ھېچقانداق ئۈسكۈنىگە GRUB ئورنىتىشنى تاللىمىدىڭىز. ئەگەر " +"داۋاملاشتۇرسىڭىز، قوزغىتىش يېتەكلىگۈچنى توغرا سەپلىيەلمەسلىكىڭىز مۇمكىن، " +"كومپيۇتېرىڭىز كېيىنكى قېتىم قوزغالغاندا ئۇ يېتەكلەش سېكتورىدىكى ئىلگىرىكى " +"مەزمۇننى ئىشلىتىدۇ. ئەگەر يېتەكلەش سېكتورىدا ئىلگىرىكى نەشرىدىكى GRUB 2 " +"بولسا ئۇنىڭ بۆلەكلىرىنى ياكى نۆۋەتتىكى سەپلىمە ھۆججەتنى يۈكلىگىلى بولماسلىقى " +"مۇمكىن." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"ئەگەر سىز باشقا بىر قوزغىتىش يېتەكلىگۈچ ئىشلەتكەن ھەمدە داۋاملىق مۇشۇنداق " +"قىلماقچى بولسىڭىز ياكى ئەگەر بۇ بىر ئالاھىدە قوزغىتىش يېتەكلىگۈچ تەلەپ " +"قىلمايدىغان مۇھىت بولسا، بۇ خىل ئەھۋالدا يەنىلا داۋاملاشتۇرۇشقا بولىدۇ. " +"ئۇنداق بولمىسا سىز مەلۇم جايغا GRUB ئورنىتىشىڭىز لازىم." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "/boot/grub دىن GRUB 2 نى چىقىرىۋېتەمدۇ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "/boot/grub تىن GRUB 2 نىڭ ھەممە ھۆججەتلىرىنى چىقىرىۋېتەمسىز؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"بۇنداق بولغاندا سىستېمىنى يېتەكلىگىلى بولمايدۇ، باشقا قوزغىتىش يېتەكلىگۈچ " +"ئورنىتىلسا بۇ باشقا گەپ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "ھازىر GRUB 2 نىڭ ئايلاندۇرۇشىنى تاماملىدىمۇ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"بۇ سىستېمىدا يەنىلا GRUB Legacy قوزغىتىش يېتەكلىگۈچ ئورناتقان ھۆججەت مەۋجۇت " +"ئەمما ھازىرمۇ دىسكىغا GRUB 2 يېتەكلەش خاتىرىسىنى ئورناتتى:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"قارىغاندا GRUB Legacy ئىشلىتىلمىگەندەك تۇرىدۇ، ھەمدە سىز بۇ دىسكىلاردا GRUB " +"2 تەسۋىرىگە يېڭىلىشىڭىز لازىم، كونا GRUB Legacy ھۆججەتلىرىنى ئۆچۈرۈش " +"ئارقىلىق GRUB 2 تەسۋىرىنى ئايلاندۇرۇشنى تاماملايدۇ. ئەگەر بۇ GRUB 2 " +"تەسۋىرىنى يېڭىلىمىغاندا ئۇلار يېڭى بوغچا بىلەن ماسلاشمىغانلىقتىن " +"سىستېمىڭىزنىڭ نورمال يېتەكلىنىپ قوزغالماسلىقىنى كەلتۈرۈپ چىقىرىدۇ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"سىز ئادەتتە GRUB 2 نىڭ ئايلاندۇرۇشىنى تاماملىشىڭىز لازىم، بۇ يېتەكلەش " +"خاتىرىسى باشقا مەشغۇلات سىستېمىسىغا ئورنىتىلغان GRUB 2 قۇرغان بولسا بۇ باشقا " +"گەپ." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux بۇيرۇق قۇرى:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"تۆۋەندىكى Linux بۇيرۇق قۇرى /etc/default/grub ياكى GRUB Legacy نىڭ menu.lst " +"دىكى `kopt' پارامېتىرىدىن ئاجرىتىدۇ. ئۇنىڭ توغرىلىقىنى جەزملەپ، ئېھتىياجغا " +"ئاساسەن ئۆزگەرتىڭ.بۇيرۇق قۇرىنىڭ بوش قالدۇرۇلۇشىغا يول قويۇلىدۇ." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux كۆڭۈلدىكى بۇيرۇق قۇرى:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"تۆۋەندىكى ھەرپ تىزىقى كۆڭۈلدىكى تىزىملىك تۈرىنىڭ Linux پارامېتىرىغا " +"ئىشلىتىلىدۇ ئەمما ئەسلىگە كەلتۈرۈش ھالىتىگە قوللىنىلمايدۇ." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD بۇيرۇق قۇرى:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"تۆۋەندىكى kFreeBSD بۇيرۇق قۇرى /etc/default/grub ياكى GRUB Legacy نىڭ menu." +"lst دىكى `kopt' پارامېتىرىدىن ئاجرىتىدۇ. ئۇنىڭ توغرىلىقىنى جەزملەپ، " +"ئېھتىياجغا ئاساسەن ئۆزگەرتىڭ. بۇيرۇق قۇرىنىڭ بوش قالدۇرۇلۇشىغا يول قويۇلىدۇ." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD كۆڭۈلدىكى بۇيرۇق قۇرى:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"تۆۋەندىكى ھەرپ تىزىقى كۆڭۈلدىكى تىزىملىك تۈرىنىڭ kFreeBSD پارامېتىرىغا " +"ئىشلىتىلىدۇ ئەمما ئەسلىگە كەلتۈرۈش ھالىتىگە قوللىنىلمايدۇ." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map ھاسىل قىلىندى" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"مۇقىم ئۈسكۈنە ئىسمىنى ئىشلىتىش ئۈچۈن /boot/grub/device.map ھۆججىتى قايتا " +"يېزىلدى. كۆپ قىسىم ئەھۋالدا بۇ ئۇنى قايتا ئۆزگەرتىش ئېھتىياجىنى ئازايتىشى " +"لازىم، GRUB ھاسىل قىلغان يېتەكلەش تىزىملىكى تەسىرگە ئۇچرىماسلىقى لازىم." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"ھالبۇكى، سىستېمىڭىزدا قانچە دىسكا بار، سىستېما كونا ئۈسكۈنە تەسۋىرىگە " +"تايىنىشى مۇمكىن. ئۆزىڭىز بەلگىلىگەن ھەر قانداق GRUB نىڭ (hdN) قوزغاتقۇچ " +"نومۇرىنىڭ يېتەكلەش تىزىملىكى بار يوقلۇقىنى تەكشۈرۈڭ، ئەگەر ئېھتىياجلىق " +"بولسىڭىز ئۇلارنى يېڭىلاڭ." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"ئەگەر بۇ ئۇچۇرنى چۈشەنمىسىڭىز ياكى ھەر قانداق ئۆزلەشتۈرگەن يېتەكلەش " +"تىزىملىكى بولمىسا بۇ ئۇچۇرغا پەرۋا قىلمىسىڭىزمۇ بولىدۇ." --- grub2-1.99.orig/debian/po/cs.po +++ grub2-1.99/debian/po/cs.po @@ -0,0 +1,416 @@ +# Czech translation of grub2 debconf messages. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub2 package. +# Miroslav Kure , 2008 -- 2011 +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-06-02 19:54+0200\n" +"Last-Translator: Miroslav Kure \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Zavést přes menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Aktualizační skripty GRUBu rozpoznaly v /boot/grub nastavení pro předchozí " +"verzi GRUBu (tzv. GRUB Legacy)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Abyste na svém systému nahradili zastaralou verzi GRUBu, je doporučeno " +"upravit /boot/grub/menu.lst tak, aby zavedl obraz GRUBu 2 pomocí stávajícího " +"GRUB Legacy. Tento krok je nyní možné provést automaticky." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Před instalací GRUBu 2 přímo do MBR (Master Boot Record) se doporučuje " +"nejprve vyzkoušet zavedení GRUBu 2 skrze menu.lst a teprve po ověření, že " +"vše funguje očekávaným způsobem, zkusit instalaci do MBR." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Ať se rozhodnete jakkoliv, obraz v MBR můžete kdykoliv později nahradit " +"GRUBem 2. Stačí jako root spustit následující příkaz:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Zařízení pro instalaci GRUBu:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Balík grub-pc se právě aktualizuje. Tato nabídka vám umožňuje zvolit " +"zařízení, na kterých se má automaticky spouštět grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Automatické spouštění grub-install je ve většině případů doporučeno, protože " +"tak předcházíte tomu, aby se obraz jádra GRUBu rozcházel s GRUB moduly nebo " +"souborem grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Pokud si nejste jisti, který disk je v BIOSu označen jako zaváděcí, bývá " +"často dobrým nápadem nainstalovat GRUB na všechny disky." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Poznámka: GRUB je možné instalovat také do zaváděcích záznamů jednotlivých " +"oblastí, jejichž seznam zde vidíte. Tímto však donutíte GRUB, aby používal " +"mechanismus zvaný blocklist, který je méně spolehlivý tudíž se nedoporučuje." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Zavaděč GRUB byl dříve nainstalován na disk, který již není dostupný, nebo " +"jehož unikátní identifikátor se z nějakého důvodu změnil. Je důležité, aby " +"nainstalovaný obraz jádra GRUBu odpovídal GRUB modulům a souboru grub.cfg. " +"Ještě jednou se prosím ujistěte, že je GRUB zapsán na příslušných zaváděcích " +"zařízeních." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Zápis GRUBu na zaváděcí zařízení selhal - pokračovat?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB se nepodařilo nainstalovat na následující zařízení:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Chcete přesto pokračovat? Pokud ano, je možné, že počítač nemusí korektně " +"nastartovat." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Zápis GRUBu na zaváděcí zařízení selhal - zkusit znovu?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Je možné, že se povede instalace GRUBu na nějaké jiné zařízení, ovšem měli " +"byste se ujistit, že váš systém umí z daného zařízení zavádět. V opačném " +"případě bude aktualizace z GRUB Legacy zrušena." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Pokračovat bez instalace GRUBu?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Rozhodli jste se neinstalovat GRUB na žádné zařízení. Budete-li pokračovat, " +"zavaděč nemusí být nastaven správně a při příštím spuštění počítače se " +"použije cokoliv, co bylo dříve v zaváděcím sektoru. Pokud tam je dřívější " +"verze GRUBu 2, nemusí se jí podařit načíst moduly, nebo zpracovat současný " +"konfigurační soubor." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Pokud používáte jiný zavaděč a chcete ho používat i nadále, nebo pokud je " +"toto speciální prostředí, ve kterém zavaděč nepotřebujete, můžete " +"pokračovat. V opačném případě byste někam měli GRUB nainstalovat." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Odstranit GRUB 2 z /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Chcete z /boot/grub odstranit všechny soubory GRUBu 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Tímto se stane systém nezaveditelným do doby, než nainstalujete jiný zavaděč." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Dokončit nyní přechod na GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Tento systém stále obsahuje soubory starého zavaděče GRUB Legacy, ale na " +"následujících discích již má zaváděcí záznamy GRUBu 2:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Je dosti pravděpodobné, že se GRUB Legacy již nepoužívá a tudíž byste na " +"těchto discích měli aktualizovat obrazy GRUBu 2 a dokončit konverzi na GRUB " +"2 odstraněním starých souborů z GRUB Legacy. Neaktualizujete-li tyto obrazy " +"GRUBu 2, nemusí být kompatibilní s novými balíky a mohou způsobit, že se váš " +"systém přestane zavádět správně." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Obvykle byste měli konverzi na GRUB 2 dokončit, s výjimkou situace, kdy tyto " +"zaváděcí záznamy vytvořila instalace nějakého jiného operačního systému." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Parametry pro Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Následující řádka s parametry pro Linux byla získána ze starého souboru menu." +"lst z parametru „kopt“ nebo ze souboru /etc/default/grub. Zkontrolujte " +"prosím, zda jsou parametry v pořádku a případně je upravte do požadované " +"podoby. Řádka s parametry může být i prázdná." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Výchozí parametry pro Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Následující parametry pro Linux se použijí pro výchozí položku menu, ale ne " +"pro záchranný režim." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Parametry pro kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Následující řádka s parametry pro kFreeBSD byla získána ze starého souboru " +"menu.lst z parametru „kopt“ nebo ze souboru /etc/default/grub. Zkontrolujte " +"prosím, zda jsou parametry v pořádku a případně je upravte do požadované " +"podoby. Řádka s parametry může být i prázdná." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Výchozí parametry pro kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Následující parametry pro kFreeBSD se použijí pro výchozí položku menu, ale " +"ne pro záchranný režim." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map byl aktualizován" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Soubor /boot/grub/device.map byl přepsán tak, aby používal stabilní jména " +"zařízení. Ve většině případů by to mělo výrazně snížit potřebu jejich změny " +"v budoucnosti a položky v zaváděcí nabídce vygenerované GRUBem by neměly být " +"nijak ovlivněny." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Nicméně je možné (protože je v systému více než jeden disk), že se systém " +"spoléhal na starý soubor device.map. Zkontrolujte prosím, zda používáte " +"vlastní upravené položky zaváděcí nabídky, které spoléhají na GRUBovské " +"číslování disků (hdN) a podle potřeby je aktualizujte." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Nerozumíte-li této zprávě, nebo pokud žádné vlastní upravené položky " +"zaváděcí nabídky nemáte, můžete tuto zprávu ignorovat." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Až se rozhodnete zavádět GRUB 2 přímo z MBR, stačí jako uživatel root " +#~ "spustit příkaz:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Instalace GRUBu selhala. Pokračovat?" --- grub2-1.99.orig/debian/po/ja.po +++ grub2-1.99/debian/po/ja.po @@ -0,0 +1,406 @@ +# Copyright (C) 2008-2010 GRUB Maintainers +# This file is distributed under the same license as the grub2 package. +# Hideki Yamane , , 2008-2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 23:44+0900\n" +"Last-Translator: Hideki Yamane \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst 経由で起動 (チェーンロード) しますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB のアップグレードプログラムは、/boot/grub に GRUB Legacy の設定があるのを" +"検出しました。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"システム中に存在している古いバージョンの GRUB を置き換えるには、/boot/grub/" +"menu.lst にある GRUB Legacy の設定を使って GRUB2 の起動イメージを読み込むよう" +"に設定するのがお勧めです。この作業はここで自動的に実行されます。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"MBR (マスターブートレコード) に直接インストールする前に、GRUB 2 が menu.lst " +"からチェーンロードするように設定し、新しい GRUB 2 の設定が動作するかどうかを" +"確認する事をお勧めします。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"どの設定を選ぶにせよ、root として以下のコマンドを実行することによって、後から" +"でも古い MBR イメージを GRUB 2 に置き換えられます。" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB をインストールするデバイス:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc パッケージのアップグレード中です。このメニューでは、もしデバイスがあ" +"れば、どのデバイスに自動的に grub-install を実行するかを選べます。" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"インストール済みの GRUB コアイメージが GRUB モジュールや grub.cfg との同期が" +"ずれるのを防ぐため、ほとんどの場合、自動的に grub-instsall を実行するのがお勧" +"めです。" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"BIOS でどのドライブが起動ドライブとして設定されているのか判らないのであれば、" +"すべてに GRUB をインストールするのが大抵の場合良い考えです。" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"注意: パーティションブートレコードに GRUB をインストールするのも可能です。そ" +"して、ここでは適切なパーティションが表示されます。しかし、これによって GRUB " +"がブロックリストの仕組みを強制的に使うようになります。この仕組みは信頼性に欠" +"けるため、お勧めはしません。" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"以前、GRUB ブートローダーは、すでに存在しない、あるいは何らかの理由で一意の識" +"別子が変更されたディスクにインストールされていました。インストールされている " +"GRUB コアイメージが GRUB モジュールや grub.cfg と一致しているのを確認するのは" +"重要です。もう一度、GRUB が適切な起動デバイスに書き込まれているか確かめてくだ" +"さい。" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "起動デバイスへの GRUB の書き込みが失敗しました - 続行しますか?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB は以下のデバイスへのインストールに失敗しました:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"とにかく続行しますか? その場合、コンピュータが正常に起動しないかもしれませ" +"ん。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"ブートデバイスへの GRUB の書き込みに失敗しました。もう一度試してみますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"別のデバイスに GRUB をインストールできるかもしれませんが、そのデバイスからシ" +"ステムが起動するかどうかを確認しておく必要があります。どのデバイスにもインス" +"トールを行わない場合は、GRUB Legacy からのアップグレードは中止されます。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB をインストールせずにパッケージのインストールを続行しますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"どのデバイスに対しても GRUB をインストールしないことが選択されました。ブート" +"ローダーが正しく設定されていない可能性があり、このまま続行するとこのコン" +"ピュータの次回起動時には、以前に起動セクタにインストールされていたものを何で" +"あろうとも利用しようとします。以前のバージョンの GRUB 2 が起動セクタにある場" +"合は、モジュールの読み込みや現在の設定ファイルの取り扱いが出来なくなる可能性" +"があります。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"既に別のブートローダーを利用していてそれを使い続けたい場合、あるいはブート" +"ローダーを必要としない特殊な環境の場合は、とにかく続行してしまって構いませ" +"ん。そうでない場合は、どこかに GRUB をインストールしてください。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "/boot/grub から GRUB 2 を削除しますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "/boot/grub から GRUB 2 のファイルをすべて削除しますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"この作業は、別のブートローダーがインストールされていないとシステムが起動でき" +"なくなります。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "ここで GRUB 2 へのコンバートを終了しますか?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"このシステムには GRUB Legacy のブートローダーがインストールしたファイルがあり" +"ますが、GRUB 2 のブートレコードも以下のディスクにインストールされています:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"GRUB Legacy はもはや使われてはいないようなので、代わりにこれらのディスク上の " +"GRUB 2 イメージをアップグレードして、古い GRUB Legacy のファイルを削除するこ" +"とで GRUB 2 へのコンバートを完了する必要があります。これらの GRUB 2 イメージ" +"をアップグレードしていない場合は、新しいパッケージとの互換性がないためにシス" +"テムが正常に起動しない可能性があります。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"他の OS 上での GRUB 2 のインストールによって作成されていたブートレコードを除" +"き、GRUB 2 へのコンバートはほぼ完了しました。" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux コマンドライン:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"以下の Linux のコマンドラインは /etc/default/grub か GRUB Legacy の menu.lst " +"上の「kopt」パラメータから取得されています。これが正しいものであるかを確認し" +"て、必要であれば修正してください。コマンドラインは空でも構いません。" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux デフォルトコマンドライン:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"以下の文字列は、リカバリーモードではない通常のメニューエントリでの Linux パラ" +"メータとして使われます。" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD コマンドライン:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"以下の kFreeBSD のコマンドラインは、/etc/default/grub か GRUB Legacy の menu." +"lst 上の「kopt」パラメータから取得されています。これが正しいものであるかを確" +"認して、必要であれば修正してください。コマンドラインは空でも構いません。" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD デフォルトコマンドライン:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"以下の文字列はリカバリーモードではない通常のメニューエントリでの kFreeBSD パ" +"ラメータとして使われます。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map が再生成されました" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"/boot/grub/device.map ファイルは固定のデバイス名を使うように書き換えられまし" +"た。多くの場合は、今後このファイルを変更する必要が大幅に減っており、GRUB に" +"よって生成される起動メニューの項目は影響を受けないはずです。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"しかし、システムに 2 個以上ディスクがあるので、起動メニューの項目が古いデバイ" +"ス情報に依存していた可能性があります。起動メニューの項目が GRUB でのドライブ" +"の順番 (hdN) に関連していないかどうかを確認して、必要であれば更新してくださ" +"い。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"このメッセージの意味が分からない、あるいは変更した起動メニュー項目が無い場合" +"は、このメッセージを無視して構いません。" --- grub2-1.99.orig/debian/po/id.po +++ grub2-1.99/debian/po/id.po @@ -0,0 +1,420 @@ +# Grub2 translation to Bahasa Indonesia. +# Copyright (C) Grub2 Developer +# This file is distributed under the same license as the Grub2 package. +# Arief S Fitrianto , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-20 12:28+0700\n" +"Last-Translator: Mahyuddin Susanto \n" +"Language-Team: Debian Indonesian Translation Team \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Indonesian\n" +"X-Poedit-Country: INDONESIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Chainload dari menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Script pemutakhiran GRUB menemukan konfigurasi GRUB jadul di /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Untuk mengganti GRUB jadul pada sistem Anda, sangat disarankan menyesuaikan /" +"boot/grub/menu.lst agar memuat citra boot GRUB2 dari konfigurasi GRUB Jadul. " +"Langkah ini mungkin akan dilakukan otomatis sekarang." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Sangat disarankan Anda menerima hasil penyesuaian GRUB 2 dari menu.lst dan " +"memastikan bahwa konfigurasi GRUB 2 bekerja dengan baik sebelum Anda " +"memasangnya pada MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Apapun pilihan Anda, Anda dapat mengganti citra MBR lama dengan GRUB2 di " +"lain waktu dengan menjalankan perintah berikut sebagai root: " + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Piranti pemasangan GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Paket grub-pc sedang diperbaharui. Menu ini memungkinkan Anda memilih " +"piranti yang Anda inginkan untuk menjalankan grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Menjalankan grub-install secara otomatis sangat disarankan dalam kebanyakan " +"kasus. Hal ini untuk mencegah citra inti GRUB yang terpasang tidak sesuai " +"dengan modul GRUB atau grub.cfg" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Jika Anda tidak yakin piranti yang dijadikan piranti boot oleh BIOS, sangat " +"disarankan untuk memasang GRUB di semua piranti dimaksud." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Catatan: sangat mungkin memasang GRUB di partisi boot dan beberapa partisi " +"yang sesuai disajikan di sini. Tetapi, hal ini akan memaksa GRUB menggunakan " +"mekanisme blocklist, yang membuatnya kurang handal dan oleh karenanya tidak " +"disarankan." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Pemuat boot GRUB sebelumnya telah dipasang di harddisk yang sekarang sudah " +"lenyap atau identifikasi unik telah berubah karena suatu hal. Sangat penting " +"memastikan citra inti GRUB yang terpasang selalu sesuai dengan modul GRUB " +"dan grub.cfg. Mohon periksa kembali untuk memastikan GRUB ditulis di piranti " +"boot yang sesuai." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Gagal menulis GRUB ke piranti boot -- lanjutkan?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Gagal memasang GRUB pada piranti berikut ini:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Anda yakin akan lanjut terus? Jika ya, komputer Anda mungkin tidak dapat " +"beroperasi." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Gagal menulis GRUB ke piranti boot. Coba lagi?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Anda dapat memasang GRUB pada piranti lainnya. Tetapi, Anda harus memastikan " +"komputer dapat boot dari piranti tersebut. Jika tidak, pemutakhiran dari " +"GRUB jadul akan dibatalkan." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Lanjutkan tanpa memasang GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Anda memilih tidak memasang GRUB di piranti apapun. Jika Anda lanjutkan, " +"pemuat boot mungkin tidak terkonfigurasi dengan benar. Jika komputer ini " +"dinyalakan kembali, maka apapun yang sebelumnya ada di bootsector akan " +"digunakan. Jika ada versi awal GRUB2 di bootsector, mungkin tidak dapat " +"memuat modul-modul atau menangani berkas konfigurasi mutakhir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Jika Anda telah menggunakan pemuat boot yang berbeda dan ingin tetap seperti " +"itu, atau ada kebutuhan khusus yang membuat Anda tidak memerlukan pemuat " +"boot, maka Anda bisa melanjutkan terus. Jika tidak, Anda harus memasang GRUB " +"di tempat lain." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Hapus GRUB 2 dari /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Yakinkah Anda ingin menghapus semua berkas GRUB 2 dari /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Hal ini akan membuat sistem tidak dapat booting kecuali Anda memasang pemuat " +"boot lainnya." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Selesaikan proses konversi ke GRUB2 sekarang?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Sistem ini masih memiliki berkas-berkas dari pemuat boot GRUB Jadul, tapi " +"sekarang juga memiliki rekam boot GRUB2 di piranti berikut:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Tampaknya GRUB Jadul sudah tidak terpakai, dan Anda sebaiknya memasang citra " +"GRUB2 pada harddisk ini, lalu menyelesaikan proses konversi ke GRUB2 dengan " +"menghapus berkas-berkas GRUB Jadul. Jika Anda tidak memutakhirkan citra " +"GRUB2, maka mungkin akan ada masalah inkompatibilitas dengan paket-paket " +"baru dan membuat sistem Anda tidak dapat booting dengan benar." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Anda sebaiknya menyelesaikan konversi ke GRUB2 kecuali jika rekam boot ini " +"dibuat melalui pemasangan GRUB2 pada sistem operasi lain." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Baris perintah Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Baris perintah Linux berikut ini disadur dari /etc/default/grub atau " +"parameter 'kopt' di menu.lst pada GRUB jadul. Pastikan kebenarannya dan " +"suntinglah bila perlu. Baris perintahnya diperbolehkan dikosongi." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Baris perintah standar Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"String berikut ini akan digunakan sebagai parameter Linux untuk menu standar " +"tetapi tidak digunakan untuk modus darurat." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Baris perintah kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Baris perintah kFreeBSD berikut ini disadur dari /etc/default/grub atau " +"parameter 'kopt' di menu.lst pada GRUB jadul. Pastikan kebenarannya dan " +"suntinglah bila perlu. Baris perintahnya diperbolehkan dikosongi." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Baris perintah standar kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"String berikut ini digunakan sebagai parameter kFreeBSD untuk menu standar, " +"tetapi tidak digunakan untuk modus darurat." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map telah dibuat ulang." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Berkas /boot/grub/device.map telah ditulis ulang agar menggunakan nama " +"piranti yang stabil. Dalam kebanyakan kasus, hal ini berarti mengurangi " +"kemungkinan perubahan di masa datang, dan isian menu boot yang dibuat oleh " +"GRUB tidak akan terpengaruh." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Akan tetapi, karena ada lebih dari satu harddisk pada sistem ini, sangat " +"mungkin bahwa Anda bergantung pada peta piranti yang lama. Mohon periksa " +"apakah Anda memiliki isian menu boot GRUB secara manual yang menggunakan " +"penomoran harddisk (hdN). Jika ya, perbaiki yang diperlukan. " + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Jika Anda tidak mengerti pesan ini atau jika tidak memiliki isian menu boot " +"secara manual, Anda bisa mengabaikan pesan ini." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Di semua kasus, ketika Anda ingin agar GRUB 2 dimuatkan langsung dari " +#~ "MBR, Anda dapat melakukan (sebagai root) perintah berikut:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Gagal memasang GRUB. Lanjutkan?" --- grub2-1.99.orig/debian/po/he.po +++ grub2-1.99/debian/po/he.po @@ -0,0 +1,394 @@ +# translation of grub_debian_po_he.po to Hebrew +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# +# Omer Zak , 2010, 2012. +# Lior Kaplan , 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub_debian_po_he\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-21 00:52+0200\n" +"Last-Translator: Omer Zak \n" +"Language-Team: Hebrew \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "הטענה בשרשור מ-menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "תסריטי העדכון של GRUB גילו הגדרות GRUB ישנות ב-‎‎/boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"כדי להחליף את גירסת GRUB הישנה במערכת שלך, מומלץ לשנות את ‎/boot/grub/menu." +"lst כך שיבצע הטענה משורשרת של קוד האיתחול של GRUB 2 מהגדרות GRUB הישנות שלך. " +"ניתן לבצע פעולה זו באופן אוטומטי עכשיו." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"מומלץ שתסכים להטענה משורשרת של GRUB 2 מ-menu.lst ותוודא שהגדרות GRUB 2 " +"החדשות עובדות עבורך, לפני שקוד האתחול נכתב ל-MBR (Master Boot Record)‎ שלך." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"לא משנה מהי החלטתך, ביכולתך להחליף יותר מאוחר את קוד האתחול הישן ב-MBR בקוד " +"האתחול של GRUB 2 ע\"י מתן הפקודה הבאה כמשתמש-על:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "התקנים להתקנת GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"חבילת grub-pc משתדרגת כעת. תפריט זה מאפשר לך לבחור בהתקנים שברצונך ש-grub-" +"install ירוץ עליהם אוטומטית, באם יש כאלה." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"בדרך כלל מומלץ להריץ אוטומטית את grub-install כדי למנוע מליבת קוד האתחול " +"המותקנת של GRUB מלהפסיק להיות מתואמת עם מודולי GRUB או עם grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"אם אינך בטוח איזה התקן הוגדר כהתקן האתחול ע\"י ה-BIOS שלך, לעתים קרובות יהא " +"זה רעיון טוב להתקין GRUB בכולם." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"הערה: ניתן להתקין GRUB גם ברשומות האתחול של המחיצות, וכמה מחיצות מתאימות " +"מוצעות להלן. עם זאת, התקנה כזו מכריחה את GRUB להשתמש בשיטת רשימת הבלוקים, " +"שמורידה מאמינותו, ולכן לא מומלץ להתקין בשיטה זו." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"המאתחל של GRUB הותקן מקודם בדיסק שכבר אינו קיים, או שהמזהה הייחודי שלו השתנה " +"מסיבה כלשהי. חשוב לוודא שקוד האתחול של ליבת GRUB נשאר מתואם עם מודולי GRUB ו-" +"grub.cfg. אנא בדוק שוב כדי לוודא ש-GRUB נכתב להתקני האתחול המתאימים." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "כשלון בכתיבת GRUB להתקן האתחול - להמשיך?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "כשלון בהתקנת GRUB בהתקנים הבאים:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "האם ברצונך להמשיך בכל זאת? אם כן, מחשבך עלול לא לאתחל כהלכה." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "כשלון בכתיבת GRUB להתקן האתחול - לנסות שוב?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"ייתכן שתוכל להתקין GRUB בהתקן אחר, למרות שעליך לוודא שמחשבך יאתחל מההתקן " +"ההוא. אחרת, השדרוג מ-GRUB ישן יבוטל." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "להמשיך בלי להתקין GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"בחרת לא להתקין GRUB באף התקן. אם תמשיך, ייתכן שמנהל האתחול לא יהיה מוגדר " +"כיאות, ובפעם הבאה שמחשבך יאותחל, הוא יאותחל ממה שהיה קודם ב-boot sector. אם " +"יש גירסא מוקדמת יותר של GRUB 2 ב-boot sector, ייתכן שלא יהיה ביכולתה להטעין " +"מודולים או להתמודד עם קובץ ההגדרות הנוכחי." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"אם הינך כבר משתמש במנהל אתחול אחר ומעוניין להמשיך להשתמש בו, או אם זו סביבה " +"מיוחדת שבה לא דרוש לך מנהל אתחול, עליך להמשיך בכל זאת. אחרת, עליך להתקין " +"GRUB במקום כלשהו." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "הסר GRUB 2 מ-/boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "האם ברצונך להסיר את כל קבצי GRUB 2 מ-/boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "פעולה זו תמנע מהמערכת מלאתחל אלא אם תתקין מנהל אתחול אחר." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "לסיים עכשיו המרה ל-GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"יש במערכת זו עדיין קבצים מההתקנה הישנה של מנהל האתחול GRUB, אבל יש גם רשומות " +"אתחול GRUB 2 מותקנות בדיסקים הבאים:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"סביר שהתקנת GRUB הישנה כבר אינה בשימוש, ושעליך במקום זאת לשדרג את תמונות " +"GRUB 2 בדיסקים אלה ולסיים את ההמרה ל-GRUB 2 על ידי הסרת קבצי GRUB הישנים. אם " +"אינך משדרג תמונות GRUB 2 אלה, הן עלולות להיות בלתי תואמות את החבילות החדשות " +"ולמנוע מהמערכת שלך מלאתחל כהלכה." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"בדרך כלל עליך לסיים את ההמרה ל-GRUB 2 אלא אם רשומות אתחול אלה נוצרו על ידי " +"התקנת GRUB 2 במערכת הפעלה אחרת." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "שורת הפקודה של Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"שורת פקודת Linux הבאה נשלפה מ-‎/etc/default/grub או מפרמטר 'kopt' ב-menu.lst " +"הישן של GRUB. נא לוודא ששורת פקודה זו נכונה ועדכן אותה אם צריך. ניתן להשאיר " +"שורת פקודה זו ריקה." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "ברירת מחדל לשורת הפקודה של Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"המחרוזת הבאה תשמש כפרמטרי Linux עבור ברירת המחדל בתפריט אבל לא עבור מצב " +"recovery." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "שורת הפקודה של kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"שורת פקודת kFreeBSD הבאה נשלפה מ-‎/etc/default/grub או מפרמטר'kopt' ב-menu." +"lst הישן של GRUB. בבקשה לוודא ששורת פקודה זו נכונה ועדכן אותה אם צריך. ניתן " +"להשאיר שורת פקודה זו ריקה." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "ברירת מחדל לשורת הפקודה של kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"המחרוזת הבאה תשמש כפרמטרי kFreeBSD עבור ברירת המחדל בתפריט אבל לא עבור מצב " +"recovery." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "הקובץ ‎/boot/grub/device.map נוצר מחדש" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"הקובץ ‎/boot/grub/device.map נכתב מחדש כדי להשתמש בשמות התקנים יציבים. ברוב " +"המקרים, הדבר אמור לצמצם בצורה משמעותית את הצורך לשנותו בעתיד, והבחירות " +"בתפריט האתחול הנוצר על ידי GRUB לא אמורות להיות מושפעות משינוי זה." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"אבל, מכיוון שיש במערכת שלך יותר מדיסק אחד, ייתכן שהמערכת מסתמכת על קובץ " +"מיפוי ההתקנים הישן. אנא בדוק אם יש לך בחירות מותאמות אישית בתפריט האתחול, " +"שמשתמשות בשיטת מספור ההתקנים (hdN) של GRUB, ועדכן אותן אם צריך." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"אם אינך מבין הודעה זו, או אם אין לך ברירות מותאמות אישית בתפריט האתחול, אזי " +"ניתן להתעלם מהודעה זו." --- grub2-1.99.orig/debian/po/eu.po +++ grub2-1.99/debian/po/eu.po @@ -0,0 +1,412 @@ +# translation of grub2_1.99-5_eu.po to Basque +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Piarres Beobide , 2008. +# Iñaki Larrañaga Murgoitio , 2008, 2009, 2010. +# Iñaki Larrañaga Murgoitio , 2011. +msgid "" +msgstr "" +"Project-Id-Version: grub2_1.99-5_eu\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-31 18:21+0200\n" +"Last-Translator: Iñaki Larrañaga Murgoitio \n" +"Language-Team: Basque \n" +"Language: eu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Kargatu menu.lst fitxategitik?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB eguneratzeko script-ek GRUB zahar baten konfigurazioa aurkitu dute /" +"boot/grub-en." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Sistemako GRUB zaharraren bertsioa behar bezala ordezkatzeko, gomendagarria " +"da /boot/grub/menu.lst doitzea GRUB 2 dagoeneko instalatuta duzun GRUB " +"zaharraren bidez kargatzeko. Urrats hau automatikoki egin daiteke orain." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Gomendagarria da GRUB 2 menu.lst bidez kargatzea onartzea, eta GRUB 2-ren " +"konfigurazioak zure beharrak betetzen dituela egiaztatzea MBRan (Master Boot " +"Record) idatzi aurretik." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Berdin dio zer erabakitzen duzun, MBRren irudi zaharra GRUB 2rekin ordeztu " +"dezakezu supererabiltzaile (root) gisa honako komandoa exekutatuz:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB instalatzeko gailuak:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc paketea eguneratzen ari da. Menu honek zer gailuentzako automatikoki " +"grub-install exekutatzea nahi duzun hautatzea (hautatzen baduzu) uzten dizu." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Egoera gehienetan grub-install automatikoki exekutatzea gomendatzen da, " +"instalatutako GRUBaren bihotzaren irudia GRUBaren modulu edo grub.cfg " +"fitxategiarekin sinkronizatzetik kanpo gelditzea saihesteko." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Ez badakizu BIOSak zer gailu izendatuta daukan abioko gailu gisa, burutazio " +"ona izan ohi da GRUB guztietan instalatzea." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Oharra: GRUB, partizio bateko abioko erregistroan instala daiteke baita ere, " +"hori dela eta, partizio egoki batzuk eskaintzen dira hemen. Hala ere, honek " +"GRUBek bloke-zerrenden mekanismoa erabiltzera derrigortzen du, ondorioz " +"fidagarritasuna jaitsiz, eta gauzak horrela ez da bat ere gomendagarria." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Lehenago GRUB abioko kargatzailea agertzen ez den disko batean instalatu " +"zen, edo edozer arrazoirengatik identifikatzaile esklusiboa aldatuta dauka. " +"Garrantzitsua da instalatutako GRUBaren bihotzaren irudia sinkronizatuta " +"egotea GRUBaren modulu eta grub.cfg fitxategiarekin. Egiaztatu ezazu berriro " +"GRUB abioko gailu egokian idatzi dela." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Huts egin du GRUB abioko gailuan idaztean - jarraitu?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUBek huts egin du honako gailuetan instalatzean:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Jarraitzea nahi duzu dena den? Jarraituz gero, baliteke ordenagailua ongi ez " +"abiaraztea." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Huts egin du GRUB abioko gailuan idaztean - saiatu berriro?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"GRUB beste gailu batean instalatzeko aukera duzu, hala ere, sistema beste " +"gailu horretatik abiatzeko ahalmena duela egiaztatu behar duzu. Bestela, " +"'GRUB Legacy' eguneratzea bertan behera utz daiteke." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Jarraitu GRUB instalatu gabe?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"GRUB inolako gailuetan ez instalatzea aukeratu duzu. Jarraitzen baduzu, " +"baliteke abioko kargatzailea ongi konfiguratuta ez egotea, eta abioko " +"sektorean aurretik zegoena erabiliko da ordenagailua hurrengo batean " +"abiatzean. Abioko sektorean GRUB 2ren aurreko bertsio bat egonez gero, agian " +"ezin izango du moduluak kargatu edo uneko konfigurazioko fitxategia kudeatu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Unean bestelako abioko kargatzaile bat erabiltzean ari bazara, eta horrela " +"jarraitzea nahi baduzu, edo hau abioko kargatzailearen beharrik ez duen " +"ingurune berezi bat bada, aurrera jarrai dezakezu. Bestela, GRUB nonbaiten " +"instalatu beharko zenuke." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Kendu 'GRUB 2' /boot/grub direktoriotik?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Nahi duzu GRUB 2ren fitxategi guztiak /boot/grub-etik kentzea?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Honek sistema ezin abiaraztea eragingo du bestelako abioko kargatzaile bat " +"instalatzen ez bada." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Amaitu GRUB 2-rako bihurketa orain?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Sistemak oraindik 'GRUB Legacy' abioko kargatzailearen fitxategiak ditu " +"oraindik, baina orain GRUB 2 bertsioko abioko erregistroak ere baditu honako " +"diskoetan:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Badirudi 'GRUB Legacy' ez denez aurrerantzean erabiliko, disko hauetako GRUB " +"2 bertsioko irudiak eguneratu eta 'GRUB Legacy'-ko fitxategiak kenduz GRUB 2-" +"ren eguneraketa amaitu beharko zenuke. GRUB 2-ko irudi hauek ez badituzu " +"eguneratzen, pakete berriekin ez dira bateragarriak izango eta sistema ongi " +"abiatzea galaraz dezake." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"GRUB 2-rako bihurketa amaitu beharko zenuke, abioko erregistro hauek beste " +"sistema eragile batzuetako GRUB 2 bertsioaren instalazioan ez badira sortuak " +"izan." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux-eko komando-lerroa:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Linux-eko komando-lerro hau /etc/default/grub edo GRUB zaharraren menu.lst " +"fitxategiko 'kopt' parametrotik atera da. Egiaztatu zuzena dela, eta " +"eraldatu behar izanez gero. Komando-lerroa hutsik egotea baimenduta dago." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux-eko komando-lerro lehenetsia:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Honako katea menuko sarrera lehenetsiaren Linux-eko parametro gisa erabiliko " +"da, baina ez berreskuratzeko moduan." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "KFreeBSD-ko komando-lerroa:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"KFreeBSD-ko komando-lerro hau /etc/default/grub edo GRUB zaharraren menu.lst " +"fitxategiko 'kopt' parametrotik atera da. Egiaztatu zuzena dela, eta " +"eraldatu behar izanez gero. Komando-lerroa hutsik egotea baimenduta dago." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "KFreeBSD-ko komando-lerro lehenetsia:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Honako katea menuko sarrera lehenetsiaren KFreeBSD-ko parametro gisa " +"erabiliko da, baina ez berreskuratzeko moduan." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map berriro sortu da" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"/boot/grub/device.map fitxategia berriro idatzi da gailuen izen egonkorrak " +"erabiltzeko. Gehienetan, etorkizunean hau aldatzeko beharra asko murriztu " +"beharko luke, eta GRUBek sortutako menuko sarrerei ez die eragingo." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Hala ere, sisteman disko bat baino gehiago dagoenez, baliteke sistema " +"gailuen mapa zaharrean mende egotea. Egiaztatu ezazu GRUBen unitateko " +"zenbaketan oinarrituta abioaren menuko sarrera pertsonalizaturen bat duzun " +"edo ez, eta egunera itzazu beharrezkoa izanez gero." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Mezu hau ez baduzu ulertzen, edo abioaren menuko sarrera pertsonalizaturik " +"ez baduzu, ezikusi egin diezaiokezu mezu honi." --- grub2-1.99.orig/debian/po/kk.po +++ grub2-1.99/debian/po/kk.po @@ -0,0 +1,412 @@ +# Kazakh translation for grub2. +# Copyright (C) 2010 The Grub team +# This file is distributed under the same license as the PACKAGE package. +# Baurzhan Muftakhidinov , 2010-2011. +# +msgid "" +msgstr "" +"Project-Id-Version: master\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-06-18 23:22+0600\n" +"Last-Translator: Baurzhan Muftakhidinov \n" +"Language-Team: Kazakh \n" +"Language: kk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Poedit-Language: Kazakh\n" +"X-Poedit-Country: KAZAKHSTAN\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst ішінен тізбектей жүктелу керек пе?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "GRUB жаңарту скриптері /boot/grub ішінен орнатылған GRUB Legacy тапты." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"GRUB Legacy нұсқасын алмастыру үшін, сіздің бар болып тұрған GRUB Legacy " +"орнатудың /boot/grub/menu.lst файлынан GRUB 2 жүктеушісін тізбектей жүктеуге " +"баптауға ұсынылады. Бұл қадам қазір автоматты түрде жасалуы мүмкін." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"GRUB 2-ні menu.lst ішінен тізбектей жүктеуді қабылдау, және жаңа GRUB 2 " +"орнатуы оны MBR (Басты жүктелу жазбасына) ішіне жазбас бұрын жұмыс " +"істейтінін тексеру ұсынылады." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Шешіміңіз қандай болса да, кейін сіз әрқашан да ескі MBR бейнесін жаңа GRUB " +"2-мен ауыстыра аласыз, ол үшін root атынан келесі команда орындауыңыз керек:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB орнатылатын құрылғылар:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc дестесі жаңартылуда. Бұл мәзір сізге қай құрылғылар үшін grub-" +"install автожөнелту қалайтыныңызды көрсетуге мүмкін қылады, егер ондай " +"құрылғылар бар болса." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"grub-install автожөнелту көп жағдайда ұсынылады, орнатылған GRUB өзегі және " +"модульдер не grub.cfg-мен үйлесімді болуы үшін." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Егер сіз BIOS-та қай диск жүктелетін етіп орнатылғанын нақты білмесеңіз, " +"GRUB-ты дисктердің барлығына орнатуға да болады." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Ескерту: GRUB-ты бөлімнің жүктелу жазбасына да орнатуға болады, сәйкес " +"келетін бөлімдер тізімі төменде көрсетілген. Алайда, бұл әрекет GRUB-ты " +"блоктізімді қолдануға мәжбүрлетеді, яғни оның икемділігін төмендетеді, сол " +"үшін ұсынылмайды." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB жүктеушісі қазір жоқ болып тұрған, немесе қандай да бір себептермен " +"уникалды идентификаторы өзгерген дискіге бұрын орнатулы болған. Орнатылған " +"GRUB өзегі және модульдер мен grub.cfg-мен үйлесімді болуын тексеру маңызды. " +"GRUB дұрыс жүктелу құрылғыларына жазылғанын тағы да бір рет тексеріңіз." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} МБ; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} МБ; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "GRUB-ты жүктелу құрылғысына жазу сәтсіз - жалғастыру керек пе?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB келесі құрылғыларға орнату сәтсіз аяқталды:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Бәрібір жалғастыруды қалайсыз ба? Нәтижесінде компьютеріңіз дұрыс жүктелмеуі " +"мүмкін." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB-ты жүктелу құрылғысына жазу сәтсіз - қайталау керек пе?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Сіз оған қоса GRUB-ты басқа да құрылғыларға орната аласыз, бірақ жүйеңіз ол " +"кезде жүктеле алатынына көз жеткізіңіз. Болмаса, GRUB Legacy нұсқасынан " +"жаңартудан бас тартылады." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB орнатпай-ақ жалғастыру керек пе?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Сіз GRUB-ты ешбір құрылғыға орнатпауды қалағансыз. Жалғастырсаңыз, жүктеуші " +"дұрыс бапталмауы мүмкін, және компьютеріңіз келесі рет жүктелген кезде, " +"жүктелу жазбасында оған дейін болған нәрсені қолданады. Егер ол жүктелу " +"жазбасында GRUB 2 ертерек шыққан нұсқасы болса, ол модульдерді жүктей алмай, " +"не ағымдағы баптаулар файлын талдай алмайтын болуы әдбен мүмкін." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Егер сіз басқа жүктеушіні қолданып, оны жалғастыруды қаласаңыз, немесе бұл - " +"жүктеушіні талап етпейтін ерекше жүйе болса, онда жалғастырыңыз. Болмаса, " +"қайда болса да, GRUB орнатуыңыз керек." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "GRUB 2 /boot/grub ішінен өшіру керек пе?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "GRUB 2 барлық файлдарын /boot/grub ішінен өшіруді шынымен қалайсыз ба?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Бұл әрекет басқа жүктеуші орнатылмаған болса, жүйеңізді жүктелмейтін қылады." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "GRUB 2-ге айналдыруды қазір аяқтау керек пе?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Жүйеде әлі де GRUB Legacy жүктеушісі орнатылған, оған қоса GRUB 2 жүктелу " +"жазбалары келесі дискілерге орнатылған:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"GRUB Legacy енді қолданылмайтын сияқты, орнына GRUB 2 бейнелерін ол " +"дискілерде жаңартып, ескі GRUB Legacy файлдарын өшіріңіз. GRUB 2 бейнелерін " +"жаңартпасаңыз, олар жаңа дестелермен үйлеспей, жүйеңіз дұрыс жүктелмеуі " +"мүмкін." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"GRUB 2 дейін жаңартуды аяқтауыңыз керек, егер осы жүктелу жазбалары басқа " +"жүйеде орнатылған GRUB 2 көмегімен жасалмаған болса." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux командалық жолы:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Келесі Linux командасы /etc/default/grub ішінен не GRUB Legacy menu.lst " +"ішіндегі `kopt' параметрінен алынды. Оның дұрыстығын тексеріп, керек болса, " +"өзгертіңіз. Бұл командалық жол бос болса да болады." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux бастапқы командалық жолы:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Келесі жол Linux параметрлері бастапқы мәзірі үшін, бірақ қалпына келтіру " +"үшін емес, қолданылатын болады." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD командалық жолы:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Келесі kFreeBSD командасы /etc/default/grub ішінен не GRUB Legacy menu.lst " +"ішіндегі `kopt' параметрінен алынды. Оның дұрыстығын тексеріп, керек болса, " +"өзгертіңіз. Бұл командалық жол бос болса да болады." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD бастапқы командалық жолы:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Келесі жол kFreeBSD параметрлері бастапқы мәзірі үшін, бірақ қалпына келтіру " +"үшін емес, қолданылатын болады." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map қайта құрылды" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"/boot/grub/device.map файлы құрылғылардың тұрақты аттарын қолданатындай " +"түзетілген. Көп жағдайда, болашақта өзгерту керек емес болады, және GRUB " +"жасаған мәзір элементтері өзгеріссіз-ақ қалады." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Алайда, жүйеңізде бірден көп диск болған соң, ескі device map-қа тәуелді " +"болуыңыз мүмкін. GRUB-ң (hdN) түріндегі дисктер нөмірленуі мәзірде жоқ " +"болуына көз жеткізіңіз, керек болса, оларды жаңартыңыз." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Егер сіз осы хабарламаны түсінбесеңіз, немесе сізде таңдауыңызша жүктелу " +"мәзірінің элементтері жоқ болса, бұл хабарламаны елемеңіз." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Қалай болса да, GRUB 2 тура MBR ішінен жүктелуді қалайтын болсаңыз, сол " +#~ "кезде root атынан келесі команданы орындаңыз:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUB орнату сәтсіз. Жалғастыру керек пе?" --- grub2-1.99.orig/debian/po/pl.po +++ grub2-1.99/debian/po/pl.po @@ -0,0 +1,418 @@ +# Copyright (C) 2012 +# This file is distributed under the same license as the grub-pc package. +# +# Michał Kułach , 2012. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-24 21:51+0100\n" +"Last-Translator: Michał Kułach \n" +"Language-Team: Polish \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Załadować z menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Skrypty aktualizacyjne GRUB-a wykryły ustawienia wersji GRUB Legacy w /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Aby zastąpić starą wersję GRUB-a w systemie, zaleca się dostosowanie /boot/" +"grub/menu.lst do uruchomienia obrazu rozruchowego GRUB 2 z istniejącej " +"instalacji GRUB Legacy. Ten krok zostanie teraz wykonany automatycznie." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Zaleca się zaakceptowanie szeregowego uruchomienia (ang. chainload) GRUB 2 z " +"menu.lst i zweryfikowanie poprawności nowych ustawień GRUB-a 2 przed jego " +"zapisem do głównego sektora rozruchowego (ang. MBR - Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Niezależnie od podjętej teraz decyzji, zastąpienie starego obrazu MBR przez " +"GRUB 2 można przeprowadzić później, wykonując następujące polecenie z " +"uprawnieniami administratora:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Urządzenia do instalacji GRUB-a:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Pakiet grub-pc został zaktualizowany. To menu pozwala na wybranie urządzeń, " +"dla których powinno zostać uruchomione automatycznie polecenie grub-install, " +"jeśli to konieczne." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Automatyczne uruchomienie grub-install jest wskazane w większości " +"przypadków, aby zapobiec straceniu synchronizacji z modułami GRUB-a w grub." +"cfg przez jego główny obraz." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Jeśli nie jest się pewnym, który napęd został wybrany jako napęd rozruchowy " +"przez BIOS komputera, dobrym pomysłem jest zainstalowanie GRUB-a na " +"wszystkich dyskach." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Uwaga: jest możliwe zainstalowanie GRUB-a również w sektorach rozruchowych " +"partycji i część odpowiednich partycji jest tu wypisana. Niestety, wymusza " +"to na GRUB-ie użycie mechanizmu blocklist, który jest bardziej zawodny i, w " +"związku z tym, niezalecany." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Program rozruchowy GRUB był zainstalowany wcześniej na dysku który jest " +"teraz nieobecny lub którego unikalny identyfikator zmienił się z jakiegoś " +"powodu. Jest istotne, aby upewnić się, że główny obraz GRUB-a jest " +"zsynchronizowany z modułami GRUB-a w grub.cfg. Proszę sprawdzić ponownie, " +"czy GRUB jest zapisywany na właściwe urządzenia rozruchowe." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" +"Zapisywanie GRUB-a na urządzenia rozruchowe nie powiodło się - kontynuować?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Nie powiodło się zainstalowanie GRUB-a na następujących urządzeniach:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Czy kontynuować mimo to? Jeśli tak, ten komputer może nie uruchomić się " +"poprawnie." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Zapisywanie GRUB-a na urządzenia rozruchowe nie powiodło się - spróbować " +"ponownie?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Istnieje możliwość zainstalowania GRUB-a na jakimś innym urządzeniu, ale " +"należy sprawdzić, czy system się z niego uruchomi. W innym przypadku, " +"aktualizacja z GRUB Legacy zostanie odwołana." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Kontynuować bez instalowania GRUB-a?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Wybrano nieinstalowanie GRUB-a na żadnym urządzeniu. W przypadku " +"kontynuowania, program rozruchowy może nie być poprawnie skonfigurowany, a " +"kiedy komputer zostanie uruchomiony ponownie, będzie używał tego, co " +"znajdowało się poprzednio w sektorze rozruchowym. Jeśli jest tam " +"wcześniejsza wersja GRUB-a 2, załadowanie modułów lub obsłużenie aktualnego " +"pliku konfiguracyjnego może być niemożliwe." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Jeśli używany jest obecnie inny program rozruchowy i ma być on używany nadal " +"lub jeśli jest to specjalne środowisko, które nie potrzebuje programu " +"rozruchowego, należy kontynuować. W przeciwnym wypadku, powinno się gdzieś " +"zainstalować GRUB-a." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Usunąć GRUB-a 2 z /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Czy usunąć wszystkie pliki GRUB-a 2 z /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Może to spowodować brak możliwości uruchomienia systemu, chyba że " +"zainstalowany jest inny program rozruchowy." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Zakończyć przejście do GRUB-a 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"System ma wciąż zainstalowane pliki z programu rozruchowego GRUB Legacy, ale " +"na następujących dyskach zainstalowano także wpisy rozruchowe GRUB-a 2:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Wygląda na to, że GRUB Legacy nie jest już dłużej używany i należy " +"zaktualizować obrazy GRUB-a 2 na tych dyskach oraz zakończyć przejście na " +"GRUB-a 2 przez usunięcie starych plików GRUB Legacy. Jeśli nie " +"zaktualizowano tych obrazów GRUB-a 2, mogą być one niekompatybilne z nowymi " +"pakietami i spowodować problemy z poprawnym uruchamianiem systemu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Można zakończyć przejście na GRUB-a 2, chyba że te wpisy rozruchowe zostały " +"stworzone przez GRUB-a 2 zainstalowanego w jakimś innym systemie operacyjnym." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Wiersz poleceń do Linuksa:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Następujące polecenie do Linuksa zostało wyodrębnione z /etc/default/grub " +"lub z parametru \"kopt\" w menu.lst GRUB-a Legacy. Proszę sprawdzić czy jest " +"właściwe i zmodyfikować go, jeśli to konieczne. Wiersz z poleceniem może być " +"pusty." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Domyślny wiersz poleceń do Linuksa:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Następujący ciąg będzie użyty jako parametry przekazywane do jądra Linux w " +"domyślnym wpisie menu (ale nie w trybie ratunkowym)." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Wiersz poleceń do kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Następujące polecenie do kFreeBSD zostało wyodrębnione z /etc/default/grub " +"lub z parametru \"kopt\" w menu.lst GRUB-a Legacy. Proszę sprawdzić czy jest " +"właściwe i zmodyfikować go, jeśli to konieczne. Wiersz z poleceniem może być " +"pusty." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Domyślny wiersz poleceń do kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Następujący ciąg będzie użyty jako parametry przekazywane do jądra kFreeBSD " +"w domyślnym wpisie menu (ale nie w trybie ratunkowym)." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map został odtworzony" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Plik /boot/grub/device.map został odtworzony tak, aby używał stabilnych nazw " +"urządzeń. W większości przypadków powinno to ograniczyć konieczność jego " +"zmian w przyszłości, a wpisy menu wygenerowane przez GRUB-a nie powinny " +"zostać naruszone." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Jednakże, ponieważ w systemie jest więcej niż jeden dysk, istnieje " +"możliwość, że system korzysta ze starej mapy urządzeń. Proszę sprawdzić, czy " +"istnieją jakieś specjalne wpisy rozruchowe menu, które polegają na numeracji " +"GRUB-a (hdN) i zaktualizować je, jeśli to konieczne." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Jeśli ta wiadomość jest niezrozumiała lub jeśli nie tworzono żadnych " +"specjalnych wpisów menu, można ją zignorować." --- grub2-1.99.orig/debian/po/sv.po +++ grub2-1.99/debian/po/sv.po @@ -0,0 +1,424 @@ +# translation of grub2 debconf messages to Swedish +# Swedish translation for grub2. +# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub2 package. +# +# Daniel Nylander , 2007. +# Martin Ågren , 2008, 2009. +# Martin Bagge , 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub2_sv\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-06-02 03:22+0100\n" +"Last-Translator: Martin Bagge / brother \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Swedish\n" +"X-Poedit-Country: Sweden\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Kedjeladda från menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB:s uppgraderingsskript har upptäckt en gammal GRUB-inställning i /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Om du vill ersätta den gamla versionen av GRUB i systemet, rekommenderas " +"att /boot/grub/menu.lst justeras till att kedjeladda GRUB 2 från din " +"existerande, gamla GRUB-inställning. Detta steg kan utföras automatiskt nu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Det rekommenderas att GRUB 2 kedjeladdas från menu.lst så att det kan " +"säkerställas att den nya GRUB 2-inställningen fungerar innan den installeras " +"direkt till huvudstartsektorn (MBR)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Oberoende av ditt beslut kan den gamla MBR-avbildningen ersättas med GRUB 2 " +"vid ett senare tillfälle genom att följande kommando utförs som root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB installationsenheter:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Paketet grub-pc uppdateras. Denna meny ger dig möjlighet att välja vilka, om " +"några, enheter som grub-install ska köras automatiskt för." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Att köra grub-install automatiskt är rekomenderat i de flesta situationer " +"för att förhindra att den installerade GRUB-huvudavbidlningen för att hamna " +"i ett förhållande där GRUB-moduler eller grub.cfg inte är i korrekt läge." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Om du är osäker på vilken disk som är uppstartsdisken enligt BIOS så är det " +"vanligen en god idé att installera GRUB på alla." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"OBS: det är möjligt att installera GRUB i partitionens uppstartsområde " +"också, några av dessa visas nedan. Dock innebär installation där att GRUB " +"tvingas använda en blockeringslista, som gör funktionen mindre pålitlig, och " +"detta rekomenderas inte." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Uppstartshanteraren GRUB var tidigare installerad på en disk som inte längre " +"finns tillgänglig eller vars unika identifikation har ändrats av någon " +"anledning. Det är viktigt att säkerställa att den installerade GRUB-" +"huvudavbildningen är korrekt i förhållande till GRUB-moduler och grub.cfg. " +"Kontrollera återigen att GRUB är tillgänglig på rätt uppstartsenhet." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Skriva GRUB till uppstartsenhet misslyckades - fortsätta?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB kunde inte installeras på följande enheter:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Vill du fortsätta i alla fall? Det kan innebära att systemet inte kan starta " +"korrekt." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Skrivningen av GRUB till uppstartsenheten misslyckades - försöka igen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Du kan kanske installera GRUB till någon annan enhet, du bör dock " +"kontrollera att systemet kommer att starta från den enheten. I annat fall " +"kommer uppgraderingen från äldre GRUB-version att avbrytas." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Fortsätt utan att installera GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Du valde att inte installera GRUB på några enheter. Om du fortsätter kommer " +"uppstartshanteraren kanske inte att få korrekta inställningar och när ditt " +"system startar nästa gång kommer det att använda vad som tidigare fanns i " +"boot-sektorn. Om en tidigare version av GRUB 2 används i boot-sektorn finns " +"risk att vissa moduler inte kan laddas och hantera de aktuella " +"inställningsfilerna." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Om du redan kör en annan uppstartshanterare och vill fortsätta med det eller " +"om detta är en specialmiljö som inte behöver en uppstartshanterare ska du " +"fortsätta i alla fall. I annat fall ska du installera GRUB någonstans." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Radera GRUB 2 från /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Vill du att alla GRUB 2-filer ska raderas från /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Detta innebär att systemet inte kan starta om ingen annan uppstartshanterare " +"är installerad." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Avsluta konverteringen till GRUB 2 nu?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Detta system har fortfarande filer från den äldre GRUB-uppstartshanteraren " +"installerade men nu finns det dessutom GRUB 2 uppstartsinformation på " +"följande enheter:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Det är troligt att den äldre GRUB-versionen inte längre används och du bör " +"istället uppgradera till GRUB 2-avbildningar på dessa enheter och avsluta " +"konverteringen till GRUB 2 genom att ta bort äldre GRUB-filer. Om du inte " +"vill uppgradera dessa GRUB 2-avbildningar kan de bli oanvändbara tillsammans " +"med det nya paketet och systemet sluta att fungera korrekt." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Det generella rådet är att avsluta konverteringen till GRUB 2 om dessa filer " +"inte skapats av en GRUB 2-installation på ett annat opertivsystem." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Kommandorad för Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Följande Linux-kommandorad hämtades från /etc/default/grub eller \"kopt\"-" +"parametern i gamla GRUB:s menu.lst. Verifiera att den är korrekt och " +"modifiera den om nödvändigt. Kommandoraden kan vara tom." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Standardkommandorad för Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Följande sträng kommer användas som Linux-parametrar för standardmenyvalet " +"men inte för återhämtningsläge (eng. recovery)." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Kommandorad för kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Följande kFreeBSD-kommandorad hämtades från /etc/default/grub eller \"kopt\"-" +"parametern i gamla GRUB:s menu.lst. Verifiera att den är korrekt och " +"modifiera den om nödvändigt. Kommandoraden kan vara tom." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Standardkommandorad för kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Följande sträng kommer användas som Linux-parametrar för standardmenyvalet " +"men inte för återhämtningsläge (eng. recovery)." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map har skapats på nytt" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Filen /boot/grub/device.map har skrivits om för att använda stabila " +"enhetsnamn. I de allra flesta fall kommer detta innebära att anledningarna " +"att byta namn i framtiden minskar drastiskt. Posterna i uppstartsmenyn som " +"skapas av GRUB ska inte påverkas." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Dock, eftersom mer än en disk finns i systemet kan det innebära att systemet " +"är beroende av den gamla enhetskopplingen. Kontrollera om det finns manuellt " +"införda poster i uppstartsmenyn som är beroende av GRUB:s enhetsnumrering " +"(hdN) och uppdatera dessa om nödvändigt." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Om du inte förstår detta meddelande eller om du inte har några alterantiva " +"menyposter kan du ignorera detta meddelande." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "När GRUB 2 ska laddas direkt från huvudstartsektorn, kan detta " +#~ "åstadkommas genom att (som root) köra följande kommando:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Installationen av GRUB misslyckades. Fortsätta?" --- grub2-1.99.orig/debian/po/fi.po +++ grub2-1.99/debian/po/fi.po @@ -0,0 +1,447 @@ +# Esko Arajärvi , 2009, 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-08-22 13:43+0300\n" +"Last-Translator: Esko Arajärvi \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Finnish\n" +"X-Poedit-Country: FINLAND\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Ladataanko ketjutettuna tiedostosta menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUBin päivityskomentosarjat ovat löytäneet vanhoja GRUB-asetuksia " +"tiedostosta /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Järjestelmässä olevan vanhan GRUB-version korvaamiseksi on suositeltavaa " +"muokata tiedostoa /boot/grub/menu.lst siten, että GRUB 2 ladataan olemassa " +"olevista vanhoista GRUB-asetuksista. Tämä voidaan tehdä automaattisesti nyt." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"On suositeltavaa, että hyväksyt GRUB 2:n ketjutetun lataamisen tiedostosta " +"menu.lst ja varmistat uusien GRUB 2 -asetusten toimivuuden ennen kuin " +"asennat ne pääkäynnistyslohkoon (MBR)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "GRUBia ei voitu asentaa seuraaville laitteille:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} Mt; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} Mt; ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUBia ei voitu asentaa seuraaville laitteille:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Valitse haluatko jatkaa tästä huolimatta. Jos jatkat, järjestelmä ei " +"välttämättä käynnisty kunnolla." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUBin asennus epäonnistui. Yritetäänkö uudelleen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Voit ehkä asentaa GRUBin jollekin toiselle levylle. Varmista tällöin, että " +"järjestelmäsi voidaan käynnistää kyseiseltä levyltä. Muussa tapauksessa " +"GRUBin aiemman version päivitys perutaan." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Jatketaanko asentamatta GRUBia?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is an " +#| "earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Päätit olla asentamatta GRUBia millekään levylle. Jos jatkat, " +"alkulatausohjelman asetukset saattavat olla väärät ja kun kone käynnistetään " +"uudelleen seuraavan kerran, se käyttää käynnistyslohkon aiempia asetuksia. " +"Jos käynnistyslohkossa on GRUB 2:n aiempi versio, se ei välttämättä pysty " +"lataamaan moduuleja tai käsittelemään nykyistä asetustiedostoa." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Jos käytät jo muuta alkulatausohjelmaa ja haluat jatkaa sen käyttöä tai jos " +"käytössäsi on erityinen ympäristö, jossa et tarvitse alkulatausohjelmaa, " +"voit jatkaa asennusta. Muussa tapauksessa sinun tulisi asentaa GRUB johonkin." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Saatetaanko siirtyminen GRUB 2:een loppuun nyt?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Järjestelmässä on edelleen GRUBin aiemman version tiedostoja, mutta myös " +"GRUB 2:n käynnistystiedot on asennettu seuraaville levyille:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"GRUBin aiempi versio ei luultavasti ole enää käytössä ja näillä levyillä " +"olevat GRUB 2:n levykuvat tulisi päivittää ja siirtyminen GRUB 2:een saattaa " +"loppuun poistamalla vanhat GRUB-tiedostot. Jos et päivitä GRUB 2:n kuvia, " +"uusien pakettien kanssa voi tulla yhteensopivuusongelmia ja järjestelmän " +"käynnistys ei ehkä toimi oikein." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Yleisesti ottaen siirtyminen GRUB 2:een tulisi saattaa loppuun ellei näitä " +"käynnistystietoja luotu johonkin toiseen käyttöjärjestelmään asennetulla " +"GRUB 2:lla." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linuxin komentorivi:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"GRUBin aiemman version tiedostosta menu.lst parametrista ”kopt” tai " +"tiedostosta /etc/default/grub löydettiin seuraava Linuxin komentorivi. " +"Varmista, että se on kunnossa ja muuta sitä tarvittaessa." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linuxin oletuskomentorivi:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Seuraavaa merkkijonoa käytetään Linuxin käynnistysvalikon oletusvalinnan " +"parametreina, mutta ei toipumistilassa." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD:n komentorivi:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"GRUBin aiemman version tiedostosta menu.lst parametrista ”kopt” tai " +"tiedostosta /etc/default/grub löydettiin seuraava kFreeBSD:n komentorivi. " +"Varmista, että se on kunnossa ja muuta sitä tarvittaessa." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD:n oletuskomentorivi:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Seuraavaa merkkijonoa käytetään kFreeBSD:n käynnistysvalikon oletusvalinnan " +"parametreina, mutta ei toipumistilassa." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map on luotu uudelleen" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Tiedosto /boot/grub/device.map on kirjoitettu uudelleen käyttäen pysyviä " +"laitenimiä. Useimmissa tapauksissa tämän pitäisi huomattavasti vähentää " +"tarvetta sen muuttamiseen ja GRUBin luomien käynnistysvalikon rivien pitäisi " +"toimia edelleen." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Koska järjestelmässä kuitenkin on useampia levyjä, on mahdollista, että " +"jotkin asetukset viittaavat vanhaan laitetiedostoon. Tarkista onko " +"käynnistysvalikossa rivejä, joissa käytetään GRUBin laitenumerointia (hdN), " +"ja päivitä ne tarvittaessa." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Jos et ymmärrä tätä viestiä tai käynnistysvalikossa ei ole erityisiä rivejä, " +"voit jättää tämän viestin huomiotta." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Kun haluat asentaa GRUB 2:n latautumaan suoraan pääkäynnistyslohkosta, " +#~ "voit joka tapauksessa tehdä sen ajamalla pääkäyttäjänä seuraavan komennon:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUBin asennus epäonnistui. Jatketaanko?" --- grub2-1.99.orig/debian/po/it.po +++ grub2-1.99/debian/po/it.po @@ -0,0 +1,421 @@ +# Italian (it) translation of debconf templates for grub2 +# This file is distributed under the same license as the grub2 package. +# Luca Monducci , 2007-2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-14 italian debconf templates\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-02 21:52+0100\n" +"Last-Translator: Luca Monducci \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Effettuare il caricamento in cascata da menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Gli script di aggiornamento hanno rilevato una installazione di GRUB Legacy " +"in /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Per sostituire la versione Legacy di GRUB sul proprio sistema si raccomanda " +"di modificare il file /boot/grub/menu.lst in modo da caricare l'immagine di " +"avvio di GRUB 2 dall'attuale installazione di GRUB Legacy. Questa modifica " +"può essere effettuata automaticamente adesso." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Si raccomanda di accettare il caricamento in cascata di GRUB 2 da menu.lst e " +"di verificare che la nuova installazione di GRUB 2 funzioni prima di " +"procedere con l'installazione diretta sul MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Qualsiasi sia la decisione, in seguito sarà possibile sostituire la vecchia " +"immagine sul MBR con GRUB 2 eseguendo da root il seguente comando:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Installare GRUB sui device:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"È in corso l'aggiornamento del pacchetto grub-pc. Questo menu permette di " +"scegliere su quali device, se specificati, si vuole eseguire automaticamente " +"grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Nella maggioranza dei casi si raccomanda l'esecuzione automatica di grub-" +"install in modo da prevenire la perdita di sincronia dell'immagine " +"principale di GRUB con i moduli di GRUB o con grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Se non si è sicuri di quale sia il disco impostato come disco di avvio nel " +"BIOS, è consigliabile installare GRUB su tutti i device." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: è possibile installare GRUB anche nei boot record delle partizioni e " +"qui sono elencate le partizioni più appropriate. Purtroppo questo obbliga " +"GRUB a usare il meccanismo del \"blocklist\", che lo rende meno affidabile e " +"di conseguenza non è raccomandato." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"In precedenza il boot loader GRUB era installato su un disco non più " +"presente o che per qualche motivo ha cambiato identificatore univoco. È " +"importante assicurare che l'immagine principale di GRUB rimanga in sincronia " +"con i moduli di GRUB e con grub.cfg. Controllare nuovamente per essere " +"sicuri che GRUB sia scritto sui corretti device di avvio." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Scrittura di GRUB sul device di avvio non riuscita. Continuare?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "L'installazione di GRUB sui seguenti device non è riuscita:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Si vuole continuare? Continuando, il computer potrebbe non avviarsi più " +"correttamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Scrittura di GRUB sul device di avvio non riuscita. Riprovare?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"È possibile installare GRUB su un altro device, dopo aver verificato che il " +"proprio sistema si possa avviare da quel device. Altrimenti, l'aggiornamento " +"da GRUB Legacy verrà annullato." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Continuare senza installare GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Si è scelto di non installare GRUB su alcun device. Continuando, il boot " +"loader potrebbe non essere configurato correttamente e al prossimo avvio del " +"computer verrà usato il vecchio contenuto del settore di boot. Se nel " +"settore di boot è presente una versione precedente di GRUB 2, questa " +"potrebbe non essere in grado di caricare i moduli o di gestire l'attuale " +"file di configurazione." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Continuare solo se già si usa un boot loader diverso oppure se non si ha " +"necessità di un boot loader per questa macchina. Altrimenti è necessario " +"installare GRUB da qualche parte." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Rimuovere GRUB 2 da /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Rimuovere tutti i file di GRUB 2 da /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Questo potrebbe rendere il sistema non avviabile a meno che non sia " +"installato un altro boot loader." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Completare la conversione a GRUB 2 adesso?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Su questo sistema sono ancora presenti i file del boot loader GRUB Legacy ma " +"adesso sui seguenti dischi sono installati anche i boot record di GRUB 2:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Sembra che GRUB Legacy non sia più usato, per cui è consigliabile aggiornare " +"le immagini sui dischi con GRUB 2 e completare la conversione a GRUB 2 " +"eliminando i vecchi file di GRUB Legacy. Se non si aggiornano le immagini " +"con GRUB 2, in futuro potrebbero non essere più compatibili con i nuovi " +"pacchetti e potrebbero impedire il corretto avvio del sistema." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Si dovrebbe completare la conversione a GRUB 2 a meno che i boot record non " +"siano stati creati da un'altra installazione di GRUB 2 su un altro sistema " +"operativo." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Riga di comando Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La seguente riga di comando Linux è stata estratta da /etc/default/grub " +"oppure dal parametro \"kopt\" presente nel file menu.lst di GRUB Legacy. " +"Controllare che sia corretta e modificarla se necessario. La riga di comando " +"può essere vuota." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Riga di comando Linux predefinita:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Questa stringa verrà usata come parametri per Linux nella voce di menu " +"predefinita, ma non nella modalità di ripristino." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Riga di comando kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La seguente riga di comando kFreeBSD è stata estratta da /etc/default/grub " +"oppure dal parametro \"kopt\" presente nel file menu.lst di GRUB Legacy. " +"Controllare che sia corretta e modificarla se necessario. La riga di comando " +"può essere vuota." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Riga di comando kFreeBSD predefinita:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Questa stringa verrà usata come parametri per kFreeBSD nella voce di menu " +"predefinita, ma non nella modalità di ripristino." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map è stato rigenerato" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Il file /boot/grub/device.map è stato riscritto in modo da usare i nomi " +"stabili dei device. In molti casi questo dovrebbe ridurre in modo " +"significativo la necessità di cambiarli in futuro e le voci nel menu di GRUB " +"non dovrebbero essere influenzate." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Comunque, visto che sul sistema ci sono più dischi, è possibile che il " +"sistema sia dipendente dalla vecchia mappa dei device. Controllare se nel " +"menu di GRUB ci sono delle voci personalizzate che usano la numerazione dei " +"dischi di GRUB (hdN) e, se necessario, aggiornarle." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Se non si capisce questo messaggio o non ci sono voci di menu " +"personalizzate, ignorare questo messaggio." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "In ogni caso, per caricare GRUB 2 direttamente dal MBR, è necessario " +#~ "eseguire (da root) il seguente comando:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Installazione di GRUB non riuscita. Continuare?" --- grub2-1.99.orig/debian/po/pt_BR.po +++ grub2-1.99/debian/po/pt_BR.po @@ -0,0 +1,419 @@ +# grub2 Brazilian Portuguese translation +# Copyright (C) 2009 THE grub2'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub2 package. +# Flamarion Jorge , 2009, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.98\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-29 17:13-0300\n" +"Last-Translator: Flamarion Jorge \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Carregar em cadeia a partir do menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Os scripts de atualização do GRUB detectaram uma configuração do GRUB Legado " +"em /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"A fim de substituir a versão Legada do GRUB no seu sistema, é recomendável " +"que o /boot/grub/menu.lst seja ajustado para carregar uma imagem do GRUB 2 a " +"partir da sua configuração existente do GRUB Legado. Este passo pode ser " +"executado automaticamente agora." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"É recomendado que você aceite o carregamento em cadeia do GRUB 2 a partir do " +"menu.lst, e verifique que sua nova configuração do GRUB 2 está funcional, " +"antes de gravá-lo na MBR (\"Master Boot Record\")." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Seja qual for sua decisão, você pode substituir a antiga imagem da MBR com o " +"GRUB 2 mais tarde executando o seguinte comando como root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Instalar o GRUB nos dispositivos:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"O pacote grub-pc está sendo atualizado. Este menu permite a você selecionar " +"em quais dispositivos você quer que seja executado automaticamente o grub-" +"install, se houver algum." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Executar o grub-install automaticamente é recomendado na maioria das " +"situações para prevenir que a imagem principal instalada do GRUB saia de " +"sincronia com os módulos do GRUB ou com o grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Se você não tiver certeza de qual unidade é designada como unidade de " +"inicialização pela sua BIOS, muitas vezes é uma boa ideia instalar o GRUB em " +"todas elas." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: é possível instalar o GRUB em registros de inicialização de partições, " +"e algumas partições apropriadas para isso são oferecidas aqui. No entanto, " +"isto força o GRUB a usar o mecanismo de lista de blocos, que o torna menos " +"confiável, portanto, não é recomendado." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"O carregador de inicialização GRUB foi instalado anteriormente em um disco " +"que não está mais presente, ou seu identificador único foi modificado por " +"alguma razão. É importante certificar-se de que a imagem principal do GRUB " +"instalada está em sincronia com os módulos do GRUB e com o grub.cfg. Por " +"favor, verifique novamente e esteja certo de que o GRUB está gravado nos " +"dispositivos de inicialização apropriados." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "A gravação do GRUB no dispositivo de inicialização falhou - continuar?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Falha ao instalar o GRUB nos seguintes dispositivos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Você deseja continuar de qualquer maneira? Se você continuar, seu computador " +"talvez não inicialize corretamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"A gravação do GRUB no dispositivo de inicialização falhou - tentar novamente?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Você pode conseguir instalar o GRUB em outro dispositivo, mas você deve " +"verificar se o seu sistema vai conseguir inicializar a partir deste " +"dispositivo. Caso contrário, a atualização do GRUB Legado será cancelada." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Continuar sem instalar o GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Você escolheu não instalar o GRUB em nenhum dispositivo. Se você continuar, " +"o carregador de inicialização poderá não ser configurado corretamente, e na " +"próxima vez que este computador inicializar ele usará a versão que estava " +"anteriormente no setor de inicialização. Se houver uma versão anterior do " +"GRUB 2 no setor de inicialização, pode ser que ele não consiga carregar " +"módulos ou manipular corretamente o arquivo de configuração atual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Se você já estiver usando um carregador de inicialização diferente e quiser " +"continuar a fazê-lo, ou se este é um ambiente especial, onde você não " +"precisa de um carregador de inicialização, então você deve continuar de " +"qualquer maneira. Caso contrário, você deve instalar o GRUB em algum outro " +"lugar." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Remover o GRUB 2 do /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Você deseja ter todos os arquivos do GRUB 2 removidos de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Isto fará com que seu sistema não inicialize a menos que outro carregador de " +"inicialização esteja instalado." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Completar a conversão para o GRUB 2 agora?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Este sistema ainda tem arquivos do carregador de inicialização do GRUB " +"Legado instalados, mas agora também tem registros de inicialização do GRUB 2 " +"instalados nestes discos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Parece provável que o GRUB Legado não está mais em uso, e que você deve " +"atualizar as imagens do GRUB 2 nestes discos e completar a conversão para o " +"GRUB 2, removendo arquivos antigos do GRUB Legado. Se você não atualizar " +"essas imagens do GRUB 2, então elas podem ser incompatíveis com os novos " +"pacotes e fazer com que o sistema deixe de inicializar corretamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Você normalmente deveria completar a conversão para o GRUB 2, a menos que " +"esses registros de inicialização tenham sido criados por uma instalação do " +"GRUB 2 em algum outro sistema operacional." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linha de comando Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A linha de comando Linux a seguir foi extraída de /etc/default/grub ou do " +"parâmetro 'kopt' do menu.lst do GRUB Legado. Por favor, verifique se ela " +"está correta, e modifique-a se necessário. A linha de comando pode ser vazia." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linha de comando padrão Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"O seguinte texto será usado como lista de parâmetros do Linux para a entrada " +"padrão do menu, mas não para o modo de recuperação." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Linha de comando kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A linha de comando kFreeBSD a seguir foi extraída de /etc/default/grub ou do " +"parâmetro 'kopt' do menu.lst do GRUB Legado. Por favor, verifique se ela " +"está correta, e modifique-a se necessário. A linha de comando pode ser vazia." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Linha de comando padrão kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"O seguinte texto será usado como lista de parâmetros do kFreeBSD para a " +"entrada padrão do menu, mas não para o modo de recuperação." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map foi gerado novamente" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"O arquivo /boot/grub/device.map foi reescrito para usar nomes estáveis de " +"dispositivo. Na maioria dos casos, isto pode reduzir de forma significativa " +"a necessidade de mudá-los no futuro, e as entradas do menu de inicialização " +"geradas pelo GRUB não devem ser afetadas." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Entretanto, como mais de um disco está presente no sistema, é possível que o " +"sistema esteja dependendo do antigo mapa de dispositivos. Por favor, " +"verifique se existem quaisquer outras entradas personalizadas no menu de " +"inicialização que dependam da numeração de unidade do GRUB (hdN), e atualize-" +"as se necessário." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Se você não compreende esta mensagem, ou se não existem entradas " +"personalizadas no menu de inicialização, você pode ignorar esta mensagem." --- grub2-1.99.orig/debian/po/gl.po +++ grub2-1.99/debian/po/gl.po @@ -0,0 +1,448 @@ +# translation of grub2_1.98+20100804-2_gl.po to Galician +# Galician translation of grub2's debconf templates +# This file is distributed under the same license as the grub2 package. +# +# Jacobo Tarrio , 2007, 2008. +# Jorge Barreiro , 2010. +msgid "" +msgstr "" +"Project-Id-Version: grub2_1.98+20100804-2_gl\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-08-13 02:53+0200\n" +"Last-Translator: Jorge Barreiro \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "¿Cargar en cadea desde menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Os scripts de actualización de GRUB detectaron unha configuración do GRUB " +"antigo en /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Para substituír a versión antiga de GRUB do sistema, recoméndase axustar /" +"boot/grub/menu.lst para cargar GRUB 2 en cadea desde a configuración " +"existente do GRUB antigo. Pódese realizar este paso automaticamente agora." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Recoméndase que acepte cargar en cadea GRUB 2 desde menu.lst, e que " +"verifique que a nova configuración de GRUB 2 funciona para vostede, antes de " +"instalalo directamente no MBR (rexistro mestre de inicio)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "Non se puido instalar GRUB nos seguintes dispositivos:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Non se puido instalar GRUB nos seguintes dispositivos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Quere continuar de todas maneiras? Se o fai, pode que a súa computadora non " +"poida iniciar correctamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "A instalación de GRUB fallou. Quere tentalo de novo?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Ó mellor pode instalar GRUB en outro dispositivo, pero debería comprobar que " +"o seu sistema pode iniciar desde él. Se non, a instalación desde GRUB Legacy " +"cancelarase." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Continuar sen instalar GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is an " +#| "earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Escolleu non instalar GRUB en ningún dispositivo. De continuar, o cargador " +"de arranque pode non quedar adecuadamente configurado, e a próxima vez que " +"arranque o sistema usarase o que houbese antes no sector de arranque. Se nel " +"hai unha versión antiga de GRUB 2 pode que esta sexa incapaz de cargar os " +"módulos ou de manexar o ficheiro de configuración actual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Se xa está usando un cargador de arranque diferente e quere seguir usandoo, " +"ou se este é un ambiente especial onde non necesita un cargador de arranque, " +"debería continuar. En caso contrario debería instalar GRUB en algún lugar." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Rematar a conversión a GRUB 2 agora?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Este sistema aínda ten instalados ficheiros do cargador de arranque GRUB " +"Legacy, pero agora tamén ten rexistros de arranque de GRUB 2 nestes discos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Asemella que GRUB Legacy xa non se usa, e que debería actualizar as imaxes " +"de GRUB 2 nestes discos e rematar a conversión a GRUB2 eliminando os " +"ficheiros vellos de GRUB Legacy. Se non actualiza estas imaxes de GRUB 2, " +"poderían ser incompatibles cos novos paquetes e provocar que sistema non " +"arranque correctamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"En xeral, debería rematar a conversión a GRUB 2 a menos que estos rexistros " +"de inicio fosen creatos por unha instalación de GRUB 2 en outro sistema " +"operativo." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Liña de comando de Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A seguinte liña de comando de Linux sacouse de /etc/default/grub ou do " +"parámetro \"kopt\" no ficheiro menu.lst de GRUB Legacy. Verifique que sexa " +"correcta e modifíquea de ser preciso." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Liña de comando por defecto para Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"A seguinte liña será usada como parámetros para Linux na entrada por defecto " +"do menú, pero non no modo de recuperación." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Liña de comando de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"A seguinte liña de comando de kFreeBSD sacouse de /etc/default/grub, ou do " +"parámetro \"kopt\" no ficheiro menu.lst de GRUB Legacy. Verifique que sexa " +"correcta e modifíquea de ser preciso." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Liña de comando por defecto para kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"A seguinte cadea usarase como parámetros para kFreeBSD para a entrada por " +"defecto do menú, pero non para o modo de recuperación." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map foi rexenerado." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"O ficheiro /boot/grub/device.map foi reescrito para usar nomes de " +"dispostivos estables. Na maioría dos casos esto debería reducir " +"significativamente a necesidade de cambialos en un futuro, e as entradas no " +"menú de GRUB non se verían afectadas." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Porén, como ten máis de un disco no seu sistema, pode que dependa do vello " +"«device map». Comprobe se ten algunha entrada personalizada no menú de " +"arranque que use a numeración de GRUB (hdN) e actualícea de ser necesario." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Se non comprende esta mensaxe, ou se non ten ningunha entrada personalizada " +"no menú de arranque, pode ignorala." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "En calquera caso, cando queira cargar GRUB 2 directamente desde o MBR, " +#~ "pode facelo executando (coma administrador) a seguinte orde:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "A instalación de GRUB fallou. Quere continuar?" --- grub2-1.99.orig/debian/po/ka.po +++ grub2-1.99/debian/po/ka.po @@ -0,0 +1,386 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2009-08-30 18:05+0400\n" +"Last-Translator: Aiet Kolkhi \n" +"Language-Team: Georgian \n" +"Language: ka\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: georgian\n" +"X-Poedit-Country: GEORGIA\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "გსურთ Chainload ჩატვირთვა menu.lst-დან?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB-ის განახლების სკრიფტები GRUB-ის ძველ ინსტალაციას გადააწყდა /boot/grub " +"მდებარეობაში." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"იმისათვის, რომ თქვენს სისტემაზე ჩანაცვლდეს ძველი GRUB-ის ინსტალაცია, " +"სასურველია /boot/grub/menu.lst ჩასწორდეს, რომ შეასრულოს GRUB 2-ის chainload " +"ჩატვირთვა თქვენი არსებული GRUB-ის ძველი ინსტალაციიდან. ეს საფეხური " +"შესაძლებელია ახლა შესრულდეს ავტომატურად." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"სასურველია მიიღოთ menu.lst-დან GRUB 2-ის chainload მეთოდით ჩატვირთვა, ასევე " +"გადაამოწმოთ, რომ თქვენი ახალი GRUB 2-ის ინსტალაცია ფუნქციონირებდეს, სანამ " +"მას პირდაპირ Master Boot Record (MBR)-ში ჩაწერდეთ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "ლინუქსის ბრძანების სტრიქონი:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"ლინუქსის შემდეგი ბრძანება მოძიებულ იქნა /etc/default/grub-დან ან `kopt' " +"პარამეტრიდან ძველი GRUB-ის menu.lst-ში. გადაამოწმეთ, რომ იგი სწორია, ან " +"შეცვალეთ შესაბამისად." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "ლინუქსის სტანდარტული ბრძანების სტრიქონი:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"შემდეგი სტრიქონი გამოყენებულ იქნება როგორც ლინუქსის პარამეტრები მენიუს " +"სტანდარტული შენატანისათვის, მაგრამ არა აღდგენის რეჟიმისათვის." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD ბრძანების სტრიქონი:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"შემდეგი kFreeBSD-ის ბრძანების სტრიქონი ამოღებულ იქნა /etc/default/grub-დან " +"ან `kopt' პარამეტრიდან ძველი GRUB-ის menu.lst-ში. გადაამოწმეთ, რომ იგი " +"სწორია, ან შეცვალეთ შესაბამისად." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD-ის სტანდარტული ბრძანების სტრიქონი:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"შემდეგი სტრიქონი გამოყენებულ იქნება როგორც kFreeBSD-ს პარამეტრები მენიუს " +"სტანდარტული შენატანისათვის, მაგრამ არა აღდგენის რეჟიმისათვის." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "ნებისმიერ შემთხვევაში, როდესაც მოისურვებთ GRUB 2 პირდაპირ MBR-დან " +#~ "ჩაიტვირთოს, ამისათვის გაუშვით შემდეგი ბრძანება (root პრივილეგიებით):" --- grub2-1.99.orig/debian/po/da.po +++ grub2-1.99/debian/po/da.po @@ -0,0 +1,422 @@ +# Danish translation grub2. +# Copyright (C) 2011 grub2 & nedenstående oversættere. +# This file is distributed under the same license as the grub2 package. +# Joe Hansen , 2010, 2011. +# Korrekturlæst Kenneth Nielsen, Keld Jørn Simonsen, Torben Grøn Helligsø. +# +# Chain loading -> Chain loading is a method used by computer programs +# to replace the currently executing program with a new program, +# using a common data area (a so-called core common area) to pass +# information from the current program to the new program. It occurs +# in several areas of computing. Et dansk navn? +# man kunne måske med nogen rimelighed kalde det for kædeindlæsning, men +# egentlig er det her jo et af de ord som jeg ikke mener at behøver at +# oversætte. Dem der har brug for at vide hvad det er, kender kun det +# engelsk ord og det danske vil måske endda forvirre mere end det vil +# gøre gavn. I hvert fald, hvis du vil oversætte vil jeg anbefale at +# sætte chainloade i parentes der hvor du kan. Beholdt uoversat. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 17:30+01:00\n" +"Last-Translator: Joe Hansen \n" +"Language-Team: Danish \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Chainload fra menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Opgraderingsskripterne til GRUB har fundet en GRUB Legacy-opsætning i /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"For at erstatte GRUB-versionen Legacy på dit system, anbefales det at /boot/" +"grub/menu.lst justeres til at indlæse GRUB 2's opstartsaftryk fra din " +"eksisterende GRUB Legacy-opsætning. Dette trin kan udføres automatisk nu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Det anbefales, at du accepterer at chainloade GRUB 2 fra menu.lst, og " +"verificerer at din nye GRUB 2-opsætning virker for dig, før du installerer " +"den direkte til din MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Uanset din beslutning kan du senere erstatte dit gamle MBR-aftryk med GRUB 2 " +"ved at foretage den følgende kommando som administrator (root):" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUBs installationsenheder:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Pakken grub-pc bliver opgraderet. Denne menu tillader dig at vælge, hvilke " +"enheder om nogen, du vil have at grub-install automatisk skal køres for." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Automatisk kørsel af grub-install anbefales i de fleste situationer, for at " +"forhindre at det installerede GRUB-kerneaftryk kommer ud af synkronisering " +"med GRUB-moduler eller grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Hvis du er usikker på hvilket drev, der er bestemt som opstartsdrev af din " +"BIOS, er det ofte en god ide at installere GRUB på dem alle." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Bemærk: Det er også muligt at installere GRUB til partitioners " +"opstartspunkter, og nogle egnede partitioner tilbydes her. Dette tvinger dog " +"GRUB til at bruge blokeringslistemekanismen, som gør den mindre pålidelig, " +"og dette anbefales derfor ikke." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB-opstartsindlæseren blev tidligere installeret til en disk, som ikke " +"længere er tilgængelig, eller hvis unikke identifikation er blevet ændret. " +"Det er vigtigt at sikre sig, at det installerede GRUB-kerneaftryk forbliver " +"i synkronisering med GRUB-moduler og grub-cfg. Kontroller venligst en ekstra " +"gang så du er sikker på, at GRUB skrives til de relevante opstartsenheder." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Skrivning af GRUB til opstartsenhed fejlede - vil du fortsætte?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Kunne ikke installere GRUB på de følgende enheder:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Ønsker du at fortsætte alligevel? Hvis du fortsætter, kan din computer måske " +"ikke starte korrekt op." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Skrivning af GRUB til opstartsenhed fejlede - forsøg igen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Du kan måske installere GRUB til en anden enhed, selvom du skal tjekke at " +"dit system kan/vil opstarte fra denne enhed. Ellers vil opgraderingen fra " +"GRUB Legacy blive afbrudt." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Fortsæt uden at installere GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Du har valgt ikke at installere GRUB på nogen enhed. Hvis du fortsætter, vil " +"opstarteren (boot loader) måske ikke være korrekt konfigureret, og når din " +"computer starter op næste gang, vil den bruge det tidligere indhold i din " +"opstartssektor (boot sector). Hvis der er en tidligere version af GRUB 2 i " +"opstartsektoren, vil den måske ikke være i stand til at indlæse moduler " +"eller håndtere den aktuelle konfigurationsfil." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Hvis du allerede kører en anden opstarter (boot loader) og ønsker at " +"fortsætte sådan, eller hvis dette er et specielt miljø, hvor du ikke har " +"brug for en opstarter, så skal du fortsætte alligevel. Ellers skal du " +"installere GRUB et eller andet sted." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Fjern GRUB 2 fra /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Ønsker du at alle GRUB 2-filer skal fjernes fra /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Dette vil medføre, at systemet ikke kan opstartes med mindre en anden " +"opstarter (boot loader) er installeret." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Afslut konvertering til GRUB 2 nu?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Dette system har stadig filer fra GRUB Legacy-opstarteren installeret, men " +"systemet har nu også GRUB 2 opstartsposter installeret på disse diske:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Det virker sandsynligt at GRUB Legacy ikke længere er i brug, og at du i " +"steden fir skal opgradere GRUB 2-billederne på disse diske og afslutte " +"konverteringen til GRUB 2 ved af fjerne ældre GRUB Legacy-filer. Hvis du " +"ikke opgraderer disse GRUB 2-billeder, så er de måske ikke kompatible med de " +"nye pakker og får dit system til at holde op med at starte korrekt op." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Du bør generelt afslutte konverteringen til GRUB 2 medmindre disse " +"opstartsposter blev oprettet af en GRUB 2-installation på et andet " +"operativsystem." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Kommandolinje til Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Den følgende kommandolinje i Linux blev udtrukket fra /etc/default/grub " +"eller parameteren `kopt' i GRUB Legacys menu.lst. Verificer venligst at den " +"er korrekt, og ændre den om nødvendigt. Kommandolinjen må være tom." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Standardkommandolinje i Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Den følgende streng vil blive brugt som Linuxparametre for " +"standardmenupunktet men ikke for gendannelsestilstanden." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Kommandolinje for kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Den følgende kommandolinje i kFreeBSD blev udtrukket fra /etc/default/grub " +"eller fra parameteren `kopt' i GRUB Legacys menu.lst. Verificer venligst at " +"den er korrekt, og ændre den om nødvendigt. Kommandolinjen må være tom." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Standardkommandolinje i kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Den følgende streng vil blive brugt som kFreeBSD-parametre for " +"standardmenupunktet men ikke for gendannelsestilstanden." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map er blevet gendannet" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Filen /boot/grub/device.map er blevet genskrevet til at bruge stabile " +"enhedsnavne. I de fleste tilfælde vil dette markant reducere behovet for at " +"ændre filen fremover, og opstartsmenupunkter oprettet af GRUB vil ikke blive " +"påvirket." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Da du har mere end en disk i dit sytem, er det dog muligt, at du har en " +"afhængighed af det gamle enhedskort. Tjek venligst om der er nogle " +"tilpassede opstartsmenupunkter som afhænger af GRUB's (hdn) drevnummerering, " +"og opdater dem om nødvendigt." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Hvis du ikke forstår denne besked, eller der ikke er nogen tilpassede " +"opstartsmenupunkter, kan du ignorere denne besked." --- grub2-1.99.orig/debian/po/hr.po +++ grub2-1.99/debian/po/hr.po @@ -0,0 +1,419 @@ +# Translation of grub2 debconf templates to Croatian +# Copyright (C) 2010 Josip Rodin +# This file is distributed under the same license as the grub2 package. +# Josip Rodin , 2010. +# Tomislav Krznar , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.97-2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-03-22 16:37+0100\n" +"Last-Translator: Tomislav Krznar \n" +"Language-Team: Hrvatski \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Učitaj ulančano preko menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Skripte za nadogradnju GRUB-a su pronašle GRUB Legacy postavke u /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Kako bi zamijenili Legacy verziju GRUB-a na vašem sustavu, preporučuje se " +"prilagodba /boot/grub/menu.lst kako bi se ulančano učitao GRUB 2 iz vaših " +"postojećih GRUB Legacy postavki. Ovaj korak se sada može automatski izvršiti." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Preporučuje se da prihvatite ulančano učitavanje GRUB 2 iz menu.lst, tako da " +"možete provjeriti da vam nove GRUB 2 postavke funkcioniraju, prije nego što " +"izravno instalirate GRUB2 u MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Što god odlučite, možete zamijeniti stari sadržaj MBR-a sa GRUB 2 kasnije " +"pokretanjem sljedeće naredbe kao root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB uređaji za instalaciju:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Paket grub-pc se nadograđuje. Ovaj izbornik omogućava biranje uređaja za " +"koje želite automatski pokrenuti grub-install, ako postoje." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Automatsko pokretanje grub-install je preporučeno u većini slučajeva kako bi " +"instalirana GRUB osnovna slika bila sinkronizirana s GRUB modulima ili grub." +"cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Ako niste sigurni koji je uređaj u BIOS-u određen za učitavanje, obično je " +"dobra ideja instalirati GRUB na svaki." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Napomena: moguće je instalirati GRUB u particijski boot zapis, ovdje su " +"navedene neke odgovarajuće particije. Međutim, to prisiljava GRUB na " +"korištenje mehanizma blokiranja, što može biti manje pouzdano i zato se ne " +"preporučuje." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB boot učitavač je prethodno instaliran na disk koji više nije prisutan, " +"ili se njegov jedinstveni identifikator iz nekog razloga promijenio. Važno " +"je osigurati da instalirana GRUB osnovna slika ostane sikronizirana s GRUB " +"modulima i grub.cfg. Molim ponovo provjerite je li GRUB instaliran na " +"odgovarajuće boot uređaje." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Instalacija GRUB-a nije uspjela - želite li nastaviti?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB nije uspio instalaciju na sljedeće uređaje:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Želite li ipak nastaviti? Ako to napravite, vaše računalo se možda neće moći " +"uredno pokrenuti." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Instalacija GRUB-a nije uspjela. Pokušati ponovo?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Možda možete instalirati GRUB na neki drugi uređaj, iako biste morali " +"provjeriti da se vaš sustav može podizati s tog uređaja. U suprotnom, " +"nadogradnja s GRUB Legacy će biti prekinuta." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Nastaviti bez instalacije GRUB-a?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Odabrali ste da ne instalirate GRUB ni na jedan uređaj. Ako nastavite, boot " +"učitavač neće biti ispravno podešen, a kada se vaše računalo idući put " +"upali, koristit će što god je prethodno bilo u boot sektoru. Ako se tamo " +"nalazi ranija verzija GRUB 2, možda će doći do problema s učitavanjem modula " +"ili čitanjem trenutne datoteke postavki." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Ako već imate neki drugi boot učitavač i želite ga zadržati, ili ako je ovo " +"neko posebno okruženje gdje ne trebate boot učitavač, trebate nastaviti. " +"Inače biste morali negdje instalirati GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Želite li ukloniti GRUB 2 iz /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Želite li ukloniti sve GRUB 2 datoteke iz /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Ovo će onemogućiti učitavanje sustava ako nije instaliran drugi boot " +"učitavač." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Završiti prebacivanje na GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Ovaj sustav još uvijek ima instalirane datoteke GRUB Legacy boot učitavača, " +"ali sada ima i GRUB 2 boot zapise instalirane na ovim diskovima:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Vjerojatno je GRUB Legacy izbačen iz uporabe i trebali biste nadograditi na " +"GRUB 2 snimke na ovim diskovima te završiti prebacivanje brisanjem starih " +"GRUB Legacy datoteka. Ako niste nadogradili ove GRUB 2 snimke, onda bi one " +"mogle biti nekompatibilne s novim verzijama paketa, što bi moglo uzrokovati " +"nemogućnost ispravnog pokretanja sustava." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Općenito, trebali biste dovršiti nadogradnju na GRUB 2, osim ako su navedeni " +"boot zapisi napravljeni instalacijom GRUB 2 na nekom drugom operacijskom " +"sustavu." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux naredbeni redak:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Ovaj naredbeni redak za sam Linux kernel je izvađen iz /etc/default/grub ili " +"iz parametra 'kopt' u GRUB Legacy datoteci menu.lst. Molim provjerite je li " +"ispravan, i ako je potrebno uredite ga. Naredbeni redak smije biti prazan." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Pretpostavljeni Linux naredbeni redak:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Sljedeći izraz će biti korišten kao parametar za Linux stavke u izborniku, " +"osim za spasonosni način rada." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD naredbeni redak:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Ovaj naredbeni redak za kFreeBSD kernel je izvađen iz /etc/default/grub ili " +"iz parametra 'kopt' u GRUB Legacy datoteci menu.lst. Molim provjerite je li " +"ispravan, i ako je potrebno uredite ga. Naredbeni redak smije biti prazan." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Pretpostavljeni kFreeBSD naredbeni redak:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Sljedeći izraz će biti korišten kao parametar za kFreeBSD stavke u " +"izborniku, osim za spasonosni način rada." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map je regeneriran" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Datoteka /boot/grub/device.map je prepisana kako bi se u njoj koristila " +"stabilna imena uređaja. U većini slučajeva, to bi trebalo značajno smanjiti " +"potrebu za njenim budućim mijenjanjem, a boot stavke koje generira GRUB ne " +"bi trebale biti pod utjecajem ove promjene." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Ipak, budući da imate više od jednog diska u vašem sustavu, moguće je da ste " +"ovisili o staroj mapi uređaja. Molim provjerite imate li nekih prilagođenih " +"boot zapisa koji ovise o GRUB-ovom (hdN) označavanju uređaja, i ažurirajte " +"ih ako je potrebno." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Ako ne razumijete ovu poruku, ili ako nemate prilagođenih boot zapisa, ovu " +"poruku možete zanemariti." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "U oba slučaja ako želite da se GRUB 2 učitava izravno iz MBR-a, možete to " +#~ "napraviti ako (kao root korisnik) pokrenete sljedeću naredbu:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Instalacija GRUB-a nije uspjela. Nastaviti?" --- grub2-1.99.orig/debian/po/de.po +++ grub2-1.99/debian/po/de.po @@ -0,0 +1,420 @@ +# Translation of GRUB 2 debconf templates to German +# Copyright (C) Helge Kreutzmann , 2007-2009. +# Martin Eberhard Schauer , 2010, 2011. +# This file is distributed under the same license as the grub2 package. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.98+20100710-2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-07-13 00:10+0100\n" +"Last-Translator: Martin Eberhard Schauer \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Aus »menu.lst« laden (Chainload)?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Die Upgrade-Skripte von GRUB haben eine Installation von »GRUB Legacy« in /" +"boot/grub gefunden." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Um die Legacy-Version von GRUB auf Ihrem System zu ersetzen, wird die " +"Anpassung von /boot/grub/menu.lst empfohlen, so dass GRUB 2 aus Ihrer " +"bestehenden GRUB-Legacy-Konfiguration heraus geladen wird. Dieser Schritt " +"kann jetzt automatisch vollzogen werden." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Es wird empfohlen, dass Sie dem Laden von GRUB 2 aus menu.lst zustimmen und " +"überprüfen, dass Ihre neue »GRUB 2«-Installation funktioniert, bevor diese " +"in den MBR (Master Boot Record) geschrieben wird." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Unabhängig von Ihrer Entscheidung können Sie den alten MBR später durch GRUB " +"2 ersetzen. Geben Sie dazu als »root« den folgenden Befehl ein:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Geräte für die GRUB-Installation:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Für das Paket grub-pc wird gerade ein Upgrade durchgeführt. In diesem Menü " +"können Sie auswählen, ob und für welche Geräte grub-install automatisch " +"ausgeführt werden soll." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Für die Mehrzahl der Fälle wird empfohlen, grub-install automatisch laufen " +"zu lassen. So wird vermieden, dass das installierte GRUB-Image nicht zu den " +"GRUB-Modulen oder grub.cfg passt." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Wenn Sie nicht sicher sind, welches Gerät das BIOS zum Booten benutzt, ist " +"es oft eine gute Idee, GRUB auf allen Geräten zu installieren." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Hinweis: Sie können GRUB auch in die Boot-Blöcke von Partionen schreiben." +"Hier werden auch einige geeignete Partitionen angeboten. Das zwingt GRUB " +"allerdings dazu, den Blocklist-Mechanismus zu verwenden. Dieser ist weniger " +"zuverlässig und wird daher nicht empfohlen." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Der GRUB-Bootloader wurde zuvor auf einem Datenträger, der nicht mehr im " +"System vorhanden ist oder dessen eindeutige Kennung aus irgendeinem Grund " +"geändert wurde, installiert. Es ist wichtig, sicherzustellen, dass das " +"installierte GRUB-Core-Image synchron mit den GRUB-Modulen und grub.cfg " +"bleibt. Bitte prüfen Sie erneut, um sicherzustellen, dass GRUB auf die " +"entsprechenden Boot-Geräte geschrieben wird." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "GRUB konnte nicht auf das Boot-Gerät geschrieben werden - fortfahren?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB konnte nicht auf den folgenden Geräten installiert werden:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Wollen Sie trotzdem fortfahren? Falls ja, wird Ihr Rechner vielleicht nicht " +"problemlos hochfahren." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Das Schreiben von GRUB auf das Boot-Gerät ist fehlgeschlagen. Noch einmal " +"versuchen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Vielleicht können Sie GRUB auf einem anderen Gerät installieren. Sie sollten " +"aber prüfen, ob Ihr System von diesem Gerät startet. Sonst wird das Upgrade " +"von GRUB Legacy abgebrochen." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Fortsetzen, ohne Grub zu installieren?" + +# (mes) Seht Ihr einen Unterschied zwischen der alten und der neuen Version? +# Ich habe jetzt nur das fuzzy rausgenommen. +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Sie haben sich entschieden, GRUB auf kein Gerät zu installieren. Wenn Sie " +"fortfahren, könnte der Boot-Loader nicht richtig konfiguriert sein. Beim " +"nächsten Hochfahren dieses Computers wird der Boot-Loader benutzen, was " +"immer sich vorher im Boot-Sektor befand. Wenn sich schon eine ältere Version " +"von GRUB 2 im Boot-Sektor befindet, kann sie möglicherweise keine Module " +"laden oder nicht mehr mit der aktuellen Konfigurationsdatei umgehen." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Falls Sie bereits einen anderen Boot-Loader einsetzen und diesen beibehalten " +"wollen oder Ihre spezielle Umgebung keinen Boot-Loader erfordert, dann " +"sollten Sie trotzdem fortfahren. Anderenfalls sollten Sie GRUB irgendwo " +"installieren." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "GRUB 2 aus /boot/grub entfernen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Wollen Sie alle Daten von GRUB 2 aus /boot/grub entfernen lassen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Wenn kein anderer Boot-Loader installiert ist, kann Ihr System anschließend " +"nicht mehr booten (hochfahren)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Jetzt die Umstellung auf GRUB 2 abschließen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Auf diesem System sind noch Dateien des GRUB-Legacy-Boot-Loaders " +"installiert, aber es sind nun auch GRUB-2-Boot-Sektoren auf den folgenden " +"Datenträgern installiert:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Es sieht so aus, als ob Sie GRUB Legacy nicht mehr verwenden. Daher sollten " +"Sie stattdessen ein Upgrade der GRUB-2-Images auf diesen Datenträgern " +"durchführen und die Umstellung auf GRUB 2 abschließen, indem Sie die alten " +"GRUB-Legacy-Dateien entfernen. Falls Sie das Upgrade für diese GRUB-2-Images " +"nicht durchführen, könnten diese mit den neuen Paketen nicht kompatibel sein " +"und dazu führen, dass Ihr System nicht mehr einwandfrei startet." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Grundsätzlich sollten Sie die Umstellung auf GRUB 2 abschließen, es sei " +"denn, diese GRUB-2-Boot-Sektoren wurden von einem anderen Betriebssystem " +"installiert." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux-Befehlszeile:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Die folgende Linux-Befehlszeile wurde aus /etc/default/grub oder dem " +"Parameter »kopt« in der Datei menu.lst von GRUB Legacy extrahiert. Bitte " +"überprüfen Sie, ob die Befehlszeile korrekt ist und ändern Sie diese, wenn " +"es notwendig ist. Diese Befehlszeile darf leer sein." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Standard-Befehlszeile für Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Die folgende Zeichenkette wird als Linux-Parameter für den " +"Standardmenüeintrag, nicht aber für den Rettungsmodus verwandt." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Befehlszeile für kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Die folgende kFreeBSD-Befehlszeile wurde aus /etc/default/grub oder dem " +"Parameter »kopt« in der Datei menu.lst von GRUB Legacy extrahiert. Bitte " +"überprüfen Sie, ob diese korrekt ist und passen Sie sie an, wenn das " +"erforderlich ist. Diese Befehlszeile darf leer sein." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Standard-Befehlszeile für kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Die folgende Zeichenkette wird als kFreeBSD-Parameter für den " +"Standardmenüeintrag, nicht aber für den Rettungsmodus verwandt." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map wurde neu erstellt." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Die Datei /boot/grub/device.map wurde umgeschrieben, um stabile Gerätenamen " +"zu verwenden. In der Mehrzahl der Fälle sollte dies die Notwendigkeit " +"zukünftiger Änderungen deutlich verringern. Von GRUB erstellte Boot-Menü-" +"Einträge sollten nicht betroffen sein." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Da sich in diesem System mehrere Festplatten befinden, ist es möglich, dass " +"das System von der alten »device map« abhängig ist. Bitte überprüfen Sie, " +"obbenutzerdefinierte Boot-Menü-Einträge mit der (hdn)-Laufwerkszählung von " +"GRUB vorhanden sind und aktualisieren Sie diese gegebenenfalls." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Wenn Sie diese Nachricht nicht verstehen oder wenn keine modifizierten Boot-" +"Menü-Einträge vorhanden sind, können Sie diese Nachricht ignorieren." --- grub2-1.99.orig/debian/po/ca.po +++ grub2-1.99/debian/po/ca.po @@ -0,0 +1,425 @@ +# Catalan translation of grub2's debconf messages +# Copyright © 2009, 2010, 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the grub2 package. +# +# Jordi Mallach , 2009, 2010, 2011. +# Juan Andrés Gimeno Crespo , 2009. +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-30 22:57+0200\n" +"Last-Translator: Jordi Mallach \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Voleu carregar en cadena des del menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Els scripts d'actualització del GRUB han detectat una configuració del GRUB " +"Legacy en /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"A l'hora de reemplaçar la versió Legacy del GRUB que hi ha al sistema, és " +"recomanable que es modifique /boot/grub/menu.lst per a carregar una imatge " +"d'arrencada del GRUB 2 des de la vostra configuració del GRUB Legacy " +"existent. Aquest pas es pot dur a terme ara." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"És recomanable que accepteu la càrrega en cadena del GRUB 2 des del menu." +"lst, per a verificar que la nova configuració del GRUB 2 funciona " +"correctament, abans de que s'escriga al registre mestre d'arrencada (MBR)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Independentment de la vostra decisió, podeu reemplaçar la imatge antiga de " +"l'MBR amb el GRUB2 executant l'ordre següent com a root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Dispositius d'instaŀlació del GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"S'està actualitzant el paquet grub-pc. Aquest menú us permet seleccionar " +"sobre quins dispositius voleu que s'execute el grub-install automàticament, " +"en cas de voler-ho." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"L'execució automàtica del grub-install és recomanable en la majoria de les " +"situacions, per a evitar que la imatge del nucli del GRUB es desincronitze " +"amb els mòduls del GRUB o el grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Si no esteu segur sobre quina és la unitat designada com a unitat " +"d'arrencada per la BIOS, normalment és una bona idea instaŀlar el GRUB a " +"tots ells." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: també és possible instaŀlar el GRUB a registres d'arrencada de " +"particions, i s'ofereixen algunes particions addients. Tanmateix, això força " +"al GRUB a usar el mecanisme de llistes de blocs, que fa que siga menys " +"fiable, per la qual cosa no és recomanable." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"El carregador GRUB estava instaŀlat a un disc que ja no és present, o per al " +"qual ha canviat el seu identificador únic per alguna raó. És important " +"assegurar-se que la imatge del nucli del GRUB roman sincronitzada amb els " +"mòduls del GRUB i el grub.cfg. Comproveu de nou que el GRUB s'escriu als " +"dispositius d'arrencada apropiats." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Ha fallat l'escriptura del GRUB al dispositiu. Voleu continuar?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "El GRUB no s'ha pogut instaŀlar als dispositius següents:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Voleu continuar tot i això? Si ho feu, és possible que l'ordinador no " +"arrenque correctament." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Ha fallat l'escriptura del GRUB al dispositiu. Voleu tornar a provar-ho?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"És possible que pugueu instaŀlar el GRUB en un altre dispositiu, tot i que " +"hauríeu de comprovar que el sistema arrencarà des d'aquell dispositiu. En " +"cas contrari, es canceŀlarà l'actualització des del GRUB Legacy." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Voleu continuar sense instaŀlar el GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Heu triat no instaŀlar el GRUB en cap dispositiu. Si continueu, és possible " +"que el carregador no estiga configurat correctament, i quan s'arrenque " +"l'ordinador la pròxima vegada, emprarà allò que estigués al sector " +"d'arrencada. Si hi ha una versió anterior del GRUB2 al sector d'arrencada, " +"és possible que no puga carregar mòduls o gestionar el fitxer de " +"configuració actual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Si ja esteu emprant un altre carregador i voleu continuar fent-ho, o aquest " +"és un entorn especial on no necessiteu un carregador, hauríeu de continuar. " +"Si no és així, hauríeu d'instaŀlar el GRUB en algun lloc." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Voleu suprimir el GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Voleu suprimir tots els fitxers del GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Això farà que el sistema no arrenque si no s'instaŀla un altre carregador." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Voleu finalitzar la conversió al GRUB 2 ara?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Aquest sistema encara té fitxers antics del carregador GRUB Legacy " +"instaŀlats, però ara també té registres d'arrencada del GRUB 2 instaŀlats " +"als discs següents:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Sembla probable que el GRUB Legacy no estiga ja en ús, i que hauríeu " +"d'actualitzar les imatges del GRUB 2 presents a aquests discs per a " +"finalitzar la conversió al GRUB 2, suprimint els fitxers vells del GRUB " +"Legacy. Si no actualitzeu aquestes imatges del GRUB 2, és possible que " +"romanen incompatibles amb els paquets nous i que causen que el sistema deixe " +"d'arrencar correctament." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"En general, hauríeu de finalitzar la conversió al GRUB 2 a no ser que " +"aquests registres d'arrencada els haja creat una instaŀlació del GRUB 2 des " +"d'un altre sistema operatiu." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Línia d'ordres de Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La línia d'ordres de Linux següent ha sigut extreta de /etc/default/grub o " +"del paràmetre «kopt» del fitxer menu.lst del GRUB Legacy. Verifiqueu que és " +"correcta, i modifiqueu-la si és necessari. La línia d'ordres pot ser buida." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Línia d'ordres de Linux per defecte:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"La cadena següent serà emprada com a paràmetres del Linux per al menú " +"d'entrada per defecte però no per al mode de recuperació." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Línia d'ordres de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La línia d'ordres de kFreeBSD següent ha sigut extreta de /etc/default/grub " +"o del paràmetre «kopt» del fitxer menu.lst del GRUB Legacy. Verifiqueu que " +"és correcta, i modifiqueu-la si és necessari. La línia d'ordres pot ser " +"buida." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Línia d'ordres de kFreeBSD per defecte:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"La cadena següent serà emprada com a paràmetres del kFreeBSD per al menú " +"d'entrada per defecte però no per al mode de recuperació." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "S'ha regenerat el fitxer «/boot/grub/device.map»" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"S'ha reescrit el fitxer «/boot/grub/device.map» per a usar noms estables de " +"dispositiu. En la majoria dels casos, això hauria de reduir la necessitat de " +"canviar-ho en el futur, i no hauria d'afectar les entrades del menú " +"d'arrencada generades pel GRUB." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Tanmateix, com hi ha més d'un disc al sistema, és possible que el sistema " +"depenga del mapa de dispositius antic. Comproveu si hi ha entrades del menú " +"d'arrencada personalitzades que requerisquen la numeració d'unitats del GRUB " +"(hdN), i actualitzeu-les si és necessari." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Si no enteneu aquest missatge, o si no hi ha cap entrada del menú " +"d'arrencada personalitzada, podeu descartar aquest missatge." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "En qualsevol cas, quan vulgueu que es carregue el GRUB 2 directament des " +#~ "de l'MBR, podeu fer-ho executant (com a root) l'ordre següent:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Ha fallat la instaŀlació del GRUB. Voleu continuar?" --- grub2-1.99.orig/debian/po/bg.po +++ grub2-1.99/debian/po/bg.po @@ -0,0 +1,422 @@ +# Bulgarian translation of grub2 debconf messages. +# Copyright (C) grub2 packagers. +# This file is distributed under the same license as the grub2 package. +# Damyan Ivanov , 2009, 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-12-27 15:01+0200\n" +"Last-Translator: Damyan Ivanov \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Верижно зареждане от menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "Открита е стара инсталация на GRUB в /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"За замяна на старата инсталация на GRUB се препоръчва настройване на /boot/" +"grub/menu.lst за каскадно зареждане на GRUB2 от съществуващата инсталация на " +"GRUB. Това може да извършено автоматично." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Каскадното зареждане на GRUB2 от menu.lst се препоръчва за да е сигурно, че " +"настройките на GRUB2 са правилни, преди инсталирането му в записа за начално " +"зареждане (MBR)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Каквото и да решите, по-късно можете да замените стария запис в MBR с този " +"на GRUB2 със следната команда, изпълнена като администратор:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Инсталиране на GRUB на следните устройства:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Пакетът grub-pc се обновява. Това меню позволява избиране за кои устройства " +"(и дали изобщо) да се изпълни командата grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"В повечето случаи автоматичното изпълнение на grub-install се препоръчва за " +"предотвратяване на разминаване между образа на GRUB на диска и модулите или " +"файла grub.cfg във файловата система." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Ако не сте сигурни кое устройство е определено за начално зареждане в BIOS, " +"добра идея е да инсталирате GRUB на всички налични устройства." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Забележка: по принцип е възможно GRUB да се инсталира на записите за начално " +"зареждане на дисковите дялове. Списъка включва подходящи дялове, но подобна " +"инсталация ще накара GRUB да използва списъци с блокове, което прави " +"работата му по-малко надеждна и поради тази причина не се препоръчва." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Програмата за начално зареждане на GRUB е била инсталирана на диск, който " +"вече не е достъпен или чийто уникален идентификатор е бил променен. Много е " +"важно инсталираният образ винаги да е отговаря на модулите на GRUB и файла " +"grub.cfg на файловата система. Проверете и се убедете, че GRUB се инсталира " +"на правилните устройства." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" +"Записването на GRUB върху устройството за начално зареждане не успя. " +"Продължаване?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Опитът за инсталиране на GRUB на следните устройства беше неуспешен:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Желаете ли да продължите въпреки това? Ако го направите е възможно " +"компютърът да не може да зареди операционна система." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Записването на GRUB върху устройството за начално зареждане на успя. Нов " +"опит?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Възможно е инсталирането на GRUB на друго устройство да успее, но трябва да " +"проверите дали компютърът може да извършва първоначално зареждане от него. " +"Ако откажете, обновяването от стария GRUB ще бъде отменено." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Продължаване без инсталиране на GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Избрано е GRUB да не се инсталира на никакви устройства. Ако продължите, " +"програмата за начално зареждане може да не е настроена правилно и при " +"следващото стартиране на компютъра ще се използва предишното съдържание на " +"сектора за начално зареждане. Ако в него има предишна инсталация на GRUB 2 е " +"възможно тя да не успее да използва обновените модули или конфигурационния " +"файл." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Ако използвате друга програма за начално зареждане и желаете да я запазите " +"или ако обкръжението е специално и не изисква програма за начално зареждане, " +"тогава е редно да продължите без да инсталирате GRUB. В противен случай би " +"трябвало да инсталирате GRUB някъде." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Изтриване на GRUB 2 от /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Желаете ли да изтриете всички файлове на GRUB от папката /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Това ще възпрепятства зареждането на системата, до инсталиране на друга " +"програма за начално зареждане." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Завършване на преминаването към GRUB2 ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"На системата има файлове от стария GRUB, но има сектори за начално зареждане " +"от GRUB 2, инсталирани на следните дискове:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Изглежда, че старият GRUB не се използва и вместо него е редно се инсталира " +"GRUB 2 върху дисковете и да се завърши прехода чрез премахване на файловете " +"на стария GRUB. Ако не обновите инсталацията на GRUB 2 е възможно да се " +"появят проблеми с началното зареждане поради несъвместимост с новите пакети." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"В общия случай е добре преходът към GRUB 2 да бъде завършен, освен ако " +"секторите за начално зареждане са създадени от GRUB 2 или от друга " +"операционна система." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Команден ред на Линукс:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Следния команден ред за зареждане на Линукс беше извлечен от /etc/default/" +"grub или от параметъра „kopt“ от файла menu.lst на стария GRUB. Проверете го " +"и ако е нужно го коригирайте. Допустимо е командният ред да бъде празен." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Параметри на Линукс по подразбиране:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Следните параметри ще бъдат използвани по подразбиране при зареждане на " +"Линукс, освен в авариен режим." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Команден ред за kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Следния команден ред за зареждане на kFreeBSD беше извлечен от /etc/default/" +"grub или от параметъра „kopt“ от файла menu.lst на стария GRUB. Проверете го " +"и ако е нужно го коригирайте. Допустимо е командният ред да бъде празен." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Параметри на Линукс по подразбиране:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Следните параметри ще бъдат използвани по подразбиране при зареждане на " +"kFreeBSD, освен в авариен режим." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map е създаден наново" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Файлът /boot/grub/device.map е създаден наново, използвайки постоянни имена " +"на устройства. В повечето случаи това води до намаляване на нуждата да се " +"правят промени в бъдеще. Елементите в менюто за начално зареждане на GRUB не " +"са засегнати." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Все пак, понеже в системата има повече от един диск, е възможно съдържанието " +"на стария файл да е от критична важност. Проверете дали имате елементи в " +"менюто за начално зареждане на GRUB, в които да се използват устройства от " +"вида „(hdN)“ и ако е нужно ги коригирайте." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Ако не разбирате предупреждението или ако нямате ръчно-въведени елементи в " +"менюто на GRUB, не обръщайте внимание на това съобщение." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Когато речите да инсталирате GRUB 2 в записа за начално зареждане, " +#~ "изпълнете следната команда като администратор:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Инсталирането на GRUB се провали. Продължаване?" --- grub2-1.99.orig/debian/po/zh_CN.po +++ grub2-1.99/debian/po/zh_CN.po @@ -0,0 +1,388 @@ +# Chinese translations for grub2 po-debconf +# PACKAGE 软件包的简体中文翻译. +# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# YunQiang Su , 2010, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2-po-debconf master\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 17:29+0800\n" +"Last-Translator: YunQiang Su \n" +"Language-Team: Chinese (simplified) \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bits\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "从 menu.lst 进行 chainload?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "GRUB 升级脚本在 /boot/grub 探测到了已安装的 GRUB Legacy。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"为了取代您系统上的 GRUB Legacy,推荐调整 /boot/grub/menu.lst 为从现有的 GRUB " +"Legacy 设置中加载 GRUB 2 引导镜像。现在可以自动执行这个操作。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"推荐您接受从 menu.lst 中 chainload GRUB 2,并且在将 GRUB 2 直接安装到 MBR (主" +"引导记录,Master Boot Record) 之前确定新的 GRUB 2 设置可以工作。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"无论现在做什么样的决定,您以后都可以使用 root 身份来运行如下命令来使用 GRUB " +"2 来代替旧的 MBR 映像:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB 安装设备:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc 包已经升级。此菜单允许您选择在哪个设备上自动运行 grub-install,如果有" +"的话。" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"在大多数情况下推荐自动运行 grub-install,以避免安装的 GRUB 核心映像与 GRUB 模" +"块或 grub.cfg 不同步。" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"如果不确定 BIOS 使用哪个驱动器作为主引导,将 GRUB 安装到所有这些驱动器是一个" +"不错的主意。" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"注意:也可以将 GRUB 安装到分区的引导记录,这里提供了一些适当的分区。然而,这" +"强制 GRUB 使用黑名单机制,会造成可靠性降低,因此不推荐使用。" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB 引导器先前安装到了一个消失了的磁盘上,或者它的唯一标识符由于某些原因变化" +"了。确保安装的 GRUB 核心映像和 GRUB 模块及 grub.cfg 的同步非常重要。请再次检" +"查以确保 GRUB 安装到了适当的引导设备。" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "将 GRUB 写入引导设备失败 - 要继续吗?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB 安装到如下设备时失败。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "仍然想要继续?如果这样,您的计算机可能不能正常启动。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "将 GRUB 写入引导设备失败 - 要重新尝试吗?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"您可能可以安装 GRUB 到其它设备,尽管您需要明确,您的系统将从那个设备启动。否" +"则,从 GRUB Legacy 的升级将被取消。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "不安装 GRUB 并且继续?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"您没有选择向任何设备安装 GRUB。如果继续,引导器可能不能正确配置,当您的计算机" +"下次启动时,它将使用引导扇区中先前的内容。如果引导扇区中有早期版本的 GRUB 2," +"其可能不能加载模块或者处理当前配置文件。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"如果您已经使用了另外一个引导器并且想继续这样做,或者如果这是一个特殊的不需要" +"引导器的环境,这样您可以仍然继续。否则,您应该在某处安装 GRUB。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "从 /boot/grub 移除 GRUB 2 ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "确定想从 /boot/grub 移除全部 GRUB 2 文件吗?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "这会使系统不能引导,除非另外安装其它引导器。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "现在完成到 GRUB 2 的转换?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"此系统仍然有 GRUB Legacy 引导器安装的文件,但是现在也在磁盘上安装了 GRUB 2 引" +"导记录:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"好像 GRUB Legacy 已经不再使用了,并且您应该在这些磁盘上转而升级到 GRUB 2 映" +"像,并且通过删除旧的 GRUB Legacy 文件来完成到 GRUB 2 的转换。如果不升级这些 " +"GRUB 2 映像,他们将可能不能与新包兼容而造成您的系统不能正常引导。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"您通常应该完成到 GRUB 2 的转换,除非这些引导记录是由安装到其它操作系统上的 " +"GRUB 2 创建的。" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux 命令行:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"已从 /etc/default/grub 或 GRUB Legacy 的 menu.lst 中的 `kopt' 参数中提取如下 " +"Linux 命令行。请检查是否正确的,并且根据需要进行修改。此命令行可以为空。" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux 默认命令行:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "如下字符串将被用于默认菜单项的 Linux 参数,但是不会用于恢复模式。" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD 参数:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"已从 /etc/default/grub 或者 GRUB Legacy 的 menu.lst 中的 `kopt' 参数中提取如" +"下 kFreeBSD 命令行参数。请请检查是否正确,并且根据需要进行修改。此命令行可以" +"为空。" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD 默认命令行:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "如下字符串将用于默认菜单项的 kFreeBSD 参数,但不会用于恢复模式。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map 已经生成" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"文件 /boot/grub/device.map 已经重写以使用稳定的设备名。多数情况下,这应该显著" +"地减少以后修改它的需要,并且 GRUB 产生的引导菜单项不会受影响。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"然而,因为您的系统上有多个磁盘,系统可能依赖旧的设备映射。请检查您是否有任何" +"自定义的依赖 GRUB 的 (hdN) 驱动器号的引导菜单项,如果需要请更新它们。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "如果您不理解此消息,或者没有任何自定义的引导菜单项,您可以忽略此消息。" + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "无论何种情况,当您想直接从 MBR 加载 GRUB 2 时,您可以通过以 root 身份执行" +#~ "如下命令来实现:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUB 安装失败。仍然继续?" --- grub2-1.99.orig/debian/po/ast.po +++ grub2-1.99/debian/po/ast.po @@ -0,0 +1,418 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-27 11:10+0100\n" +"Last-Translator: Mikel González \n" +"Language-Team: Asturian \n" +"Language: ast\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "¿Cadena de carga dende menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"El scripts d'actualización GRUB detectó una configuración GRUB Legacy en /" +"boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Cola fin de trocar la versión Legacy de GRUB nel to sistema, ye recomendable " +"que /boot/grub/menu.lst seya axustáu a la cadena de carga GRUB 2 dende la to " +"configuración Legacy GRUB existente. Esti pasu puede ser fechu " +"automáticamente agora." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Ye recomendable que aceptes la cadena de carga GRUB 2 dende'l menu.lst, y " +"compruebes que la to nueva configuración de GRUB 2 ye funcional pa ti, " +"anantes de que lo instales directamente nel to MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Independientemente de la to decisión, puedes trocar la imaxe vieya MBR con " +"GRUB 2 más tarde executando como root el comandu que vien darréu:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB falló al instalar nos siguientes preseos:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Anovóse'l paquete grup-pc. Esti menú val pa esbillar en que preseos quie " +"que'l grub-install s'execute automáticamente, si hai dalgún." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Executar grub-install automaticamente ye recomendable na mayoría de les " +"situaciones, pa evitar que la imaxe del motor de GRUB quede ensin " +"sincronizase colos módulos de GRUB o grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Si nun tas seguru/a de que discu t'asignau como discu d'arranque pola BIOS, " +"ye una bona idea instalar GRUB en tolos discos." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: puedes instalar GRUB nos rexistros d'arranque de les particiones " +"tamién, y úfrense dalgunes particiones apropiaes. Sicasí, esto fuercia a " +"GRUB a usar un mecanismu de llista de torgues, que lo fai menos fiable poro " +"nun ye recomendable." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"El xestor d'arranque GRUB instalóse nun discu que nun ta presente, o que " +"cambió d'identificador únicu por dalguna razón. Ye importante asegurase de " +"que la imaxe del motor de GRUB sigui sincronizada colos módulos de GRUB y " +"grub.cfg. Por favor prueba otra vuelta p'asegurate de que GRUB ta escritu " +"nel preséu d'arranque correutu." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Fallu al escribir GRUB al preséu d'arranque - ¿siguir?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Falló GRUB al instalar nos siguientes preseos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"¿Quies siguir igualmente? Si quies, el to ordenador podría nun arrancar bien." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "La instalación de GRUB falló. ¿Intentalo otra vegada?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Puedes instalar GRUB a otru preséu, aunque deberíes comprobar que'l to " +"sistema arrancará dende esi preséu. De lo contrario, l'anovamientu de GRUB " +"encaboxarase." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "¿Siguir ensin instalar GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Escoyistes nun instalar GRUB en dengún preséu. De siguir, el xestor " +"d'arranque podría nun tar configuráu dafechu, y nel siguiente aniciu del " +"ordenador usarás lo que teníes previamente nel sector d'arranque. Si hai un " +"versión anterior de GRUB 2 nel sector d'arranque, podría ser capaz de cargar " +"módulos o remanar el ficheru de configuración actual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Si ya tas executando un xestor d'arranque distintu y quies siguir " +"faciéndolo, o si ye un ambiente especial onde nun necesites un xestor " +"d'arranque, entós puedes siguir. D'otra miente, deberíes instalar GRUB en " +"dalgún sitiu." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "¿Desaniciar GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "¿Quiés desaniciar tolos ficheros de GRUB 2 de /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Esto fadrá qué nun puedas aniciar el sistema a nun ser qu'instales otru " +"xestor d'arranque." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "¿Finar agora conversión a GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Esti sistema tovía tien ficheros del xestor d'arranque GRUB instaláu, pero " +"agora tamién registros d'arranque GRUB 2 instaláu n'estos discos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Parez probable que GRUB ya nun ta n'usu, y que deberíes anovar les imáxenes " +"de GRUB 2 d'estos discos y finar la conversión a GRUB 2, desaniciando vieyos " +"ficheros heredaos de GRUB. Si nun anoves estes imáxenes de GRUB, entós " +"pueden ser incompatibles colos nuevos paquetes y facer que'l to sistema nun " +"arranque correutamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"En xeneral, deberíes finar la conversión a GRUB 2 a menos qu'estos rexistros " +"d'arranque fueren creaos por una instalación de GRUB 2 en dalgún otru " +"sistema operativu." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linia comandos Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La siguiente llinia de comandu Linux salió de /etc/default/grub o del " +"parámetru `kopt' nel menú Legacy GRUB menu.lst. Por favor, comprueba que ye " +"correuto, y modificalo si ye necesario. La llinia de comandu puede tar erma." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linia comandos por defeutu de Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"La siguiente cadena será usada como parámetros Linux pa la entrada del menú " +"por defeutu, pero non pal mou recuperación." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Linia comandos kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La siguiente llinia de comandu kFreeBSD salió de /etc/default/grub o del " +"parámetru `kopt' nel menú Legacy GRUB menu.lst. Por favor, comprueba que ye " +"correuto, y modificalo si ye necesario. La lliniea de comandu puede tar erma." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Llínia comandos por defeutu kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"La siguiente cadena será usada cómo parametros kFreeBSD pa la entrada del " +"menú por defeutu, pero non pal mou recuperación." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map foi xeneráu" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"El ficheru /boot/grub/device.map foi sobroescritu pa usar nomes estables pal " +"preséu. Na mayoría de los casos, esto va a amenorgar considerablemente la " +"necesidá de camudar nel futuru, y les entraes del menú d'arranque GRUB " +"xeneraos nun deberíen vese afectaes." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Sicasí, ya tienes más d'un discu nel to sistema, ye posible que dependieres " +"del mapa antigüu del preséu. Por favor, comprueba si tienes o non entraes " +"d'arranque del menú personalizaes que se basen na númberación de la unidá " +"GRUB's (hdN), y anovalos si ye necesario." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Si nun entiendes esti mensaxe, o si nun tienes nenguna entrada personalizada " +"nel menú d'arranque, puedes ignorar esti mensaxe." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "En cualisquier casu, cuando quieras que GRUB 2 seya cargáu directamente " +#~ "dende'l MBR, puedes facelo col siguiente comandu (como root):" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "La instalación de GRUB falló. ¿Siguir?" --- grub2-1.99.orig/debian/po/is.po +++ grub2-1.99/debian/po/is.po @@ -0,0 +1,409 @@ +# translation of grub_debian_po_is.po to Icelandic +# Copyright (C) 2010 Free Software Foundation +# This file is distributed under the same license as the GRUB package. +# +# Sveinn í Felli , 2010, 2011, 2012. +msgid "" +msgstr "" +"Project-Id-Version: grub_debian_po_is\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-20 09:44+0000\n" +"Last-Translator: Sveinn í Felli \n" +"Language-Team: Icelandic \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +">\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Raðhlaða (chainload) úr menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Uppfærsluskriftur GRUB hafa fundið eldri uppsetningu GRUB í /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Til að skipta eldri uppsetningu GRUB út af kerfinu, þá er mælt með því að /" +"boot/grub/menu.lst sé stillt til að raðhlaða (chainload) GRUB 2 ræsidiskmynd " +"frá þessari eldri uppsetningu á GRUB. Hægt er að framkvæma þetta skref " +"sjálfvirkt núna." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Mælt með því að þú samþykkir að raðhlaða GRUB 2 úr menu.lst, auk þess að þú " +"skoðir hvort nýja GRUB 2 uppsetningin virki fyrir þig, áður en þetta er " +"skrifað á MBR ræsigeirann (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Hvað svosem þú ákveður, þá getur þú síðar skipt gömlu MBR myndinni út fyrir " +"GRUB2 með því að gefa eftirfarandi skipun (sem kerfisstjóri/root):" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB uppsetningartæki:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Verið er að uppfæra grub-pc pakkann. Þessi valmynd gerir þér kleift að velja " +"af hvaða tækjum hægt er að keyra grub-install sjálfvirkt, ef þá nokkrum." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Mælt er með í flestum tilfellum að keyra grub-install sjálfvirkt, til þess " +"að koma í veg fyrir að uppsetta GRUB aðalmyndin hætti að vera samstillt við " +"GRUB-einingar eða grub.cfg stilliskrána." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Ef þú ert ekki viss um hvaða diskur er skilgreindur sem ræsidrif í BIOS, þá " +"er oft góð hugmynd að setja GRUB upp á alla diskana." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Athugasemd: Það er líka hægt að setja GRUB upp á ræsigeira disksneiða, hér " +"eru nokkrar viðeigandi disksneiðar í boði. Á móti kemur að þetta þvingar " +"GRUB til að nota blokklista (blocklist mechanism), sem gerir GRUB ekki eins " +"áreiðanlegt; því er ekki mælt með þessu." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB ræsistjórinn vað áður uppsettur á disk sem ekki er lengur til staðar " +"eða sem hefur af einhverjum ástæðum fengið nýtt auðkenni/tilvísun. Það er " +"mikilvægt að ganga úr skugga um að uppsetta GRUB aðalmyndin sé samstillt við " +"GRUB-einingar og grub.cfg stilliskrána.. Athugaðu aftur hvort GRUB sé " +"skrifað á viðeigandi ræsitæki." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Uppsetning GRUB á ræsitæki mistókst. Halda áfram?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Uppsetning GRUB mistókst á eftirfarandi tækjum:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Viltu samt halda áfram? Ef þú gerir það er ekki víst að tölvan þín ræsist " +"aftur eðlilega." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Uppsetning GRUB á ræsitæki mistókst. Reyna aftur?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Þú gætir hugsanlega sett GRUB upp á eitthvað annað tæki, samt ættirðu að " +"skoða vel hvort kerfið þitt sé fært um að ræsa upp af því tæki. Að öðrum " +"kosti verður hætt við uppfærslu gamla GRUB ræsistjórans." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Halda áfram án þess að setja upp GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Þú valdir að setja GRUB ekki upp á neitt tæki. Ef þú heldur áfram verður " +"ræsistjórinn ekki rétt stilltur, og þegar tölvan þín ræsist næst mun hún " +"nota hvað það sem fyrir er núna á ræsigeiranum. Ef á ræsigeiranum er til " +"dæmis eldri útgáfa af GRUB 2, er möguleiki á að hún ráði ekki við að hlaða " +"inn ákveðnum kjarnaeiningum eða nái ekki að lesa stillingaskrána fyrir þetta " +"stýrikerfi." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Ef þú ert þegar að nota einhvern annan ræsistjóra og ætlar að halda því " +"áfram, eða ef þetta er eitthvað sérhannað kerfi sem ekki þarfnast " +"ræsistjóra; þá ættirðu að halda samt áfram. Ef ekki, ættirðu að setja GRUB " +"upp einhversstaðar." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Fjarlægja GRUB 2 úr /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Viltu láta fjarlægja allar GRUB 2 skrár úr /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Þetta mun gera kerfið óræsanlegt nema einhver annar ræsistjóri sé settur upp." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Ljúka núna umbreytingu í GRUB 2 ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Þetta kerfi er ennþá með uppsettar skrár frá eldri uppsetningu GRUB, en er " +"núna einnig með GRUB 2 ræsifærslur uppsettar á þessum diskum:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Það lítur út fyrir að eldra GRUB sé ekki lengur í notkun og að þú ættir þá " +"að uppfæra GRUB 2 myndirnar á þessum diskum og ljúka svo yfirfærslunni í " +"GRUB 2 með því að fjarlægja gömlu GRUB skrárnar. Ef þú uppfærir ekki þessar " +"GRUB 2 myndir gætu þær orðið ósamhæfðar við nýju pakkana og koma í veg fyrir " +"að kerfið ræsist eðlilega." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Almennt ættirðu að ljúka umbreytingu í GRUB 2 nema ef þessar ræsifærslur " +"hafi verið útbúnar af GRUB 2 uppsetningu í einhverju öðru stýrikerfi." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux skipanalína:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Eftirfarandi Linux skipanalína fannst í /etc/default/grub eða í `kopt' " +"viðfanginu í eldri GRUB menu.lst. Gakktu úr skugga um að þetta sé rétt og " +"breyttu því ef það er nauðsynlegt. Skipanalínan má vera auð." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Sjálfgefin Linux skipanalína:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Eftirfarandi strengur verður notaður sem Linux viðfang í sjálfgenu " +"valmyndarfærslunni en ekki í viðgerðarham." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD skipanalína:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Eftirfarandi kFreeBSD skipanalína fannst í /etc/default/grub eða í `kopt' " +"viðfanginu í eldri GRUB menu.lst. Gakktu úr skugga um að þetta sé rétt og " +"breyttu því ef það er nauðsynlegt. Skipanalínan má vera auð." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Sjálfgefin kFreeBSD skipanalína:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Eftirfarandi strengur verður notaður sem kFreeBSD viðfang í sjálfgenu " +"valmyndarfærslunni en ekki í viðgerðarham." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map var endurskrifað" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Skráin /boot/grub/device.map hefur verið endurskrifuð til að nota föst " +"tækjaheiti. Í flestum tilfellum þýðir þetta að færri ástæður geta komið upp " +"til að breyta þeim í framtíðinni og að færslur í GRUB ræsivalmyndinni ættu " +"síður að verða fyrir breytingum." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Aftur á móti, þar sem fleiri en einn diskur eru til staðar í kerfinu, þá er " +"alveg hugsanlegt að kerfið reiði sig á gömlu tækjaskrána (device map). " +"Athugaðu hvort það séu einhverjar sérsniðnar ræsifærslur sem nota eldri GRUB " +"(hdN) diskaskilgreiningar, og uppfærðu þær þá ef nauðsyn krefur." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Ef þú skilur ekki þessi skilaboð, eða ef þú hefur engar sérsniðnar " +"ræsifærslur, þá geturðu hunsað skilaboðin." --- grub2-1.99.orig/debian/po/th.po +++ grub2-1.99/debian/po/th.po @@ -0,0 +1,387 @@ +# Thai translation of grub. +# Copyright (C) 2010-2012 Software in the Public Interest, Inc. +# This file is distributed under the same license as the grub package. +# Theppitak Karoonboonyanan , 2010-2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-20 17:12+0700\n" +"Last-Translator: Theppitak Karoonboonyanan \n" +"Language-Team: Thai \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "จะโหลดแบบลูกโซ่จาก menu.lst หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "สคริปต์ปรับรุ่นของ GRUB ตรวจพบค่าตั้งของ GRUB รุ่นเก่าใน /boot/grub" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"ในการแทนที่ GRUB รุ่นเก่าในระบบ ขอแนะนำให้ปรับ /boot/grub/menu.lst " +"ให้โหลดอิมเมจสำหรับบูตของ GRUB 2 จาก GRUB รุ่นเก่าที่มีอยู่ " +"ขั้นตอนนี้สามารถทำแบบอัตโนมัติได้ในตอนนี้" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"ขอแนะนำให้คุณตอบรับการโหลด GRUB 2 แบบลูกโซ่จาก menu.lst และทดสอบว่าค่าตั้งของ GRUB 2 " +"ใช้การได้ ก่อนที่จะเขียนลง MBR (Master Boot Record) จริง" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"ไม่ว่าคุณจะเลือกแบบไหน คุณยังสามารถแทนที่อิมเมจเก่าใน MBR ด้วย GRUB 2 เองได้ในภายหลัง " +"โดยใช้คำสั่งต่อไปนี้ในฐานะ root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "อุปกรณ์ที่จะติดตั้ง GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"กำลังจะปรับรุ่นแพกเกจ grub-pc ขึ้น เมนูนี้จะช่วยคุณเลือกอุปกรณ์ที่คุณต้องการให้เรียก grub-" +"install โดยอัตโนมัติเพื่อติดตั้ง GRUB ถ้ามีอุปกรณ์ดังกล่าว" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"โดยทั่วไปแล้ว ขอแนะนำให้เรียก grub-install โดยอัตโนมัติ เพื่อป้องกันไม่ให้อิมเมจแกนกลางของ " +"GRUB ที่ติดตั้งมีข้อมูลไม่ตรงกับมอดูล GRUB ต่างๆ หรือไม่ตรงกับ grub.cfg" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"ถ้าคุณไม่แน่ใจว่า BIOS กำหนดไดรว์ไหนไว้สำหรับบูต ก็มักเป็นความคิดที่ดีที่จะติดตั้ง GRUB " +"ลงในไดรว์ทุกไดรว์" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"หมายเหตุ: เป็นไปได้เหมือนกันที่จะติดตั้ง GRUB ลงในบูตเรคอร์ดของพาร์ทิชัน " +"และได้แสดงพาร์ทิชันที่เหมาะสมเป็นตัวเลือกไว้ในที่นี้แล้ว อย่างไรก็ดี การทำเช่นนั้นจะเป็นการบังคับให้ " +"GRUB ใช้กลไกรายชื่อบล็อค ซึ่งความถูกต้องในการทำงานอาจลดลง จึงไม่ขอแนะนำ" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"มีการติดตั้งบูตโหลดเดอร์ GRUB ก่อนหน้านี้ในดิสก์ที่ขณะนี้ไม่มีแล้ว หรือมี " +"แต่หมายเลขประจำดิสก์ได้เปลี่ยนไปด้วยสาเหตุบางอย่าง " +"จึงจำเป็นต้องทำให้แน่ใจว่าอิมเมจแกนกลางของ GRUB ที่ติดตั้งไว้นั้นยังมีข้อมูลตรงกับมอดูล GRUB ต่างๆ " +"และกับ grub.cfg อยู่ กรุณาตรวจสอบอีกครั้งให้แน่ใจว่าจะเขียนข้อมูล GRUB ลงในอุปกรณ์บูตที่เหมาะสม" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "เขียน GRUB ลงในอุปกรณ์บูตไม่สำเร็จ - ดำเนินการต่อไปหรือไม่?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "ติดตั้ง GRUB ลงในอุปกรณ์ต่อไปนี้ไม่สำเร็จ:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "คุณยังคงต้องการดำเนินการต่อไปหรือไม่? ถ้าทำต่อ เครื่องของคุณอาจบูตไม่ขึ้นได้" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "เขียน GRUB ลงในอุปกรณ์บูตไม่สำเร็จ - ลองใหม่หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"คุณอาจสามารถติดตั้ง GRUB ลงในอุปกรณ์อื่นได้ " +"โดยคุณควรทดสอบด้วยว่าเครื่องของคุณบูตจากอุปกรณ์นั้นขึ้นหรือไม่ ถ้าตอบปฏิเสธ " +"ก็จะยกเลิกการปรับรุ่นจาก GRUB รุ่นเก่า" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "จะดำเนินการต่อไปโดยไม่ติดตั้ง GRUB หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"คุณได้เลือกที่จะไม่ติดตั้ง GRUB ลงในอุปกรณ์ใดเลย ถ้าดำเนินการต่อไป " +"บูตโหลดเดอร์อาจอยู่ในสภาพที่ไม่ได้ตั้งค่าอย่างสมบูรณ์ และเมื่อเปิดเครื่องครั้งต่อไป " +"ก็จะใช้สิ่งที่อยู่ในบูตเซกเตอร์ก่อนหน้านี้ และถ้าในบูตเซกเตอร์มี GRUB 2 รุ่นเก่าอยู่ " +"ก็อาจจะไม่สามารถโหลดมอดูลหรือใช้แฟ้มค่าตั้งปัจจุบันได้" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"ถ้าคุณกำลังใช้บูตโหลดเดอร์ตัวอื่นอยู่ และต้องการใช้ต่อไป " +"หรือถ้าคุณอยู่ในสภาพแวดล้อมที่ไม่ต้องใช้บูตโหลดเดอร์ คุณก็อาจดำเนินการต่อไปได้ มิฉะนั้น " +"คุณก็ควรติดตั้ง GRUB ลงในที่ใดที่หนึ่ง" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "จะลบ GRUB 2 ออกจาก /boot/grub หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "คุณต้องการจะลบแฟ้มของ GRUB 2 ทั้งหมดออกจาก /boot/grub หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "การลบนี้จะทำให้ระบบไม่สามารถบูตได้ ยกเว้นมีบูตโหลดเดอร์ตัวอื่นติดตั้งอยู่" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "จะทำขั้นสุดท้ายของการแปลงเป็น GRUB 2 หรือไม่?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"ระบบนี้มีแฟ้มจากบูตโหลดเดอร์ GRUB รุ่นเก่าติดตั้งอยู่ แต่ตอนนี้มีบูตเรคอร์ดของ GRUB 2 " +"ติดตั้งไว้ในดิสก์ต่อไปนี้เช่นกัน:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"ดูเหมือน GRUB รุ่นเก่าจะไม่มีการใช้งานอีกต่อไป และดูเหมือนว่าคุณควรจะปรับรุ่นอิมเมจของ GRUB 2 " +"ในดิสก์เหล่านี้แทน พร้อมทั้งจบขั้นตอนสุดท้ายของการแปลงไปเป็น GRUB 2 โดยลบแฟ้มของ GRUB " +"รุ่นเก่าทิ้ง ถ้าคุณไม่ปรับรุ่นอิมเมจ GRUB 2 เหล่านี้ขึ้น อิมเมจก็อาจไม่เข้ากันกับแพกเกจรุ่นใหม่ๆ " +"และทำให้ระบบของคุณบูตไม่ขึ้นได้" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"โดยทั่วไปแล้ว คุณควรจะจบขั้นตอนสุดท้ายของการแปลงไปเป็น GRUB 2 นี้ " +"นอกเสียจากว่าบูตเรคอร์ดเหล่านี้จะถูกสร้างโดย GRUB 2 ที่ติดตั้งในระบบปฏิบัติการอื่น" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "พารามิเตอร์สำหรับบูตลินุกซ์:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"พารามิเตอร์สำหรับบูตลินุกซ์ต่อไปนี้ดึงออกมาจาก /etc/default/grub หรือพารามิเตอร์ `kopt' ใน " +"menu.lst ของ GRUB รุ่นเก่า กรุณาตรวจสอบว่าค่านี้ถูกต้องหรือไม่ และกรุณาแก้ไขถ้าจำเป็น " +"พารามิเตอร์นี้สามารถปล่อยเป็นค่าว่างเปล่าได้" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "พารามิเตอร์สำหรับบูตลินุกซ์แบบปกติ:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "พารามิเตอร์ต่อไปนี้จะใช้ในเมนูสำหรับบูตลินุกซ์แบบปกติ แต่จะไม่ใช้กับโหมดกู้ระบบ" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "พารามิเตอร์สำหรับบูต kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"พารามิเตอร์สำหรับบูต kFreeBSD ต่อไปนี้ดึงออกมาจาก /etc/default/grub หรือพารามิเตอร์ " +"`kopt' ใน menu.lst ของ GRUB รุ่นเก่า กรุณาตรวจสอบว่าค่านี้ถูกต้องหรือไม่ " +"และกรุณาแก้ไขถ้าจำเป็น พารามิเตอร์นี้สามารถปล่อยเป็นค่าว่างเปล่าได้" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "พารามิเตอร์สำหรับบูต kFreeBSD แบบปกติ:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "พารามิเตอร์ต่อไปนี้จะใช้ในเมนูสำหรับบูต kFreeBSD แบบปกติ แต่จะไม่ใช้กับโหมดกู้ระบบ" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "สร้าง /boot/grub/device.map ใหม่เรียบร้อยแล้ว" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"เขียนแฟ้ม /boot/grub/device.map ใหม่เพื่อใช้ชื่ออุปกรณ์ที่ไม่เปลี่ยนแปลงง่ายเรียบร้อยแล้ว " +"โดยส่วนใหญ่แล้ว ชื่อแบบนี้ควรจะช่วยลดความจำเป็นในการเปลี่ยนข้อมูลอีกในอนาคตได้อย่างมาก " +"และรายการเมนูบูตต่างๆ ที่สร้างโดย GRUB ก็ไม่ควรได้รับผลกระทบ" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"อย่างไรก็ดี เนื่องจากมีดิสก์หลายดิสก์อยู่ในระบบ จึงเป็นไปได้ที่ระบบจะอาศัยผังอุปกรณ์แบบเก่า " +"กรุณาตรวจสอบว่ามีรายการเมนูบูตที่คุณกำหนดเองที่อ้างถึงไดรว์ด้วยหมายเลขในรูป (hdN) ของ GRUB " +"อยู่หรือไม่ และกรุณาปรับแก้ถ้าจำเป็น" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"ถ้าคุณไม่เข้าใจข้อความนี้ หรือถ้าไม่มีรายการเมนูบูตที่คุณกำหนดเอง คุณก็สามารถข้ามข้อความนี้ไปได้" --- grub2-1.99.orig/debian/po/fr.po +++ grub2-1.99/debian/po/fr.po @@ -0,0 +1,438 @@ +# translation of fr.po to French +# Translation of grub2 debconf templates to French +# Copyright (C) 2008-2010 Debian French l10n +# This file is distributed under the same license as the grub2 package. +# +# Christian Perrier , 2007, 2008, 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: fr\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 07:47+0200\n" +"Last-Translator: Christian Perrier \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Faut-il enchaîner le chargement depuis menu.lst ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "Une installation standard de GRUB a été détectée dans /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Afin de remplacer cette installation, il est recommandé de modifier /boot/" +"grub/menu.lst pour charger GRUB 2 depuis l'installation standard de GRUB " +"(« chainload »). Veuillez choisir si vous souhaitez effectuer cette " +"modification." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Il est recommandé de choisir cette option pour pouvoir confirmer le bon " +"fonctionnement de GRUB 2 avant de l'installer directement sur le secteur " +"d'amorçage (MBR : « Master Boot Record »)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Quel que soit votre choix, vous pourrez, plus tard, remplacer l'ancien " +"secteur d'amorçage par GRUB 2 avec la commande suivante, exécutée avec les " +"privilèges du superutilisateur :" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Périphériques où installer GRUB :" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Le paquet grub-pc est en cours de mise à jour. Ce menu permet de choisir " +"pour quels périphériques vous souhaitez exécuter la commande grub-install " +"automatiquement." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Il est en général recommandé d'exécuter grub-install automatiquement, afin " +"d'éviter la situation où l'image de GRUB est désynchronisée avec les modules " +"de GRUB ou le fichier grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Si vous n'avez pas la certitude du périphérique utilisé comme périphérique " +"d'amorçage par le BIOS, il est en général conseillé d'installer GRUB sur " +"l'ensemble des périphériques." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Veuillez noter que GRUB peut également être installé sur les secteurs " +"d'amorçage de partitions. Certaines partitions où cela pourrait être " +"nécessaire sont indiquées ici. Cependant, cela impose que GRUB utilise le " +"mécanisme « blocklist », ce qui le rend moins fiable et n'est donc pas " +"recommandé." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Le chargeur d'amorçage GRUB était précédemment installé sur un disque qui " +"n'est plus présent ou dont l'identifiant unique a changé pour une raison ou " +"une autre. Il est important de vous assurer que l'image de GRUB qui est " +"installée reste synchronisée avec les modules de GRUB ou grub.cfg. Veuillez " +"vérifier à nouveau que GRUB sera bien installé sur les périphériques " +"d'amorçage pertinents." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} Mo; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} Mo; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" +"Échec de l'installation de GRUB sur le périphérique d'amorçage. Continuer ?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB n'a pas pu être installé sur les périphériques suivants :" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Veuillez confirmer si vous souhaitez continuer malgré le risque d'un " +"démarrage incorrect de la machine." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Échec de l'installation de GRUB sur le périphérique d'amorçage. Essayer à " +"nouveau ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Il est peut-être possible d'installer GRUB sur un autre périphérique après " +"avoir vérifié que le système pourra démarrer sur ce périphérique. Dans le " +"cas contraire, la mise à jour depuis l'ancienne version de GRUB va échouer." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Faut-il poursuivre sans installer GRUB ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Vous avez choisi de n'installer GRUB sur aucun périphérique. Si vous " +"poursuivez, il est possible que le programme de démarrage ne soit pas " +"configuré correctement et que la machine démarre avec ce qui était " +"précédemment installé sur le secteur d'amorçage. Si une ancienne version de " +"GRUB 2 s'y trouve, il est possible qu'elle ne puisse pas charger certains " +"modules ou lire le fichier de configuration actuel." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Si vous utilisez déjà un autre programme de démarrage et souhaitez " +"poursuivre ou si, en raison d'un environnement particulier, vous n'avez pas " +"besoin de programme de démarrage, vous pouvez continuer malgré tout. Dans le " +"cas contraire, il est nécessaire d'installer GRUB quelque part." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Faut-il supprimer GRUB 2 de /boot/grub ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" +"Veuillez choisir si vous voulez vraiment supprimer tous les fichiers de " +"GRUB 2 de /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Cela peut rendre le système impossible à démarrer tant qu'un autre chargeur " +"d'amorçage ne sera pas installé." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Faut-il terminer la migration vers GRUB 2 maintenant ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Ce système comporte encore des fichiers de la version précédente du " +"programme de démarrage GRUB mais comporte également des secteurs d'amorçage " +"de GRUB 2 sur les disques suivants :" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Il est très probable que la version précédente de GRUB ne soit plus utilisée " +"et il est donc conseillé de mettre à jour les images de GRUB 2 sur ces " +"disques, puis terminer la migration vers GRUB 2 en supprimant les anciens " +"fichiers de la version précédente. Si vous ne mettez pas ces images de " +"GRUB 2 à jour, elles pourraient être incompatibles avec de nouvelles " +"versions, ce qui pourrait empêcher un démarrage normal." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Il est donc très probablement nécessaire de terminer la migration vers " +"GRUB 2 à moins que ces secteurs d'amorçage n'aient été créés par une " +"installation de GRUB 2 d'un autre système d'exploitation." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Ligne de commande de Linux :" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La ligne de commande de Linux suivante a été récupérée via le fichier /etc/" +"default/grub ou le paramètre « kopt » du fichier menu.lst utilisé par la " +"version originelle de GRUB. Veuillez contrôler qu'elle est correcte et la " +"modifier si nécessaire. Cette ligne de commande peut être vide." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Ligne de commande par défaut de Linux :" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Les paramètres indiqués seront utilisés pour le noyau Linux de l'entrée de " +"menu par défaut mais pas pour le mode de secours." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Ligne de commande de kFreeBSD :" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La ligne de commande de kFreeBSD suivante a été récupérée via le fichier /" +"etc/default/grub ou le paramètre « kopt » du fichier menu.lst utilisé par la " +"version originelle de GRUB. Veuillez contrôler qu'elle est correcte et la " +"modifier si nécessaire. Cette ligne de commande peut être vide." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Ligne de commande par défaut de kFreeBSD :" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Les paramètres indiqués seront utilisés pour le noyau kFreeBSD de l'entrée " +"de menu par défaut mais pas pour le mode de secours." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "Recréation de /boot/grub/device.map" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Le fichier /boot/grub/device.map a été réécrit afin d'utiliser des noms de " +"périphériques stables. Dans la majorité des cas, cela devrait éviter d'avoir " +"à le modifier dans le futur et les entrées de menu créées par GRUB ne " +"devraient pas être affectées par ce changement." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Cependant, si la machine comporte plus d'un disque, il est possible que le " +"démarrage dépende de l'ancien système de cartographie des périphériques " +"(« device map »). Vous devriez vérifier s'il existe des entrées de menu de " +"démarrage personnalisées qui se servent encore de la numérotation de disques " +"de GRUB (hdN), puis les mettre à jour si nécessaire." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Si vous ne comprenez pas ces explications ou n'utilisez pas d'entrées " +"personnalisées dans le menu de démarrage, vous pouvez ignorer cet " +"avertissement. " + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Dans tous les cas, pour charger GRUB 2 directement depuis le secteur " +#~ "d'amorçage, vous devrez utiliser la commande suivante avec les privilèges " +#~ "du superutilisateur :" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Échec de l'installation de GRUB. Continuer ?" --- grub2-1.99.orig/debian/po/vi.po +++ grub2-1.99/debian/po/vi.po @@ -0,0 +1,447 @@ +# Vietnamese translation for Grub2_Debian. +# Copyright © 2010 Free Software Foundation, Inc. +# Clytie Siddall , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-09-28 19:02+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Nạp dãy từ menu.lst ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Văn lệnh nâng cấp GRUB phát hiện được một thiết lập GRUB Thừa Tự (GRUB " +"Legacy) trong « /boot/grub »." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Để thay thế phiên bản Thừ Tự của GRUB trong hệ thống này, khuyến khích điều " +"chỉnh « /boot/grub/menu.lst » để nạp dãy (chainload) GRUB 2 từ thiết lập " +"GRUB Thừa Tự đã có. Bước này có thể được tự động thực hiện ngay bây giờ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Khuyên bạn đồng ý với nạp dãy GRUB 2 từ menu.lst, và thẩm tra thiết lập GRUB " +"2 mới có chức năng, trước khi ghi nó trực tiếp vào MBR (mục ghi khởi động " +"chủ)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "GRUB không cài đặt được vào những thiết bị theo đây:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +# Variable: don't translate; Biến: đừng dịch +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +# Variable: don't translate; Biến: đừng dịch +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB không cài đặt được vào những thiết bị theo đây:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Bạn vẫn muốn tiếp tục không? Có thì máy tính có thể không khởi động đúng." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Lỗi cài đặt GRUB. Thử lại ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Có thể là bạn cài đặt được GRUB vào một thiết bị khác (trước tiên nên kiểm " +"tra nếu hệ thống sẽ khởi động từ thiết bị đó). Không thì tiến trình nâng cấp " +"từ GRUB Cũ (Legacy) sẽ bị thôi." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Tiếp tục lại mà không cài đặt GRUB ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is an " +#| "earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Bạn đã chọn không cài đặt GRUB vào thiết bị nào. Tiếp tục thì có thể là bộ " +"nạp khởi động bị sai cấu hình, và máy tính khởi động lại sẽ sử dụng dữ liệu " +"nào đã có trong phân vùng khởi động. Nếu phiên bản khởi động chứa một phiên " +"bản GRUB2 cũ, có thể là nó không nạp được mô-đun hoặc không xử lý được tập " +"tin cấu hình hiện thời." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Nếu bạn muốn tiếp tục chạy một bộ nạp khởi động đã có, hoặc nếu đây là một " +"môi trường đặc biệt mà không cần thiết bộ nạp khởi động, thì bạn nên tiếp " +"tục. Khác thì bạn nên cài đặt GRUB vào một vị trí nào đó." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Kết thúc chuyển đổi sang GRUB2 ngay bây giờ ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Hệ thống này vẫn còn có tập tin được cài đặt bởi bộ nạp khởi động GRUB Cũ " +"(Legacy), nhưng mà cũng có mục ghi GRUB2 được cài đặt vào những đĩa này:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Rất có thể là GRUB Cũ (Legacy) không còn được sử dụng, vì thế bạn nên nâng " +"cấp các ảnh GRUB2 trên những đĩa này và kết thúc chuyển đổi sang GRUB2 bằng " +"cách gỡ bỏ tất cả các tập tin GRUB Cũ. Không nâng cấp các ảnh GRUB2 thì " +"chúng có thể không tương thích với gói mới và gây ra hệ thống này không khởi " +"động đúng." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Nói chung bạn nên kết thúc chuyển đổi sang GRUB2 nếu các mục ghi khởi động " +"này không được tạo bởi một bản cài đặt GRUB2 trên một hệ điều hành khác." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Dòng lệnh Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Dòng lệnh Linux theo đây đã được trích ra « /etc/default/grub » hoặc từ tham " +"số « kopt » trong menu.lst của GRUB Thừa Tự. Hãy thẩm tra nó vẫn đúng, không " +"thích hợp thì cũng sửa đổi." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Dòng lệnh Linux mặc định:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Chuỗi theo đây sẽ được sử dụng làm các tham số Linux cho mục nhập trình đơn " +"mặc định, mà không phải cho chế độ phục hồi." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Dòng lệnh kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Dòng lệnh kFreeBSD theo đây đã được trích ra « /etc/default/grub » hoặc từ " +"tham số « kopt » trong menu.lst của GRUB Thừa Tự. Hãy thẩm tra nó vẫn đúng, " +"không thích hợp thì cũng sửa đổi." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Dòng lệnh kFreeBSD mặc định:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Chuỗi theo đây sẽ được sử dụng làm các tham số kFreeBSD cho mục nhập trình " +"đơn mặc định, mà không phải cho chế độ phục hồi." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "Tập tin « /boot/grub/device.map » đã được tạo lại." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Tập tin « /boot/grub/device.map » đã được ghi nhớ lại để sử dụng tên thiết " +"bị kiểu ổn định. Trong phần lớn các trường hợp, bản cập nhật này nên giảm " +"một cách đáng kể sự cần sửa đổi về sau, và không nên tác động trình đơn khởi " +"động được GRUB tạo." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Tuy nhiên, vì bạn có nhiều đĩa trong hệ thống, có thể là bạn vẫn còn phụ " +"thuộc vào sơ đồ thiết bị cũ. Hãy kiểm tra nếu bạn có mục trình đơn khởi động " +"riêng mà dựa vào số thứ tự ổ đĩa của GRUB (hdN) và cập nhật nếu thích hợp." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Nếu bạn không hiểu thông điệp này, hoặc nếu bạn không có mục trình đơn khởi " +"động riêng nào, thì bạn có thể bỏ qua thông điệp này." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Trong cả hai trường hợp, khi nào bạn muốn nạp GRUB2 một cách trực tiếp từ " +#~ "MBR, chỉ cần chạy (dưới người chủ) câu lệnh theo đây:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Lỗi cài đặt GRUB. Tiếp tục ?" --- grub2-1.99.orig/debian/po/nb.po +++ grub2-1.99/debian/po/nb.po @@ -0,0 +1,420 @@ +# Norwegian Bokmål translation for grub2. +# Copyright (C) 2010 grub2 +# This file is distributed under the same license as the grub2 package. +# Hans Fredrik Nordhaug , 2010-12. +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-03-12 02:14+0200\n" +"Last-Translator: Hans Fredrik Nordhaug \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Virtaal 0.7.1\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Kjedelaste fra menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Oppgraderingsskriptene til GRUB har funnet et GRUB Legacy-oppsett i /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"For å erstatte Legacy-versjonen av GRUB på ditt system anbefales det at /" +"boot/grub/menu.lst justeres til å laste GRUB 2 oppstartsbilde fra ditt " +"eksisterende GRUB Legacy-oppsett. Dette steget kan utføres automatisk nå." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Det anbefales at du aksepterer å kjedelaste GRUB 2 fra menu.lst, og " +"verifiserer at det nye GRUB 2-oppsettet virker før det skrives til MBR " +"(Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Uavhengig av din avgjørelse kan du erstatte det gamle MBR-bildet med GRUB 2 " +"senere ved å kjøre følgende kommando som root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB installasjonsenheter:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Pakken grub-pc blir oppgradert. Denne menyen lar deg velge hvilke enheter " +"hvilke enheter du vil at grub-install skal kjøres automatisk for, hvis noen." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Kjøring av grub-install automatisk anbefales i de fleste situasjoner for å " +"forhindre at det installerte GRUB-kjernebildet kommer ut av synk med GRUB-" +"moduler i grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Hvis du er usikker hvilken disk som er satt som oppstartsdisk i din BIOS, er " +"det ofte en god ide å installere GRUB på alle diskene. " + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Merk: Det er mulig å installere GRUB til partisjonsoppstartsposter også, og " +"noen passende partisjoner er foreslått her. Imidlertid tvinger dette GRUB " +"til å bruke blocklist-mekanismen som ikke er like pålitelig og derfor ikke " +"anbefalt." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB oppstartslasteren var tidligere installert på en disk som ikke lenger " +"fins eller på en disk hvor den unike identifikatoren er endret av eller " +"annen grunn. Det er viktig å være sikker på at det installerte GRUB-" +"kjernebildet forblir i synk med GRUB-moduler og grub.cfg. Sjekk igjen at " +"GRUB skrive til passende oppstartsenhet." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Klarte ikke skrive GRUB til oppstartsenhet - fortsette?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Klarte ikke installere GRUB på følgende enheter:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Ønsker du å fortsette likevel? Hvis du fortsetter, vil kanskje ikke din " +"datamaskin starte opp skikkelig." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Klarte ikke skrive GRUB til oppstartsenhet - prøve igjen?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Du kan klare å installere GRUB på en annen enhet, selvom du bør sjekke at " +"systemet ditt kan/vil starte opp fra den enheten. Ellers vil oppgraderingen " +"fra GRUB Legacy bli avbrutt." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Fortsett uten å installere GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Du har valgt å ikke installere GRUB på noen enhet. Hvis du fortsetter, vil " +"oppstartslasteren kanskje ikke være skikkelig satt opp, og når denne " +"datamaskinen starter opp neste gang vil den bruke det tidligere innholdet i " +"oppstartssektoren. Hvis det er en tidligere versjon av GRUB 2 i " +"oppstartsektoren, vil den kanskje ikke være i stand til å laste inn moduler " +"eller håndtere den aktuelle konfigurasjonsfilen." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Hvis du allerede kjører en annen oppstartslaster og ønsker å fortsette med " +"det, eller hvis dette er et spesielt miljø hvor du ikke har bruk for en " +"oppstartslaster, så skal du fortsette likevel. Ellers, bør du installere " +"GRUB et eller annet sted." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Fjern GRUB 2 fra /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Vil du at alle filer for GRUB 2 skal fjernes fra /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Dette vil gjøre at systemet ikke kan starte med mindre en annen " +"oppstartslaster er installert." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Avslutt konvertering til GRUB 2 nå?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Dette systemet har fremdeles installert filer fra GRUB Legacy-" +"oppstartslasteren, men systemet har nå også GRUB 2 oppstartsposter " +"installert på disse diskene:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Det virker sannsynlig at GRUB Legacy ikke lenger er i bruk, og at du i " +"steden for skal oppgradere GRUB 2-bildene på disse diskene og avslutte " +"konverteringen til GRUB 2 ved å fjerne eldre GRUB Legacy-filer. Hvis du ikke " +"oppgraderer disse GRUB 2-bildene, så er de kanskje ikke kompatible med de " +"nye pakkene og kan få ditt system til å stoppe å starte opp skikkelig." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Du bør generelt avslutte konverteringen til GRUB 2 med mindre disse " +"oppstartspostene ble opprettet av en GRUB 2-installasjon på et annet " +"operativsystem." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Kommandolinje i Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Den følgende Linux-kommandolinjen ble trukket ut fra /etc/default/grub eller " +"parameteren `kopt' i GRUB Legacys menu.lst. Verifiser at den er korrekt og " +"endre den om nødvendig. Det er lov at kommandolinjen er tom." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Standardkommandolinje i Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Den følgende teksten vil bli brukt som Linux-parametre for " +"standardmenupunktet, men ikke for gjenopprettelsesmodus." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Kommandolinje i kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Den følgende kFreeBSD-kommandolinjen ble trukket ut fra /etc/default/grub " +"eller fra parameteren `kopt' i GRUB Legacys menu.lst. Verifiser at den er " +"korrekt, og endre den om nødvendig. Det er lov at kommandolinjen er tom." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Standardkommandolinje i kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Den følgende teksten vil bli brukt som kFreeBSD-parametre for " +"standardmenupunktet men ikke for gjenopprettelsesmodus." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map er regenerert" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Filen /boot/grub/device.map er oppdatert til å bruke stabile enhetsnavn. I " +"de fleste tilfeller vil dette markant redusere behovet for å endre filen " +"fremover, og oppstartsmenupunkter opprettet av GRUB skal ikke bli påvirket." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Siden det er mer enn en disk i sytemet, er det mulig at systemet er avhengig " +"av det gamle enhetskartet. Sjekk om det er noen tilpassede " +"oppstartsmenupunkter som er avhengig av GRUBs (hdN) disknummerering, og " +"oppdater dem om nødvendig." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Hvis du ikke forstår denne beskjeden, eller det ikke er noen tilpassede " +"oppstartsmenypunkter, kan du ignorere denne beskjeden." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Uansett hva, når du ønsker at GRUB 2 skal lastes inn direkte fra MBR, kan " +#~ "du gjøre ved å utføre følgende kommando (som root):" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Klarte ikke installere GRUB. Fortsett?" --- grub2-1.99.orig/debian/po/ru.po +++ grub2-1.99/debian/po/ru.po @@ -0,0 +1,424 @@ +# translation of ru.po to Russian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the grub2 package. +# +# Yuri Kozlov , 2007, 2008. +# Yuri Kozlov , 2009, 2010, 2011. +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 11:37+0400\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Включить загрузку по цепочке (chainload) в menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Сценарии обновления обнаружили установку GRUB предыдущего поколения в /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Чтобы заменить в системе версию GRUB предыдущего поколения, рекомендуется " +"исправить /boot/grub/menu.lst так, чтобы образ GRUB 2 загружался из " +"используемой установки GRUB предыдущего поколения. Это может быть сделано " +"автоматически прямо сейчас." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Рекомендуется ответить утвердительно для загрузки GRUB 2 из menu.lst по " +"цепочке и проверить, что новая настройка GRUB 2 работает так как нужно, " +"перед тем как устанавливать её непосредственно в MBR (главную загрузочную " +"запись)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"В любом случае, вы можете заменить старый образ MBR на GRUB 2 позднее с " +"помощью следующей команды, выполненной с правами суперпользователя:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Устройства, на которые устанавливается GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Выполняется обновление пакета grub-pc. Это меню позволяет вам выбрать " +"устройства, для которых нужно автоматически запустить grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"В большинстве случаев рекомендуется выполнять автоматический запуск grub-" +"install, так как это синхронизирует основной образ GRUB с модулями GRUB и " +"grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Если вы не знаете какое устройство указано в BIOS для загрузки, часто лучше " +"всего установить GRUB на все устройства." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Замечание: также возможно установить GRUB в загрузочную запись раздела, и " +"здесь предлагаются соответствующие разделы. Однако, это включает в GRUB " +"использование механизма блок-листа, при котором уменьшается надёжность, и " +"поэтому это не рекомендуется." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Системный загрузчик GRUB был установлен на диск, которого больше нет в " +"системе, или по какой-то причине был изменён уникальный идентификатор. Важно " +"убедиться, что установленный основной образ GRUB синхронизирован с модулями " +"GRUB и grub.cfg. Проверьте ещё раз, что GRUB записан на правильные " +"загрузочные устройства." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} МБ; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} МБ; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Не удалось записать GRUB на загрузочное устройство -- продолжить?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Не удалось установить GRUB на следующие устройства:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Продолжить, не смотря на это? Возможно, не удастся загрузить компьютер." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Не удалось записать GRUB на загрузочное устройство -- попробовать ещё раз?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Вы можете установить GRUB на другое устройство, но проверьте, что компьютер " +"будет загружаться с этого устройства. Иначе, обновление со старой версии " +"GRUB Legacy будет отменено." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Продолжить без установки GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Вы отказались от установки GRUB. Если продолжите, то системный загрузчик " +"может быть неправильно настроен, и когда компьютер будет включён в следующий " +"раз, будет использоваться то, что было раньше в загрузочном секторе. Если " +"там была предыдущая версия GRUB 2, то она не сможет загрузить модули или " +"обработать текущий файл настройки." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Если у вас уже работает другой системный загрузчик и вы хотите оставить " +"выполнение как есть, или если есть специальное окружение, где не нужен " +"системный загрузчик, то продолжайте установку. Иначе, вам нужно установить " +"GRUB как-то иначе." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Удалить GRUB 2 из /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Удалить все файлы GRUB 2 из /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Если не установлен другой системный загрузчик это сделает систему " +"незагружаемой." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Завершить переход к GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"В системе остались файлы от старого системного загрузчика GRUB Legacy, но " +"теперь на те же диски установлена загрузочная запись GRUB 2:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Вероятно, GRUB Legacy больше не используется и вам нужно обновить образы " +"GRUB 2 на этих дисках и завершить переход к GRUB 2, удалив старые файлы GRUB " +"Legacy. Если вы не обновите данные образы GRUB 2, то они могут оказаться " +"несовместимыми с новыми пакетами и система больше не загрузится." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Обычно, вам нужно завершить переход к GRUB 2, если нет загрузочных записей, " +"созданных установкой GRUB 2 в какой-то другой операционной системе." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Командная строка Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Представленная ниже строка команд Linux была извлечена из /etc/default/grub " +"или параметра «kopt» файла menu.lst старой версии GRUB. Проверьте, что всё " +"правильно, или измените её, если требуется. Также командная строка может " +"быть пустой." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Командная строка Linux по умолчанию:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Данная строка будет использоваться в качестве параметров Linux в пункте меню " +"по умолчанию, кроме режима восстановления." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Командная строка kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Представленная ниже строка команд kFreeBSD была извлечена из /etc/default/" +"grub или параметра «kopt» файла menu.lst старой версии GRUB. Проверьте, что " +"всё правильно, или измените её, если требуется. Также командная строка может " +"быть пустой." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Командная строка kFreeBSD по умолчанию:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Данная строка будет использоваться в качестве параметров kFreeBSD в пункте " +"меню по умолчанию, кроме режима восстановления." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "Пересоздан файл /boot/grub/device.map" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Файл /boot/grub/device.map перезаписан, согласно имеющимся стабильным именам " +"устройств. В большинстве случаев, это должно значительно сократить " +"необходимость изменения его в будущем, и пункты загрузочного меню, " +"созданного GRUB, не должны быть затронуты." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Однако, так как у вас в системе более одного диска, возможно, что была " +"зависимость от старого именования устройств. Проверьте, что во всех " +"настроенных вручную пунктах загрузочного меню используется нумерация " +"устройств GRUB (hd№), и измените их, если нужно." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Если вы не понимаете о чём речь, или у вас нет настроенных вручную пунктов " +"загрузочного меню, то игнорируйте это сообщение." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "В любом случае, если вы хотите, чтобы GRUB 2 загружался непосредственно " +#~ "из MBR, выполните следующую команду (имея права суперпользователя):" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Установка GRUB завершилась неудачно. Продолжить?" --- grub2-1.99.orig/debian/po/be.po +++ grub2-1.99/debian/po/be.po @@ -0,0 +1,460 @@ +# Belarusian translation of grub2 templates +# Copyright (C) 2009 respective translators (see below) +# This file is distributed under the same license as the grub2 package. +# Hleb Rubanau , 2009, +# Viktar Siarheichyk , 2010, 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: be\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-03-05 13:46+0300\n" +"Last-Translator: Viktar Siarheichyk \n" +"Language-Team: Debian Belarusian (Official spelling) \n" +"Language: be\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Belarusian\n" +"X-Poedit-Country: BELARUS\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Ланцуговая загрузка з menu.lst?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Скрыпты абнаўлення GRUB выявілі папярэднюю версію GRUB, усталяваную ў /boot/" +"grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Каб замяніць папярэднюю версію GRUB у Вашай сістэме, пажадана выправіць " +"файл /boot/grub/menu.lst такім чынам, каб GRUB 2 загружаўся з існуючай " +"папярэдняй версіі GRUB. Зараз можна зрабіць гэтую наладку аўтаматычна." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Раім абраць ланцуговую загрузку GRUB 2 з menu.lst, і праверыць, што нанова " +"ўсталяваны GRUB 2 працуе, перад тым як усталёўваць яго ў галоўны загрузачны " +"запіс (MBR, Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Як бы вы ні вырашылі, можна пазней замяніць стары вобраз MBR на GRUB 2, калі " +"выканаць як root наступныя каманды:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Прылады, на якія ўсталёўваць GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"x`Пакет grub-pc абнаўляецца. Гэтае меню дазваляе абраць, для якіх прыладаў " +"трэба, калі ўвогуле трэба, аўтаматычна запускаць grub-install." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"У большасці выпадкаў рэкамендуецца запускаць grub-install аўтаматычна, каб " +"усталяваны асноўны вобраз GRUB заставаўся ў адпаведнасці з модулямі GRUB і " +"grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Калі вы не пэўныя, якая прылада ў вашым BIOS прызначаная як галоўная, то " +"хутчэй за ўсё лепей будзе ўсталяваць GRUB на іх усіх." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Увага: таксама магчыма ўсталяваць GRUB у сектары пачатковай загрузкі " +"падзелаў, і некаторыя адпаведныя падзелы тут прапануюцца. Аднак, для гэтага " +"GRUB мусіць карыстацца механізмам спісаў блокаў, што змяншае надзейнасць і " +"таму не рэкамендуецца." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Пачатковы запускальнік GRUB раней быў усталяваны на дыск, які зараз " +"адсутнічае, альбо чый унікальны ідэнтыфікатар па нейкай прычыне змяніўся. " +"Важна, каб усталяваны асноўны вобраз GRUB адпавядаў модулям GRUB і grub.cfg. " +"Калі ласка, праверце яшчэ раз, каб упэўніцца, што GRUB запісаны ў адпаведныя " +"загрузкавыя прылады." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} Мб; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Запіс GRUB на загрузкавую прыладу не ўдаўся - працягваць?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Не атрымалася ўсталяваць GRUB на наступныя прылады:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Вы жадаеце працягваць, не зважаючы на гэта? Калі працягнеце, ваш кампутар " +"можа не запусціцца." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Не атрымалася запісаць GRUB у загрузкавую прыладу - паспрабаваць ізноў?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Магчыма, што вы зможаце ўсталяваць GRUB на нейкую іншую прыладу, але вам " +"варта спраўдзіць, што вашая сістэма запусціцца з гэтае прылады. Іначай, " +"абнаўленне з папярэдняе версіі GRUB будзе адмененае." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Працягваць, не ўсталёўваючы GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Вы выбралі не ўсталёўваць GRUB ні на якую прыладу. Калі Вы працягнеце далей, " +"пачатковы запускальнік, магчыма, не будзе сканфігураваны належным чынам, і " +"калі гэты кампутар запусціцца наступным разам, ён загрузіцца з таго, што " +"было раней у сектары запуску. Калі там была старая версія GRUB 2, ён можа не " +"здолець загрузіць модулі альбо не разабраць цяперашні канфігурацыйны файл." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Калі Вы ўжо карыстаецеся іншым пачатковым запускальнікам і хочаце так рабіць " +"і надалей альбо калі гэта адмысловае асяроддзе, дзе загрузчык непатрэбны, то " +"вам варта ўсё ж працягваць. Іначай вам трэба некуды ўсталяваць GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Выдаліць GRUB 2 з /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Хочаце выдаліць усе файлы GRUB 2 з /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"З-за гэтага сістэма будзе не ў стане запусціцца, пакуль не будзе ўсталяваны " +"іншы пачатковы запускальнік." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Скончыць зараз перавод на GRUB 2?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"На гэтай сістэме ўсё яшчэ ўсталяваныя файлы з папярэдняе версіі загрузчыка " +"GRUB, але зараз тут таксама ўсталяваныя загрузчыкі GRUB 2 на наступных " +"дысках:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Падаецца, што папярэдняя версія GRUB болей не выкарыстоўваецца, і што вы " +"павінны замест гэтага абнавіць вобразы GRUB 2 на гэтых дысках і скончыць " +"пераход на GRUB 2, выдаліўшы старыя файлы папярэдняй версіі GRUB. Калі вы не " +"абновіце гэтыя вобразы GRUB 2, то яны могуць стаць несумяшчальнымі з новымі " +"пакетамі і ваша сістэма перастане нармальна запускацца." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Звычайна, Вы павінны скончыць пераход на GRUB 2, калі толькі гэтыя " +"загрузчыкі не былі створаныя ўсталёўкай GRUB 2 на нейкай іншай аперацыйнай " +"сістэме." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Радок камандаў для ядра Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Гэты радок камандаў для ядра Linux узяты з файла /etc/default/grub або з " +"параметра `kopt' у файле наладак (menu.lst) папярэдняй версіі GRUB (Legacy). " +"Калі ласка, пераканайцеся, што каманды запісаныя правільна, або папраўце іх, " +"калі трэба. Гэты радок камандаў можа быць пустым." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Прадвызначаны радок камандаў для ядра Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Наступны радок будзе выкарыстаны ў якасці параметраў ядра Linux для " +"прадвызначанага пункту меню (але не для рэжыму аднаўлення)." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Радок камандаў для ядра kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Гэты радок камандаў для kFreeBSD узяты з файлу /etc/default/grub або з " +"параметру `kopt' у файле наладак (menu.lst) папярэдняй версіі GRUB (Legacy). " +"Калі ласка, пераканайцеся, што каманды запісаныя правільна, або папраўце іх, " +"калі трэба. Гэты радок камандаў можа быць пустым." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Прадвызначаны радок камандаў для ядра kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Наступны радок будзе выкарыстаны ў якасці параметраў ядра kFreeBSD для " +"прадвызначанага пункту меню (але не для рэжыму аднаўлення)." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map быў перагенераваны" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Файл /boot/grub/device.map быў перапісаны, каб выкарыстоўваць стабільныя " +"імёны прыладаў. У бальшыні выпадкаў гэта значна знізіць неабходнасць змяняць " +"яго ў будучыні, і пункты загрузачнага меню, згенераваныя GRUB, не давядзецца " +"закрануць." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Аднак, паколькі ў вашай сістэме больш за адзін дыск, то магчыма, што ў " +"сістэме выкарыстоўваецца старая табліца прыладаў. Праверце, ці ёсць пункты " +"загрузкавага меню, што ўжываюць нумарацыю прыладаў GRUB (hdN) і абнавіце іх, " +"калі патрэбна." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Калі вы не зразумелі гэтае паведамленне, альбо калі вы не маеце ўласных " +"пунктаў загрузкавага меню, вы можаце ігнараваць гэтае паведамленне." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Калі ж Вы хочаце, каб GRUB 2 запускаўся непасрэдна з MBR, дастаткова " +#~ "запусціць з правамі карыстальніка root наступную каманду:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "Не атрымалася ўсталяваць GRUB. Працягваць?" + +#~ msgid "GRUB 1.95 numbering scheme transition" +#~ msgstr "Змена схемы нумарацыі GRUB 1.95" + +#~ msgid "" +#~ "As of version 1.95, GRUB 2 has changed its numbering scheme. Partitions " +#~ "are now counted starting from 1 rather than 0. This is to make it " +#~ "consistent with device names of Linux and the other kernels used in " +#~ "Debian. For example, when using Linux as the kernel, \"(hd0,1)\" refers " +#~ "to the same partition as the /dev/sda1 device node." +#~ msgstr "" +#~ "Схема нумарацыі ў GRUB 2 змянілася ў параўнанні з версіяй 1.95 . Зараз " +#~ "падзелы дыску адлічваюцца пачынаючы з 1 замест 0. Гэта зроблена, каб " +#~ "адпавядаць назвам прыладаў у Linux і іншых ядрах, якія выкарыстоўваюцца ў " +#~ "Debian. Напрыклад, калі ў якасці ядра выкарыстоўваецца Linux, радок " +#~ "\"(hd0,1)\" датычыцца таго самага падзелу дыску, як і файл прылады /dev/" +#~ "sda1." + +#~ msgid "" +#~ "Because of this, there's a chance your system becomes unbootable if " +#~ "update-grub(8) is run before GRUB is updated, generating a grub.cfg file " +#~ "that your installed GRUB won't yet be able to parse correctly. To ensure " +#~ "your system will be able to boot, you have to:" +#~ msgstr "" +#~ "З гэтай прычыны Ваша сістэма можа стаць няздольнай да загрузкі, калі " +#~ "праграма update-grub(8), запушчаная да абнаўлення GRUB, стварыла файл " +#~ "grub.cfg, які немагчыма карэктна апрацаваць усталяваным GRUB. Каб " +#~ "пераканацца, што Ваша сістэма здольная да загрузкі, варта: " + +#~ msgid "" +#~ " - Reinstall GRUB (typically, by running grub-install).\n" +#~ " - Rerun update-grub to generate a new grub.cfg." +#~ msgstr "" +#~ " - Пераўсталяваць GRUB (звычайна, праз запуск grub-install).\n" +#~ " - Перазапусціць update-grub, каб стварыць новы grub.cfg." --- grub2-1.99.orig/debian/po/templates.pot +++ grub2-1.99/debian/po/templates.pot @@ -0,0 +1,337 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" --- grub2-1.99.orig/debian/po/POTFILES.in +++ grub2-1.99/debian/po/POTFILES.in @@ -0,0 +1,2 @@ +[type: gettext/rfc822deb] grub-pc.templates.in +[type: gettext/rfc822deb] templates.in --- grub2-1.99.orig/debian/po/si.po +++ grub2-1.99/debian/po/si.po @@ -0,0 +1,391 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Danishka Navin , 2011. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-09-29 08:35+0530\n" +"Last-Translator: Danishka Navin \n" +"Language-Team: Sinhala \n" +"Language: si\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst චක්‍ර පූර්ණය" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "GRUB යාවත් විධානාවලි පැරණි GRUB සැකසුමක් /boot/grub හි සොයාගෙන ඇත." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"ඔබේ පද්ධතියේ පවතින GRUB සංස්කරණය ප්‍රතිපිහිටුවීමට. /boot/grub/menu.lst පවතින GRUB ස්ථාපනය " +"මගින් GRUB 2 ආරම්භක පිළිබිඹුවක් පූර්ණය කිරීමට සැකසීම නිර්දේශිතයි.\n" +"මෙම ස්ථාපනය දැන් ස්වයංක්‍රීයව ඉටුකල හැක." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"menu.lst වෙතින් GRUB 2 දාමපූර්ණය පිළිගැනීම නිර්දේශිතයි. එමෙන්ම එය MBR (ප්‍රධාන ආරම්භක සටහන) " +"වෙත ලිවීමට පෙර GRUB 2 ස්ථාපනය ක්‍රියාකරයි දැයි පිරික්සන්න." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"ඔබේ තීරණය කුමක් වුවත් ඔබට අග්‍රය ලෙස පහත විධානය නිකුත් කිරීමෙන් GRUB 2 සමඟ පැරණි MBR " +"ප්‍රථිපිහිටුවිය හැක." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB ස්ථාපන උපකරණ:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc පැකේජය යාවත් වෙමින්. මෙම මෙනුව ඔබට grub-install ස්වයංක්‍රීයව ධාවනය විය යුත්තේ " +"කුමන උපකරණ මත දැයි තේරීමට ඉඩදෙයි." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"බොහෝ අවස්ථා වලදී grub-install ස්වයංක්‍රීයව ධාවනය කිරීම නිර්දේශිතයි. GRUB මොඩියුල හෝ grub." +"cfg මගින් ස්ථාපිත GRUB මූල පිළිබිඹුව සම්මුහුර්තයෙන් බැහැර යාම වලක්වයි." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"ඔබට ඔබේ BIOS මගින් සඳහන් කර ඇති ආරම්භක ධාවකය කුමක් දැයි විශ්වාස නොමැති නම්. සියල්ලේම GRUB " +"පිහිටුවීම හොඳ අදහසකි." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"සටහන: GRUB කොටස් ආරම්භක වාර්ථා තුළද පිහිටුවිය හැක. එමෙන්ම ඇතැම් සුදුසු කොටස් මෙහිදී පිරිනැමේ. " +"කෙසේවුවත්, මෙය GRUB වෙත වැලකුම් ලැයිස්තු ක්‍රියාවලිය සිදුකිරිමට බල කරයි. එය වඩා අස්ථිර බැවින් " +"නිර්දේශ නොකෙරේ." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB ආරම්භක පූරකය දැනට නොපවතින තැටියට ස්ථාපනය කර තිබී ඇත. හෝ එහි අනන්‍ය හැඳින්වීම කිසියම් " +"හේතුවක් නිසා වෙනස් වී ඇත. ස්ථාපිත GRUB මූල පිළිබිඹුව GRUB මොඩියුල හා grub.cfg සමඟ සම්මුහුර්ත " +"බව තහවුරු කරගැනීම වැදගත්වේ. කරුණාකර සුදුසු ආරම්භක උපකරණයන් හි GRUB ලියැවී ඇතිදැයි නැවත " +"පිරික්සන්න." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "GRUB ආරම්භක උපකරණය ලිවීම අසාර්ථකයි - ඉදිරියට?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB පහත උපකරණ ස්ථාපනයෙහි අසාර්ථක විය:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "ඔබට කෙසේ හෝ ඉදිරියට යෑමට ඇවැසිද? එසේ නම් ඔබේ පරිගණකය නිසිපරිදි ආරම්භ නොවනු ඇත." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB ආරම්භක උපකරණය ලිවීම අසාර්ථකයි - නැවත උත්සාහ?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"ඔබට GRUB වෙනත් උපකරණයක ස්ථාපනය කල හැක. ඒ අතර ඔබේ පද්ධතිය එම උපකරණය මගින් ආරම්භ " +"වේදැයි සොයාබලන්න. එසේ නොමැති නම් පැරණි GRUB වෙතින් යාවත් වීම අවලංගු වේ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB ස්ථාපනයෙන් තොරව ඉදිරියට යන්නද?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"ඔබ කිසිඳු උපකරණයකට GRUB ස්ථාපනය නොකිරීමට තෝරා ඇත. ඔබ ඉදිරියට යයි නම් ආරම්භක පූරකය නිසිලෙස " +"නොසැකසෙනු ඇත. ඊලඟ වතාවේ පරිගණකය ආරම්භ වන විට එය ආරම්භක කොටසේ පැවති ඕනෑම දෙයක් භාවිත " +"කරයි. ආරම්භක කොටසේ GRUB 2 පැරණි සංස්කරණයක් පවතී නම්. එය මොඩියුල හැසිරවීමේ හා වත්මන් සැකසුම් " +"ගොනුව භාවිතයේ අසමත් විය හැක." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"ඔබ දැනටමත් වෙනස් ආරම්භක පූරකයක් භාවිත කරයි නම් හා එය දිගටම භාවිත කිරීමට ඇවැසි නම්. හෝ මෙය " +"ආරම්භක පූරකයක් ඇවැසි නොවන විශේෂිත පරිසරයක් නම්. ඔබට කෙසේ හෝ ඉදිරියට යා හැක. එසේ නොවේ " +"නම්, ඔබට කොතැනක හෝ GRUB ස්ථාපනයට සිදුවේ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr " /boot/grub වෙතින් GRUB 2 ඉවත් කරන්නද?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "ඔබට /boot/grub වෙතින් සියළු GRUB 2 ගොනු ඉවත් කිරිමට ඇවැසිද?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "මෙය වෙනත් ආරම්භක පූරකයක් ස්ථාපනය කරන තුරු පද්ධතිය ආරම්භ කල නොහැකි කරයි." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "GRUB 2 වෙත හැරවීම අවසන් කරන්නද?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"තවමත් මෙම පද්ධතිය සතුව පැරණි GRUB ආරම්භක පූරකය ස්ථාපිතව පවතී. නමුත් පහත තැටි තුළ දැනට GRUB " +"2 ආරම්භක වාර්ථා ස්ථාපිතව ඇත." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"පැරණි GRUB භාවිතයේ නොපවතින ලෙසක් දිස්වේ. එනම් ඔබට එම තැටි වල GRUB 2 පිළිබිඹු යාවත් කිරීමට " +"හා GRUB 2 වෙත හැරවීම සම්පූර්ණ කිරීමට පැරණි GRUB ගොනු ඉවත්කිරීමට සිදුවන බවයි. ඒවා නව පැකේජ " +"සමඟ සහාය නොදක්වනු ඇති අතර ඔබේ පද්ධතිය නිසිලෙස ආරම්භ නොවනු ඇත." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"GRUB 2 ස්ථාපනය මගින් වෙනත් මෙහෙයුම් පද්ධතියක් මත මෙම ආරම්භක වාර්ථා නිර්මාණය කර නොමැති නම්, " +"ඔබ සාමාන්‍යෙන් GRUB 2 වෙත හැරවීම අවසන් කල යුතුයි." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux විධාන රේඛාව:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"පහත Linux විධානය /etc/default/grub හෝ පැරණි GRUB හි menu.lst හි 'kopt' පරාමිතියෙන් " +"උපුටාගන්නා ලදී. කරුණාකර එය නිවැරදි දැයි තහවුරු කරන්න, ඇවැසිනම් වෙනස්කම් කරන්න. විධාන රේඛාව " +"හිස්ව පැවතීමට ඉඩදෙයි. " + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "පෙරනිමි Linux විධාන රේඛාව:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"පහත යෙදුම පෙරනිමි මෙනු ඇතුළත් කිරීම් සඳහා Linux පරාමිතියක් ලෙස භාවිත වන නමුත් ගැලවීම් ප්‍රකාරයට " +"නොවේ." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD විධාන රේඛාව:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"පහත kFreeBSD විධානය /etc/default/grub හෝ පැරණි GRUB හි menu.lst හි 'kopt' " +"පරාමිතියෙන් උපුටාගන්නා ලදී. කරුණාකර එය නිවැරදි දැයි තහවුරු කරන්න, ඇවැසිනම් වෙනස්කම් කරන්න. " +"විධාන රේඛාව හිස්ව පැවතීමට ඉඩදෙයි. " + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD පෙරනිමි විධාන රේඛාව:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"පහත යෙදුම පෙරනිමි මෙනු ඇතුළත් කිරීම් සඳහා kFreeBSD පරාමිතියක් ලෙස භාවිත වන නමුත් ගැලවීම් " +"ප්‍රකාරයට නොවේ." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map නැවත ජනනය වී ඇත" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"ස්ථාවර උපකරණ නාම භාවිතය සඳහා /boot/grub/device.map නැවත ලියවිනි. බොහෝ අවස්ථාවල, " +"මෙය ඉදිරියේදී වෙනස් කිරීමට ඇවැසි නොවේ, තවද GRUB මගින් ජනිත ආරම්භක මෙනු ඇතුළත් කිරීම් වෙනස් " +"නොකල යුතුයි." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"කෙසේ වුවත් පද්ධතියේ තැටි එකකට වඩා පවතින බැවින්, පද්ධතිය පැරණි උපකරණ සිතියමක් මත රඳාපවතිනවා " +"විය හැක. කරුණාකර GRUB හි (hdN) ධාවක අංකකරණය මත රඳාපවතින රුචි ආරම්භක මෙනු ඇතුළත් කිරීම් " +"පවතීදැයි සොයන්න. ඇවැසිනම් ඒවා යාවත් කරන්න." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"මෙම පණිවුඩය ඔබට තේරුම්ගත නොහැකි නම් හෝ, කිසිඳු රුචි ආරම්භක මෙනු ඇතුළත්කිරිමක් නොමැති නම් ඔබට මෙම " +"පණිවුඩය මඟහැරිය හැක." --- grub2-1.99.orig/debian/po/zh_TW.po +++ grub2-1.99/debian/po/zh_TW.po @@ -0,0 +1,428 @@ +# Copyright (C) 2009 Tetralet +# This file is distributed under the same license as the grub2 package. +# +msgid "" +msgstr "" +"Project-Id-Version: grub2\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-08-01 12:05+0800\n" +"Last-Translator: Tetralet \n" +"Language-Team: Debian-user in Chinese [Big5] \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "是否使用來自 menu.list 的 chainload 項目?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "GRUB 升級程式已在 /boot/grub 裡找到了 GRUB Legacy 的設定。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"為了要能取代您系統上 Legacy 版的 GRUB,建議能修改 /boot/grub/menu.lst 來讓您" +"原本的 GRUB Legacy 設定能以 chainload 的方式啟動 GRUB 2。現在將要自動進行這個" +"步驟。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"在直接將 GRUB 2 安裝到 MBR(主要開機記錄)之前,建議您能同意在 menu.lst 裡先" +"以 chainload 的方式啟動 GRUB 2,以確認您新的 GRUB 2 設定的能正常運作。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "在將 GRUB 安裝至以下裝置時失敗了:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "在將 GRUB 安裝至以下裝置時失敗了:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "是否無論如何仍然繼續?但這樣話,您的電腦可能會無法正常開機。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB 安裝失敗了。再試一次?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"您也許可以把 GRUB 安裝至其它的裝置,只是您得設定好您的系統會從該裝置開機。否" +"則,將中止 GRUB Legacy 的升級。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "是否不安裝 GRUB 並繼續?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is an " +#| "earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"您決定了不將 GRUB 安裝至任何裝置。如果您繼續,開機程式可能未經適當得設定,且" +"當您電腦下次開機時,它會使用原本就位於開機磁區上的東西,而這可能會導至模組無" +"法載入,或是無法處理目前所使用的設定檔。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"如果您已在使用其它的開機程式,並且打算繼續使用;或是您的環境十分特殊所以不需" +"要開機程式,您可以不在意並繼續進行。否則,您應當找個地方安裝 GRUB。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "是否要結束 GRUB 2 的轉換過程?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"這個系統上仍保有之前安裝 GRUB Legacy 所遺留下來的檔案,但它已有 GRUB 2 安裝於" +"以下磁碟的開機磁區:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"這很可能表示再也用不到 GRUB Legacy 了,您應該替而升級這些裝置上的 GRUB 2 影像" +"檔,並移除這些 GRUB Legacy 所遺留下來的檔案,以結束 GRUB 2 的轉換過程。如果您" +"沒升級這些 GRUB 2 影像檔的話,它們可能和新的套件不相容,且會導致您的系統無法" +"正常開機。" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"您應當逐漸得結束 GRUB 2 的轉換過程,除非這些開機記錄是由其它的作業系統所安裝" +"的 GRUB 2 建立的。" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux 命令列:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"以下的 Linux 命令列是由 /etc/default/grub,或是由 GRUB Legacy 的 menu.lst 中" +"的 `kopt' 參數所擷取出來的。請確認它是否正確,若有必要請加以修改。" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linux 預設命令列:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"以下的字串將會用在預設的選單項目中做為 Linux 參數,但不會用於回復模式。" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD 命令列:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"以下的 kFreeBSD 命令列是由 /etc/default/grub,或是由 GRUB Legacy 的 menu.lst " +"中的 `kopt' 參數所擷取出來的。請確認它是否正確,若有必要請加以修改。" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD 預設命令列:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"以下的字串將會用在預設的選單項目中做為 kFreeBSD 參數,但不會用於回復模式。" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "已重新產生 /boot/grub/device.map" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"/boot/grub/device.map 這個檔案已使用不變的裝置名稱重新寫入。在大多數的狀況之" +"下,如此可以有效得避免在日後還會有什麼變動,且也不會影響到 GRUB 所產生的選單" +"項目。" + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"但由於您的系統上不只安裝了一顆硬碟,舊的裝置對應表可能還在使用中。請檢視您是" +"否有還在使用著 GRUB 的 (hdN) 磁碟命名規則的自訂開機項目,若有必要請加以更新。" + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"如果您根本搞不懂這些訊息在講些什麼,或著您沒有任何自訂的開機項目,您可以忽略" +"這個訊息。" + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "不管您要採取何種方式,當您想讓 GRUB 2 可以由 MBR 直接啟動的話,您可以(以 " +#~ "root 身份)執行以下的指令:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "GRUB 安裝失敗了。是否繼續?" --- grub2-1.99.orig/debian/po/uk.po +++ grub2-1.99/debian/po/uk.po @@ -0,0 +1,417 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Олександр Яценко, 2010. +# Yatsenko Alexandr , 2010. +# Anton Gladky , 2011. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-12-09 23:57+0200\n" +"Last-Translator: Yatsenko Alexandr \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Завантажити послідовно з menu.lst? " + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "Скрипт оновлення GRUB знайшов попередню Legacy версію в /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Перед повною заміною попередньої версії GRUB у вашій системі рекомендовано " +"приєднати GRUB 2 як варіант завантаження у наявному меню GRUB Legacy. Цей " +"крок може бути виконано автоматично зараз." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Рекомендовано спробувати послідовне завантаження GRUB 2 з menu.lst щоб " +"переконатися, що ваш новий GRUB 2 функціонує, до того як встановити його " +"напряму до MBR (Головного завантажувального сектору)" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Залежно від вашого бажання, можна замінити старий завантажувач в MBR на GRUB " +"2 пізніше увівши наступну команду користувачем root:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Дискові пристрої для встановлення GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Пакунок grub-pc було оновлено. Це меню дозволить вам обрати дискові пристрої " +"з яких grub-install буде автоматично запускатися." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Автоматичний запуск grub-install рекомендовано в більшості випадків, щоб " +"запобігти розсинхронізації встановленого базового ядра GRUB з його модулями " +"чи grub.cfg." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Якщо ви не знаєте напевне, який дисковий пристрій призначено " +"завантажувальним у вашому BIOS, можете встановити GRUB на всі наявні." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Увага: є можливим встановити GRUB до завантажувальних записів дискових " +"розділів і деякі підходящі розділи запропоновано нижче. Проте, це заставить " +"GRUB вжити механізм блокування, що зробить його менш надійним, а тому не " +"рекомендується." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"Завантажувач GRUB раніше було встановлено на дисковий пристрій, що наразі " +"відсутній, або його унікальний ідентифікатор з якихось причин було змінено. " +"Важливо переконатися, що встановлене базове ядро GRUB відповідає наявним " +"модулям та grub.cfg. Будь ласка, перевірте знову чи GRUB записано на " +"відповідні завантажувальні дискові розділи." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} МБ; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} МБ; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Не вдалося записати GRUB до завантажувального пристрою. Продовжити?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Не вдалося встановити GRUB до наступних дискових пристроїв:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Ви всеодно бажаєте продовжити? Не виключено, що ваш комп'ютер не зможе " +"завантажитися нормально." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"Не вдалося записати GRUB до завантажувальних пристроїв. Спробувати знову?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Ви можете встановити GRUB до іншого завантажувального пристрою, але для " +"цього потрібно переконатися, що система завантажиться з нього. Інакше, " +"оновлення з GRUB Legacy не буде виконано." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Продовжити без встановлення GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Ви обрали не встановлювати GRUB на жоден пристрій. Якщо так продовжувати, " +"завантажувач може бути не до кінця налаштований і при наступному запуску " +"комп'ютера буде використано те, що є наразі у завантажувальному секторі. " +"Якщо там виявиться попередня версія GRUB 2, вона, можливо, не зможе " +"завантажити модулі чи опрацювати поточний конфігураційний файл." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Якщо ви використовуєте інший завантажувач і хочете залишити його, або маєте " +"особливе оточення, де немає потреби в завантажувачі, можете продовжити, " +"інакше маєте встановити GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "Вилучити GRUB 2 з /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "Ви бажаєте вилучити всі файли GRUB 2 з /boot/grub?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Ця дія зробить систему не здатною завантажитися, доки інший завантажувач не " +"буде встановлено." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Завершити перехід до GRUB 2 зараз?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Ваша система містить встановлені файли з GRUB Legacy, але на наступних " +"дисках присутній завантажувач GRUB 2:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Схоже, GRUB 2 більше не використовується, тому ви можете замінити його, " +"оновивши образи GRUB 2 на цих дисках та завершити перехід до GRUB 2, " +"вилучивши старі файли від GRUB Legacy. Якщо ви не оновите ці образи, вони " +"можуть бути несумісні з новими пакунками і ваша система не зможе нормально " +"завантажуватися." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Ви маєте повністю завершити перехід на GRUB 2, якщо ці завантажувальні " +"записи було створено GRUB 2 іншої операційної системи." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Рядок параметрів ядра Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Наступний рядок параметрів ядра Linux було взято із /etc/default/grub чи з " +"параметру 'kopt' в menu.lst із GRUB Legacy. Перевірте будь ласка його " +"правильність і, за потреби, внесіть зміни. Рядок параметрів ядра може бути " +"порожнім." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Типовий рядок параметрів ядра Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Даний рядок буде використано як параметри ядра Linux для типового пункту " +"меню, проте не для режиму відновлення." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Рядок параметрів ядра kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Наступний рядок параметрів ядра kFreeBSD було взято із /etc/default/grub чи " +"з параметру 'kopt' в menu.lst із GRUB Legacy. Перевірте будь ласка його " +"правильність і, за потреби, внесіть зміни. Рядок параметрів ядра може бути " +"порожнім." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Типовий рядок параметрів ядра kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Даний рядок буде використано як параметри ядра kFreeBSD для типового пункту " +"меню, проте не для режиму відновлення." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map було створено наново" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Файл /boot/grub/device.map було переписано з використанням сталих імен " +"пристроїв. В більшості випадків це значно зменшить потребу змінювати його в " +"майбутньому і пункти меню завантажувача GRUB не будуть змінюватися." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Якщо в системі наявний більше, ніж один дисковий пристрій, можливо вона " +"налаштована на стару карту пристроїв. Будь ласка, перевірте, чи не " +"використано в користувацьких пунктах меню завантажувача нумерації дисків " +"типу hdN, та оновіть їх, якщо потрібно." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Якщо ви не розумієте цього повідомлення, або не маєте користувацьких пунктів " +"меню завантажувача, проігноруйте це повідомлення." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "В іншому випадку, якщо ви бажаєте завантажити GRUB 2 прямо до MBR, ви " +#~ "можете зробити це, задавши (з правами root) наступну команду:" --- grub2-1.99.orig/debian/po/el.po +++ grub2-1.99/debian/po/el.po @@ -0,0 +1,481 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Emmanuel Galatoulas , 2010. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2010-11-24 21:33+0200\n" +"Last-Translator: Emmanuel Galatoulas \n" +"Language-Team: Greek \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "Να γίνει αλυσιδωτή φόρτωση από το αρχείο menu.lst;" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Τα σενάρια αναβάθμισης του GRUB έχουν εντοπίσει αρχεία ρύθμισης του GRUB " +"Legacy στον κατάλογο /boot/grub." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "In order to replace the Legacy version of GRUB in your system, it is " +#| "recommended that /boot/grub/menu.lst is adjusted to chainload GRUB 2 from " +#| "your existing GRUB Legacy setup. This step may be automaticaly performed " +#| "now." +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Για να αντικαταστήσετε την έκδοση Legacy του GRUB στο σύστημά σας, " +"συνιστάται η προσαρμογή του αρχείου /boot/grub/menu.lst ώστε να φορτώνεται " +"αλυσιδωτά το GRUB 2 μέσα από την υπάρχουσα ρύθμιση του GRUB Legacy. Το βήμα " +"αυτό μπορεί να πραγματοποιηθεί τώρα αυτόματα." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +#, fuzzy +#| msgid "" +#| "It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +#| "verify that your new GRUB 2 setup is functional for you, before you " +#| "install it directly to your MBR (Master Boot Record)." +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Συνιστάται η αποδοχή της αλυσιδωτής φόρτωσης του GRUB 2 από το αρχείο menu." +"lst και η επαλήθευση της λειτουργικότητας της νέας ρύθμισης του GRUB 2 πριν " +"να το εγκαταστήσετε απευθείας στο MBR (Master Boot Record)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +#, fuzzy +#| msgid "GRUB failed to install to the following devices:" +msgid "GRUB install devices:" +msgstr "Απέτυχε η εγκατάσταση του GRUB στις ακόλουθες συσκευές:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +#, fuzzy +#| msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +#, fuzzy +#| msgid "GRUB installation failed. Continue?" +msgid "Writing GRUB to boot device failed - continue?" +msgstr "Η εγκατάσταση του GRUB απέτυχε. Να συνεχίσω;" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Απέτυχε η εγκατάσταση του GRUB στις ακόλουθες συσκευές:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +#, fuzzy +#| msgid "" +#| "Do you want to continue anyway? If you do, your computer may not start " +#| "up properly." +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Θέλετε να συνεχίσετε έτσι κι αλλιώς; Αν ναι, είναι πιθανόν ο υπολογιστής σας " +"να μην μπορεί να εκκινηθεί κανονικά." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "GRUB installation failed. Try again?" +msgid "Writing GRUB to boot device failed - try again?" +msgstr "Η εγκατάσταση του GRUB απέτυχε. Θα ξαναπροσπαθήσετε;" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +#, fuzzy +#| msgid "" +#| "You may be able to install GRUB to some other device, although you should " +#| "check that your system will boot from that device. Otherwise, the " +#| "upgrade from GRUB Legacy will be cancelled." +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Είναι πιθανόν να εγκαταστήσετε το GRUB σε κάποια άλλη συσκευή, αλλά θα " +"πρέπει να ελέγξετε ότι το σύστημά σας μπορεί να εκκινηθεί από αυτή τη " +"συσκευή. Διαφορετικά, η αναβάάθμιση από την έκδοση Legacy του GRUB θα " +"ακυρωθεί." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "Συνέχεια χωρίς εγκατάσταση του GRUB;" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "You chose not to install GRUB to any devices. If you continue, the boot " +#| "loader may not be properly configured, and when your computer next starts " +#| "up it will use whatever was previously in the boot sector. If there is " +#| "an earlier version of GRUB 2 in the boot sector, it may be unable to load " +#| "modules or handle the current configuration file." +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Επιλέξατε να μην εγκαταστήσετε το GRUB σε οποιαδήποτε συσκευή. Αν " +"συνεχίσετε, ο φορτωτής εκκίνησης πιθανόν να μην έχει ρυθμιστεί σωστά και " +"στην επανεκκίνηση του υπολογιστή σας θα χρησιμοποιήσει οτιδήποτε υπήρχε πριν " +"στον τομέα εκκίνησης. Αν υπάρχει μια προηγούμενη έκδοση του GRUB 2 στον " +"τομέα εκκίνησης, πιθανόν να μην μπορεί να φορτώσει κάποια αρθρώματα ή να " +"χειριστεί το τρέχον αρχείο ρυθμίσεων." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +#, fuzzy +#| msgid "" +#| "If you are already running a different boot loader and want to carry on " +#| "doing so, or if this is a special environment where you do not need a " +#| "boot loader, then you should continue anyway. Otherwise, you should " +#| "install GRUB somewhere." +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Αν έχετε ήδη έναν διαφορετικό φορτωτή εκκίνησης και θέλετε να συνεχίσετε με " +"αυτόν ή αν αυτό το σύστημα είναι ένα ειδικό περιβάλλον στο οποίο δεν " +"χρειάζεστε έναν φορτωτή εκκίνησης, τότε θα πρέπει να συνεχίσετε έτσι κι " +"αλλιώς. Διαφορετικά, θα πρέπει να εγκαταστήσετε κάπου το GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "Να τελειώσει τώρα η μετατροπή σε GRUB 2;" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Το σύστημα έχει ακόμα εγκατεστημένα αρχεία από τον φορτωτή εκκίνησης GRUB " +"Legacy, αλλά έχει τώρα επίσης εγκατεστημένα αρχεία εκκίνησης του GRUB 2 " +"στους εξής δίσκους:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +#, fuzzy +#| msgid "" +#| "It seems likely that GRUB Legacy is no longer in use, and that you should " +#| "instead upgrade the GRUB 2 images on these disks and finish the " +#| "conversion to GRUB 2 by removing old GRUB Legacy files. If you do not " +#| "upgrade these GRUB 2 images, then they may be incompatible with the new " +#| "packages and cause your system to stop booting properly." +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Φαίνεται πιθανόν ότι ο φορτωτής εκκίνησης GRUB Legacy δεν είναι πια σε χρήση " +"και ότι θα πρέπει να κάνετε την αναβάθμιση σε GRUB 2 στους παρακάτω δίσκους " +"και να ολοκληρώσετε την μετατροπή στο GRUB 2 αφαιρώντας οποιαδήποτε " +"παλιότερα αρχεία του GRUB Legacy. Αν δεν αναβαθμίσετε αυτές τις εικόνες του " +"GRUB 2, τότε πιθανόν να είναι ασύμβατες με τα νεώτερα πακέτα, με αποτέλεσμα " +"να σταματήσει η κανονική εκκίνηση του συστήματός σας." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Θα πρέπει γενικά να τελειώσετε την μετατροπή σε GRUB 2 εκτός κι αν αυτά τα " +"αρχεία εκκίνησης έχουν δημιουργηθεί από μια εγκατάσταση του GRUB 2 σε ένα " +"άλλο λειτουργικό σύστημα." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Γραμμή εντολής Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +#, fuzzy +#| msgid "" +#| "The following Linux command line was extracted from /etc/default/grub or " +#| "the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +#| "correct, and modify it if necessary." +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Η επόμενη γραμμή εντολών για Linux έχει εξαχθεί από το αρχείο /etc/default/" +"grub ή από την παράμετρο `kopt' στο αρχείο menu.lst του GRUB Legacy. " +"Παρακαλώ επιβεβαιώστε ότι είναι ορθή και τροποποιήστε την αν είναι " +"απαραίτητο." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Προκαθορισμένη γραμμή εντολών Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Η ακόλουθη συμβολοσειρά θα χρησιμοποιηθεί για τις παραμέτρους Linux στην " +"προκαθορισμένη είσοδο του μενού εκκίνησης αλλά όχι για την κατάσταση " +"διάσωσης (rescue mode)." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Γραμμή εντολών kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +#, fuzzy +#| msgid "" +#| "The following kFreeBSD command line was extracted from /etc/default/grub " +#| "or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it " +#| "is correct, and modify it if necessary." +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Η επόμενη γραμμή εντολών του kFreeBSD έχει εξαχθεί από το αρχείο /etc/" +"default/grub ή από την παράμετρο `kopt' στο αρχείο menu.lst του GRUB " +"Legacy. Παρακαλώ επιβεβαιώστε ότι είναι ορθή και τροποποιήστε την αν είναι " +"απαραίτητο." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Προκαθορισμένη γραμμή εντολών kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Η ακόλουθη συμβολοσειρά θα χρησιμοποιηθεί για τις παραμέτρους kFreeBSD στην " +"προκαθορισμένη είσοδο του μενού εκκίνησης αλλά όχι για την κατάσταση " +"διάσωσης (rescue mode)." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "Το αρχείο /boot/grub/device.map έχει αναδημιουργηθεί" + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "The file /boot/grub/device.map has been rewritten to use stable device " +#| "names. In most cases, this should significantly reduce the need to " +#| "change it in future, and boot menu entries generated by GRUB should not " +#| "be affected." +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"Το αρχείο /boot/grub/device.map έχει ξαναγραφεί ώστε να χρησιμοποιεί έγκυρα " +"και σταθερά ονόματα συσκευών. Στις περισσότερες περιπτώσεις αυτό θα μειώσει " +"αισθητά την ανάγκη αλλαγής του στο μέλλον, ενώ τα στοιχεία του μενού " +"εκκίνησης που παράγονται από το GRUB δεν θα επηρεάζονται." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "However, since you have more than one disk in your system, it is possible " +#| "that you were depending on the old device map. Please check whether you " +#| "have any custom boot menu entries that rely on GRUB's (hdN) drive " +#| "numbering, and update them if necessary." +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Παρόλα αυτά και αφού έχετε περισσότερους από έναν δίσκους στο σύστημά σας, " +"είναι πιθανόν η δημιουργία του να εξαρτάται από το παλιότερο αρχείο συσκεών " +"device.map. Παρακαλώ ελέγξτε αν υπάρχουν οποιεσδήποτε ειδικές είσοδοι στο " +"μενού εκκίνησης που να στηρίζονται στην αρίθμηση των συσκευών από το GRUB " +"(hdN) και ενημερώστε τις αν είναι απαραίτητο." + +#. Type: note +#. Description +#: ../templates.in:5001 +#, fuzzy +#| msgid "" +#| "If you do not understand this message, or if you do not have any custom " +#| "boot menu entries, you can ignore this message." +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Αν δεν καταλαβαίνετε το παρόν μήνυμα, ή αν δεν έχετε οποιεσδήποτε ειδικές " +"εισόδους στο μενού εκκίνησης, μπορείτε να το αγνοήσετε." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "Σε οποιαδήποτε περίπτωση όποτε θελήσετε να φορτωθεί το GRUB 2 απευθείας " +#~ "από το MBR μπορείτε να το κάνετε τρέχοντας (ως χρήστης root) την ακόλουθη " +#~ "εντολή:" --- grub2-1.99.orig/debian/po/fa.po +++ grub2-1.99/debian/po/fa.po @@ -0,0 +1,411 @@ +msgid "" +msgstr "" +"Project-Id-Version: fa\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Behrad Eslamifar \n" +"Language-Team: debian-l10n-persian \n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Persian\n" +"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" +"X-Poedit-SourceCharset: utf-8\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "بارگزاری به صورت Chainload از menu.lst؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"اسکریپت ارتقاء GRUB, نسخه قدیمی GRUB‌ نصب شده در /boot/grub را پیدا کرده است." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"برای جایگزینی نسخه قدیمی GRUB در سیستم شما، پیشنهاد می‌شود /boot/grub/menu." +"lst تنظیم گردد تا یک تصویر بوت‌ GRUB 2 از چینش قدیمی GRUB کنونی بارگذاری " +"شود . اکنون این مرحله به صورت خودکار انجام می شود." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"توصیه می‌شود که chainloading گراب۲ از menu.lst را بپذیرید، و بازبینی کنید که " +"چینش جدید GRUB 2 قبل از اینکه بر روی MBR (Master Boot Record) نوشته شود کار " +"می‌کند." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"تصمیم شما هر چه باشد، می‌توانید بعداً تصویر قدیم MBR را با GRUB 2 با فرمان زیر " +"توسط کاربر ریشه جایگزین کنید:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "دستگاه‌های نصب گراب:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"بستهٔ grub-pc در حال ارتقاء است. این منو به شما اجازه می‌دهد که هر یک از " +"دستگاه‌ها را، در صورت وجود، که مایلید grub-install به صورت خودکار برایش اجرا " +"گردد را انتخاب کنید." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"اجرای خودکار grub-install در بیشتر مواقع، برای جلوگیری خارج‌شدن هستهٔ تصویر " +"گراب از sync با ماژولهای گراب یا grub.cfg توصیه‌شده است." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"اگر مطمئن نیستید کدام درایو به عنوان درایو بوت توسط BIOS تعیین شده است، اغلب " +"ایدهٔ خوبی است که گراب را بر روی همهٔ آنها نصب کنید." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"توجه: امکان دارد که گراب را در رکوردهای بوت پارتیشن نیز نصب کنید، و برخی از " +"پارتیشن‌های مناسب نیز اینجا پیشنهاد شده است. اگرچه، این گراب را مجبور می‌کند " +"که از مکانیزم blocklist استفاده کند که قابل اطمینان بودن آنرا کاهش می‌دهد و " +"بنابراین توصیه نمی‌گردد." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"بارگذار بوت گراب قبلاً در دیسکی نصب شده است که دیگر در دسترس نیست، یا unique " +"identifier آن بنا به دلیلی تغییر کرده است. مهم است که اطمینان حاصل کنید که " +"نصویر هستهٔ گراب نصب شده در sync با ماژول‌های گراب و grub.cfg باقی بماند. لطفاً " +"دوباره بررسی کنید تا مطمئن گردید که گراب در دستگاه‌های بوت مناسب نوشته شده " +"است." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "نصب GRUB روی ابزار بوت با شکست مواجه شد - ادامه می‌دهید؟" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB نتوانست که تجهیزات مورد نظر را نصب کند." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"آیا شما می‌خواهید در هر حال ادامه دهید ؟ اگر ادامه دهید، ممکن است که کامپیوتر " +"شما به طور مناسب باید بالا نیاید." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "نصب GRUB روی دستگاه بوت با شکست مواجه شد - دوباره امتحان می‌کنید؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"شما ممکن است قادر باشید که GRUB را بر روی بعضی از ابزارهای دیگر نیز نصب " +"کنید ، هرچند که شما باید چک کنید که سیستم شما قادر به راه‌اندازی شدن با آن " +"ابزار هست یا خیر. وگرنه ، ارتقا گراب قدیمی متوقف خواهد شد." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "آیا بدون نصب کردن GRUB ، ادامه می دهید ؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"شما نصب GRUB را برای هیچ ابزاری انتخاب نکرده‌اید. اگر ادامه دهید، ممکن است که " +"راه‌انداز به درستی تنظیم نشده باشد، و هنگام بالا آمدن بعدی این کامپیوتر، از " +"آن چه که قبلاً بر روی بوت سکتور بوده است استفاده می‌کند. اگر نسخهٔ قدیمی‌تری از " +"گراب۲ بر روی بوت سکتور وجود دارد، ممکن است که قادر نباشد ماژول‌ها را بارگذاری " +"کند و یا پیکربندی کنونی فایل را به کار بندد." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"اگر شما از راه‌انداز بوت دیگری استفاده می‌کنید و می‌خواهید که با همان ادامه " +"دهید، یا اگر اینجا یک محیط خاص است که شما به راه‌انداز بوت نیاز ندارید، پس " +"می‌بایست به هر ترتیب ادامه دهید. در غیر این‌صورت، باید GRUB را در جایی نصب " +"کنید." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "GRUB 2 از /boot/grub برداشته شود؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "آیا می‌خواهید همهٔ فایل‌های GRUB 2 از /boot/grub برداشته شود؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"این باعث غیر قابل بوت‌شدن سیستم می‌شود مگر آنکه بارگذار بوت دیگری نصب است." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "ارتباط با GRUB۲ اکنون پایان یابد؟" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"این سیستم هنوز فایل هایی مربوط به GRUB قدیمی را به صورت نصب شده دارد ، اما " +"اکنون بوت رکورد های GRUB2 بر روی این دیسک ها نصب شده است :" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"به نظر می‌آید که احتمالاً GRUB قدیمی دیگر در استفاده نیست، و شما می‌بایست " +"تصاویر GRUB2 را بر روی این دیسک‌ها ارتقاء دهید و با پاک کردن فایل‌های گراب " +"قدیمی تبدیل به GRUB2 را به اتمام برسانید. اگر شما این تصاویر GRUB2 را ارتقا " +"ندهید، ممکن است این تصاویر با بسته‌های جدید ناسازگار باشند و باعث جلوگیری از " +"راه‌اندازی مناسب سیستم شوند." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"شما باید معمولاً به ارتباط GRUB2 پایان دهید، مگر آنکه این رکورد های بوت ساخته " +"شده توسط GRUB2 مربوط به سیستم عامل های دیگر باشد." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "خط فرمان لینوکس:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"خط فرمان لینوکس ذیل از /etc/default/grub یا پارامتر های `kopt' در فایل menu." +"lst از گراب قدیمی استخراج شده است. لطفاً صحت آن را بررسی کنید، و در صورت لزوم " +"آن را تغییردهید. این خط فرمان می‌تواند خالی باشد." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "خط فرمان پیش فرض لینوکس:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"این رشته به عنوان یکی از پارامتر های لینوکس برای منوی پیش فرض استفاده خواهد " +"شد و نه برای حالت بازیابی." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "خط فرمان kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"خط فرمان kFreeBSD ذیل از /etc/default/grub یا پارامتر های `kopt' در فایل " +"menu.lst از گراب قدیمی استخراج شده است. لطفاً صحت آن را بررسی کنید، و در صورت " +"لزوم آن را تغییردهید. این خط فرمان می‌تواند خالی باشد." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "خط فرمان پیش فرض kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"این رشته به عنوان یکی از پارامتر های kFreeBSD برای منوی پیش فرض استفاده " +"خواهد شد و نه برای حالت بازیابی." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map بازسازی شده است." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"فایل /boot/grub/device.map به منظور استفاده از نام تجهیزات دائمی و پایدار، " +"بازنویسی شده است. در بیشتر موارد، این می‌بایست به شدت نیاز به تغییر درآینده " +"را کاهش دهد، و مدخل‌های منوی بوت ایجاد شده توسط GRUB نبایست تحت تأثیر قرار " +"گرفته باشد." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"اگرچه، از آنجا که بیش از یک دیسک در سیستم موجود است، ممکن است سیستم به " +"device map قدیمی وابسته باشد. لطفاً بررسی کنید اگر مدخل‌های سفارشی بوت که روی " +"نام‌گذاری درایو (hdN) گراب تکیه دارند وجود داشته باشند، و در صورت نیاز آنها " +"را به روز نمائید." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"اگر این پیام را متوجه نمی‌شوید، یا اگر هیچ مدخل سفارشی منوی بوت وجود ندارد، " +"می‌توانید این پیام را نادیده بگیرید." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "در هر صورت, هر زمان که شما بخواهید مستقیماً GRUB 2 را از MBR بارگزاری " +#~ "کنید, می توانید این کار را با اجرای دستوری که در ادامه آمده, تحت کاربر " +#~ "ریشه, انجام دهید:" --- grub2-1.99.orig/debian/po/tr.po +++ grub2-1.99/debian/po/tr.po @@ -0,0 +1,413 @@ +# Turkish messages for debian-installer. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the debian-installer package. +# Atila KOÇ , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: debian-installer\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-01-23 01:09+0200\n" +"Last-Translator: Atila KOÇ \n" +"Language-Team: Debian L10n Turkish \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst dosyasından zincirleme yükleme yapılsın mı?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"GRUB güncelleme betikleri /boot/grub altında eski bir GRUB kurulumu algıladı." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Sisteminizdeki eski sürüm GRUB kurulumunu değiştirmek için, /boot/grub/menu." +"lst dosyasının bir GRUB 2 önyükleme görüntüsünü varolan eski GRUB " +"kurulumundan yüklenmesine olanak tanıyacak şekilde değiştirilmesi " +"gerekmektedir. Bu adım şimdi kendiliğinden gerçekleştirilebilir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Yeni GRUB 2 kurulumu Ana Yükleme Kaydı'na (MBR) yazılmadan önce menu.lst'den " +"GRUB 2 zincirleme önyüklemesini kabul etmeniz ve GRUB 2 kurulumunun " +"çalıştığını doğrulamanız önerilir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Seçiminiz ne olursa olsun, root kimliği ile aşağıdaki komutu işleterek eski " +"MBR görüntüsünü GRUB 2 ile değiştirebilirsiniz:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB kurulum aygıtları:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc paketi yükseltiliyor. Bu menü, eğer varsa, grub-kur'un (grub-" +"install) hangi aygıtlar için kendiliğinden çalışmasını seçmenize olanak " +"tanır." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"GRUB çekirdek görüntüsünün kurulmuş GRUB modülleri ya da grub.cfg ile " +"eşitliğinin/uyumunun bozulmasını engellemek için, çoğu durumda grub-kur'un " +"(grub-install) kendiliğinden çalıştırılması önerilir." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Eğer hangi sürücünün BIOS'unuz tarafından yükleme sürücüsü olarak " +"belirlendiğinden emin değilseniz, GRUB'u tüm sürücülere kurmak yerinde " +"olacaktır." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Not: GRUB'u disk bölümlerinin yükleme kayıtlarına yüklemek de olanak " +"dahilindedir ve duruma uygun bazı bölümler burada listelenmiştir. Öte " +"yandan, bu seçim GRUB'u daha az güvenilir kılan engelleme listesi " +"(blocklist) mekanizmasını kullanmaya zorlayacağından önerilmemektedir." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"GRUB önyükleyici şu anda var olmayan ya da benzersiz tanımlayıcısı bir " +"şekilde değişmiş bir diske kurulmuş durumdadır. Bu önyükleyicinin GRUB " +"çekirdek görüntüsü ve grub.cfg ile uyum içinde olduğundan emin olmak " +"önemlidir. Bu nedenle GRUB'un doğru önyükleme aygıtlarına yazılmış " +"olduğundan emin olunuz." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" +"GRUB'u önyükleme aygıtına yazma işlemi başarısız oldu. Yine de devam edilsin " +"mi?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "Aşağıdaki aygıtlara GRUB kurulumu başarısız oldu:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"Yine de devam edilsin mi? Devam edilirse bilgisayarınız düzgün " +"başlamayabilir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"GRUB'u önyükleme aygıtına yazma işlemi başarısız oldu. Tekrar denensin mi?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"GRUB'u başka bir aygıta kurma seçeneğiniz olabilir, bununla birlikte " +"sisteminizin o aygıttan başlayabileceğini denetlemeniz gerekmektedir. Aksi " +"durumda, eski GRUB'un yükseltilmesi yapılmayacaktır." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB kurulmadan devam edilsin mi?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"GRUB'u hiçbir aygıta kurmamayı seçtiniz. Devam ederseniz önyükleyici düzgün " +"yapılandırılmayabilir ve bu bilgisayar bir sonraki açılışında önyükleme " +"bölümünde daha önceden ne varsa onu kullanır. Eger önyükleme bölümünde GRUB " +"2'nin daha önceki bir sürümü var ise, güncel yapılandırma dosyasını " +"kullanamayabilir ya da birimleri yükleyemeyebilir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Şu anda başka bir önyükleyici kullanıyorsanız ve kullanmaya da devam " +"edecekseniz ya da bu sizin bir önyükleniciye gerek duymadığınız özel bir " +"ortam ise bu şekilde devam edebilirsiniz. Aksi durumda, GRUB'u bir yere " +"yüklemek zorundasınız." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "/boot/grub yolundan GRUB 2 kaldırılsın mı?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "" +"/boot/grub yolundan bütün GRUB 2 dosyalarının kaldırılmasını istiyor musunuz?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Başka bir önyükleyici kurulmadıysa yapılan bu işlem sistemi başlatılamaz " +"kılacaktır." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "GRUB 2'ye dönüşüm bitirilsin mi?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Bu sistemde hala eski GRUB kurulumundan kalan önyükleme dosyaları var, aynı " +"zamanda da şu disklere yazılmış GRUB 2 önyükleme kayıtlarına sahip:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Göründüğü kadarı ile eski GRUB kurulumu artık kullanılmıyor, dolayısıyla bu " +"disklerde eski GRUB dosyalarını kaldırıp GRUB 2 görüntülerine yükseltme " +"yaparak dönüşümü tamamlamalısınız. Eğer bunları GRUB 2 görüntülerine " +"yükseltmezseniz, yeni paketlerle uyum sorunları yaşanabilir ve bu durum " +"sisteminizin gerektiği gibi başlamasına engel olabilir." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Bu önyükleme kayıtları başka bir işletim sistemindeki GRUB 2 kurulumu " +"tarafından yaratılmadığı sürece GRUB 2 kurulumunu tamamlamanız gerekmektedir." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linux komut satırı:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Aşağıdaki Linux komut satırı /etc/default/grub'dan ya da eski GRUB menu.lst " +"dosyasındaki 'kopt' parametresinden türetilmiştir. Doğruluğundan emin olun " +"ya da düzeltin. Komut satırını boş bırakabilirsiniz." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Öntanımlı Linux komut satırı:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"Aşağıdaki dizge öntanımlı menü girişinin Linux parametreleri olarak " +"kullanılacak fakat kurtarma kipi için kullanılmayacak." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD komut satırı:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"Aşağıdaki kFreeBSD komut satırı /etc/default/grub'dan ya da eski GRUB menu." +"lst dosyasındaki 'kopt' parametresinden türetilmiştir. Doğruluğundan emin " +"olun ya da düzeltin. Komut satırını boş bırakabilirsiniz." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Öntanımlı kFreeBSD komut satırı:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"Aşağıdaki dizge öntanımlı menü girişinin kFreeBSD parametreleri olarak " +"kullanılacak fakat kurtarma kipi için kullanılmayacak." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map dosyası yeniden oluşturuldu" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"/boot/grub/device.map dosyası kararlı aygıt isimlerini kullanacak şekilde " +"yeniden yazıldı. Bu işlem çoğu durumda ileride gerekebilecek bir düzenleme " +"gereksinimini ciddi biçimde azaltır ve GRUB tarafından yaratılan önyükleme " +"menüsü seçeneklerini etkilemez." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Öte yandan sistemde birden fazla disk olduğu için, sistemin eski aygıt " +"eşlemine bağlı kalmış olması olasıdır. GRUB'un (hdN) sürücü " +"numaralandırmasını kullanan herhangi bir özgün önyükleme menü şeçenegi olup " +"olmadığını denetleyin ve gerekirse bunları güncelleyin." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Bu uyarıyı anlayamazsanız ya da herhangi bir özgün önyükleme menü seçeneği " +"yok ise, bu uyarıyı gözardı edebilirsiniz." --- grub2-1.99.orig/debian/po/gu.po +++ grub2-1.99/debian/po/gu.po @@ -0,0 +1,393 @@ +# Gujarati translation of grub2. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Kartik Mistry , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: grub-gu\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-03-04 09:56+0530\n" +"Last-Translator: Kartik Mistry \n" +"Language-Team: Gujarati \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst માંથી ચેઈનલોડ કરશો?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "GRUB સુધારાની સ્ક્રિપ્ટએ /boot/grub માં પરંપરાગત GRUB ગોઠવણીની જાણ મેળવી છે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"તમારી સિસ્ટમમાંથી પરંપરાગત GRUB ને બદલવા માટે, એ સલાહભર્યું છે કે /boot/grub/menu.lst " +"એ GRUB 2 બૂટ ઈમેજ લાવવા માટે તમારી હાલના પરંપરાગત GRUB ગોઠવણીમાંથી ગોઠવેલ હોય. આ " +"ગોઠવણી હવે પછી આપમેળે રજૂ કરવામાં આવશે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"એ સલાહભર્યું છે કે તમે menu.lst માંથી GRUB 2 ચેઈનલોડિંગ સ્વિકારો, અને ચકાસો કે નવી GRUB " +"2 ગોઠવણી MBR (માસ્ટર બૂટ રેકોર્ડ) માં લખાય તે પહેલાં કામ કરી રહી છે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"તમારો નિર્ણય કંઈ પણ હોય, તમે પાછળથી નીચેના આદેશનો રુટ તરીકે ઉપયોગ કરીને જૂની MBR ઈમેજને " +"GRUB 2 વડે બદલી શકો છો." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "GRUB સ્થાપન ઉપકરણો:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"grub-pc પેકેજ સુધારાઈ રહ્યું છે. આ મેનુ તમને કયા ઉપકરણોમાં તમે grub-install આપમેળે સ્થાપિત " +"કરવા માટે ચલાવવા માંગો છો તે પસંદગી કરવા દે છે, જો કોઈ હોય તો." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"સ્થાપિત GRUB મુખ્ય ઈમેજને GRUB મોડ્યુલ્સ અથવા grub.cfg સાથે અસંગત ન થવા દેવા માટે, grub-" +"install આપમેળે ચલાવવું એ મોટાભાગની પરિસ્થિતિઓમાં સલાહભર્યું છે." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"જો તમે અચોક્કસ હોવ કે તમારા BIOS વડે કયું ડ્રાઈવ એ બૂટ ડ્રાઈવ તરીકે ગોઠવેલ છે, એ સારો " +"વિચાર છે કે તે દરેક ઉપર GRUB સ્થાપિત કરવામાં આવે." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"નોંધ: GRUB ને પાર્ટિશન બૂટ રેકોર્ડ પર સ્થાપિત કરવાનું પણ શક્ય છે, અને કેટલાક સંબંધિત " +"પાર્ટિશન્સ અહીં આપવામાં આવે છે. તેમ છતાં, આ GRUB ને બ્લોકલિસ્ટ પધ્ધતિ વાપરવા માટે મજબૂર કરે " +"છે, જે તેને ઓછું ભરોસાપાત્ર બનાવે છે, અને તેથી, આ સલાહભર્યું નથી." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"ડિસ્ક પર પહેલાં સ્થાપન કરેલ GRUB બૂટ લોડર હવે હાજર નથી, અથવા તેની ઐક્ય ઓળખ કોઈ " +"કારણોસર બદલાઈ ગઈ છે. એ મહત્વનું છે કે સ્થાપિત GRUB મુખ્ય ઈમેજ GRUB મોડ્યુલ્સ અને grub.cfg " +"જોડે સંગત રહે તેની ખાતરી કરાઈ હોય. મહેરબાની કરી ફરીથી ખાતરી કરી ચકાસો કે GRUB એ " +"યોગ્ય બૂટ ઉપકરણોમાં લખાયેલ છે." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} એમબી; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} એમબી; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "GRUB ને બૂટ ઉપકરણમાં લખવાનું નિષ્ફળ ગયું - ચાલુ રાખશો?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "GRUB નીચેના ઉપકરણોમાં સ્થાપિત થવામાં નિષ્ફળ ગયું:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"તમે તેમ છતાં આગળ વધવા માંગો છો? જો તમે તેમ કરશો તો, તમારું કોમ્પ્યુટર કદાચ યોગ્ય રીતે " +"શરુથશે નહી." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "GRUB ને બૂટ ઉપકરણમાં લખવાનું નિષ્ફળ ગયું - ફરી પ્રયત્ન કરશો?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"તમે કદાચ GRUB બીજા ઉપકરણમાં સ્થાપિત કરી શકો છો, તેમ છતાં ચકાસો કે તમારી સિસ્ટમ આ " +"ઉપકરણમાંથી બૂટ થઈ શકશે. અથવા તો, GRUB પરંપરાગતમાંથી સુધારો રદ કરવામાં આવશે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "GRUB સ્થાપન કર્યા વગર આગળ વધશો?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"તમે GRUB ને કોઈપણ ઉપકરણમાં સ્થાપિત કરવાનું પસંદ કરેલ નથી, જો તમે ચાલુ રાખશો તો, બૂટ " +"લોડર કદાચ યોગ્ય રીતે ગોઠવાયેલ નહી હોય, અને આ કોમ્પ્યુટર હવે ફરી શરુ થાય ત્યારે તે પહેલાંનું " +"જે હોય તે બૂટ વિભાગ ઉપયોગ કરશે. જો તેમાં પહેલાની GRUB 2 આવૃત્તિ બૂટ સેક્ટર પર હશે તો, " +"કદાચ તે મોડ્યુલ લાવવા અથવા હાલનાં રુપરેખાંકન ફાઈલને સંભાળવામાં અસમર્થ બનશે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"જો તમે પહેલાથી બીજું બૂટ લોડર વાપરી રહ્યા હોવ અને તેમ કરવાનું ચાલુ રાખવા માંગતા હોય તો, " +"અથવા આ ખાસ પર્યાવરણ હોય જ્યાં તમારે બૂટ લોડરની જરુર ન હોય તો તમે આગળ વધી શકો છો. " +"નહીતર, તમારે ક્યાંક GRUB સ્થાપિત કરવું જોઈએ." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "/boot/grub માંથી GRUB ૨ દૂર કરશો?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "તમે /boot/grub માંથી બધી GRUB 2 ફાઈલ્સ દૂર કરવા માંગો છો?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "આ તમારી સિસ્ટમને શરુ ન કરવા જેવી બનાવશે જ્યાં સુધી બીજું બૂટ લોડર સ્થાપિત નહી હોય." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "GRUB ૨ માં રુપાંતર હવે પૂર્ણ થયું?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"આ સિસ્ટમમાં સ્થાપિત કરેલ GRUB પરંપરાગત બૂટ લોડરમાંથી ફાઈલ્સ હાજર રહેલ છે, પણ તેમાં નીચેની " +"ડિસ્ક્સ પર GRUB 2 બૂટ રેકોર્ડ્સ સ્થાપિત કરેલ છે:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"એવું જણાય છે કે GRUB પરંપરાગત હવે વપરાશમાં નથી, અને તમારે આ ડિસ્ક્સ પર GRUB 2 ઈમેજ સુધારી " +"અને GRUB 2 માં રુપાંતરણ GRUB પરંપરાગત ફાઈલ્સ દૂર કરીને પુરું કરવું જોઈએ. જો તમે આ GRUB 2 " +"ઈમેજ સુધારશો નહી તો, તે નવાં પેકેજીસ સાથે અસંગત હશે અને તમારી સિસ્ટમને યોગ્ય રીતે શરુ થતા " +"અટકાવી શકે છે." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"તમે સામાન્ય રીતે GRUB 2 માં રુપાંતર કરી લીધું છે સિવાય કે આ બૂટ રેકોર્ડ GRUB 2 સ્થાપન વડે " +"કોઈ બીજી ઓપરેટિંગ સિસ્ટમમાં બનાવવામાં આવ્યા હોય." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "લિનક્સ આદેશ:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"નીચેનાં લિનક્સ આદેશ /etc/default/grub અથવા GRUB પરંપરાગત menu.lst ના `kopt' " +"પરિમાણમાંથી નીકાળવામાં આવ્યા છે. મહેરબાની કરી ખાતરી કરો કે એ સાચા છે, અને જરુરી હોય " +"તો તેને બદલો. આદેશ ખાલી રાખવાનું માન્ય છે." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "લિનક્સ મૂળભૂત આદેશ:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"નીચેનું વાક્ય મૂળભૂત મેનુ રીત માટે લિનક્સ પરિમાણો માટે વાપરવામાં આવશે પણ રીકવરી સ્થિતિ માટે " +"નહી." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "kFreeBSD આદેશ:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"નીચેનાં kFreeBSD આદેશ /etc/default/grub અથવા GRUB પરંપરાગત menu.lst ના `kopt' " +"પરિમાણમાંથી નીકાળવામાં આવ્યા છે. મહેરબાની કરી ખાતરી કરો કે એ સાચા છે, અને જરુરી હોય " +"તો તેને બદલો. આદેશ ખાલી રાખવાનું માન્ય છે." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "kFreeBSD મૂળભૂત આદેશ:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"નીચેનું વાક્ય મૂળભૂત મેનુ રીત માટે kFreeBSD પરિમાણો માટે વાપરવામાં આવશે પણ રીકવરી સ્થિતિ " +"માટે નહી." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map ફરી બનાવવામાં આવી છે" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"ફાઈલ /boot/grub/device.map સ્થિત ઉપકરણ નામો ઉપયોગ કરવા માટે ફરી લખાઈ છે. " +"મોટાભાગનાં કિસ્સાઓમાં, આ ભવિષ્યમાં મોટાભાગે તેને બદલવાની જરુરિયાત ઓછી કરી દેશે, અને GRUB " +"વડે બનાવેલ દાખલાઓ પર અસર નહી કરે." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"તેમ છતાં, સિસ્ટમમાં એક કરતાં વધુ ડિસ્ક હાજર હોવાથી, એ શક્ય છે કે સિસ્ટમ જૂનાં ઉપકરણ નકશા " +"પર આધાર રાખતી હોય. મહેરબાની કરી ચકાસો કે અહીં કોઈ પોતાની મેનુ યાદી છે જે GRUB ના " +"(hdN) ડ્રાઈવ આંકડાઓ પર આધાર રાખતી હોય, અને તેને જરુરી હોય તો સુધારો." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"જો તમને આ સંદેશ સમજવામાં ન આવે, અથવા કોઈ પોતાની બૂટ મેનુ રીત ન હોય તો, તમે આ સંદેશ " +"અવગણી શકો છો." --- grub2-1.99.orig/debian/po/ta.po +++ grub2-1.99/debian/po/ta.po @@ -0,0 +1,407 @@ +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Dr,T,Vasudevan , 2010. +# Dr.T.Vasudevan , 2012. +msgid "" +msgstr "" +"Project-Id-Version: ta\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2012-02-16 10:15+0530\n" +"Last-Translator: Dr.T.Vasudevan \n" +"Language-Team: Tamil \n" +"Language: ta\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "menu.lst இலிருந்து சங்கிலிஏற்றம் செய்யலாமா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "/boot/grub இல் பாரம்பரிய க்ரப் அமைப்பு உள்ளதாக க்ரப் மேம்படுத்தல் நிரல் கண்டது." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +" பாரம்பரிய க்ரப் அமைப்பை உங்கள் கணினியிலிருந்து மாற்ற இப்போதுள்ள பாரம்பரிய க்ரப் அமைப்பின் /" +"boot/grub/menu.lst ஐ க்ரப்2 துவக்கி பிம்பத்தில் இருந்து ஏற்றம் செய்ய சரிக்கட்ட " +"பரிந்துரைக்கப்படுகிறது. இந்த படி இப்போது தானியங்கியாக செய்யப்பட முடியும்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +" menu.lst இலிருந்து க்ரப்2 ஐ சங்கிலி ஏற்றம் செய்ய இப்போது ஒப்புக்கொள்ள பரிந்துரை " +"செய்யப்படுகிறது. மேலும் உங்கள் புதிய க்ரப்2 அமைப்பு செயல் சரியாக உள்ளதா என்பதையும் சரி " +"பார்த்த பின் எம்பிஆர் (மாஸ்டர் பூட் ரெகார்ட்) இல் நிறுவிக்கொள்ளலாம்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"நீங்கள் என்ன முடிவு செய்தாலும் பழைய எம்பிஆர் பிம்பத்தை, பின்னால் பின் வரும் கட்டளையை ரூட் ஆக " +"இட்டு க்ரப் 2 ஆல் மாற்றிக்கொள்ளலாம்." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "க்ரப் நிறுவல் சாதனங்கள்: " + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"க்ரப்-பிசி பொதி மேம்படுத்தப்படுகிறது. இந்த மெனு க்ரப் நிறுவல் தானியங்கியாக இயங்க " +"சாதனங்கள் ஏதும் இருந்தால் அதை தேர்ந்தெடுக்க இது அனுமதிக்கிறது." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"பெரும்பாலான நேரங்களில் தானியங்கியாக க்ரப் நிறுவியை இயக்குவது பரிந்துரைக்கப்படுகிறது. " +"இது க்ரப் கரு பிம்பம் க்ரப் மாட்யூல்கள் அல்லது grub.cfg இலிருந்து ஒத்திசைவு இல்லாமல் போவதை " +"தடுக்கிறது." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"நீங்கள் எந்த தொகுதி பூட் தொகுதியாக உங்கள் பயாஸால் அமர்த்தப்பட்டுள்ளது என தெரியவில்லையானால் " +"எல்லாவற்றிலும் க்ரப் ஐ நிறுவுவது நல்ல தேர்வாகும்." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"குறிப்பு: க்ரப் ஐ பகிர்வுகளின் பூட் பதிவில் நிறுவவும் இயலும். சில பொருத்தமான பகிர்வுகள் " +"இங்கு தரப்படுகின்றன. ஆனால் இது க்ரப்பை தடுப்புப்பட்டியல் பாங்கை பயன்படுத்த " +"வலியுறுத்துகிறது. அதனால் இது கொஞ்சம் நம்பகத்தன்மை குறைவானது. ஆகவே இதை " +"பரிந்துரைப்பதில்லை." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"க்ரப் பூட் ஏற்றி முன்பு ஒரு வட்டில் பதியப்பட்டது; அந்த வட்டு இப்போது இல்லை அல்லது ஏனோ அதன் " +"பிரத்யேக அடையாளம்காணி மாறிவிட்டது. க்ரப் கரு பிம்பம் க்ரப் மாட்யூல்கள் அல்லது grub.cfg " +"உடன் ஒத்திசைவு இருப்பது அவசியம். பொருத்தமான பூட் சாதனங்களில் க்ரப் எழுதப்பட்டுள்ளது என " +"மீண்டும் சோதித்து உறுதி செய்து கொள்க." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} எம்பி (MB); ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} எம்பி(MB); ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "பூட் சாதனத்துக்கு க்ரப் ஐ எழுதுவது தோவியடைந்தது - தொடரலாமா?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "பின் வரும் சாதனங்களில் க்ரப் நிறுவுதல் தோல்வியடைந்தது:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"எப்படியும் தொடர வேண்டுமா? தொடர்ந்தால் உங்கள் கணினி சரியாக துவங்க முடியாமல் போகலாம்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "பூட் சாதனத்துக்கு க்ரப் ஐ நிறுவுதல் தோல்வியடைந்தது. மீண்டும் முயற்சிக்கலாமா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"நீங்கள் வேறு சாதனத்தில் க்ரப் ஐ நிறுவ முடியலாம். ஆனால் உங்கள் கணினி அந்த சாதனத்தில் " +"இருந்து பூட் ஆகும் என்பதை உறுதி செய்து கொள்ள வேண்டும். இல்லையெனில் பாரம்பரிய க்ரப் " +"இலிருந்து மேம்படுத்துதல் ரத்து செய்யப்படும். " + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "க்ரப் ஐ நிறுவாமல் தொடரலாமா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"நீங்கள் எந்த சாதனத்திலும் க்ரப் ஐ நிறுவாமல் இருக்க தேர்ந்தெடுத்து உள்ளீர்கள். நீங்கள் தொடர்ந்தால் " +"பூட் ஏற்றி சரியாக வடிவமைக்கப்படாமல் போகலாம். அதனால் கணினி மீண்டும் துவங்கும்போது முன்பு " +"பூட் தொகுதியில் என்ன இருந்ததோ அதையே பயன்படுத்தும். அங்கே க்ரப் 2 இன் முந்தைய பதிப்பு " +"இருப்பின் மாட்யூல்களை ஏற்றுதலும் நடப்பு வடிவமைப்பு கோப்பை கையாளுவதும் இயலாமல் போகலாம்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"நீங்கள் ஏற்கெனெவே வேறு துவக்க ஏற்றியை பயன்படுத்திக்கொண்டு இருந்து அதையே தொடர நினைத்தால், " +"அல்லது இது ஒரு விசேஷ சூழலாக இருந்து உங்களுக்கு துவக்கி தேவையில்ல்லாமல் இருந்தால், " +"எப்படியும் நீங்கள் தொடர வேண்டும். அல்லது க்ரப் ஐ வேறு இடத்தில் நிறுவ வேண்டும்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "க்ரப் 2 ஐ /boot/grub இலிருந்து நீக்கவா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "எல்லா க்ரப் 2 கோப்புக்களையும் /boot/grub இலிருந்து நீக்க விருப்பமா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"இது வேறு ஒரு துவக்கியை நிறுவி இருந்தால் ஒழிய கணினியை துவக்க முடியாமல் ஆக்கும்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "க்ரப் 2 க்கு மாற்றத்தை இப்போது முடிக்கலாமா?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"இந்த கணினியில் இன்னும் க்ரப் பாரம்பரிய துவக்கி நிறுவப்பட்டுள்ளது. ஆனால் இப்போது க்ரப் 2 பூட் " +"பதிவுகளும் பின் வரும் வட்டுகளில் நிறுவப்பட்டுள்ளது:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"பாரம்பரிய க்ரப் இப்போது புழக்கத்தில் இல்லை என்று தெரிகிறது. நீங்கள் இந்த வட்டுகளில் உள்ள க்ரப் " +"2 பிம்பங்களை மேம்படுத்த வேண்டும். பழைய பார்மபரிய க்ரப் கோப்புக்களை நீக்கி மாற்றத்தை இறுதி " +"செய்ய வேண்டும். நீங்கள் இந்த பிம்பங்களை மேம்படுத்தாவிட்டால் புதிய பொதிகளுடன் அவை " +"பொருத்தமில்லாமல் போய் உங்கள் கணினி சரியாக துவங்க முடியாமல் போகலாம்." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"இந்த பூட் பதிவுகள் வேறு ஒரு இயங்கு தளத்தை நிறுவும் போது க்ரப் 2 ஆல் " +"உருவாக்கப்பட்டிருந்தால் ஒழிய நீங்கள் பொதுவாக க்ரப் 2 மாற்றத்தை முடிக்க வேண்டும்." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "லீனக்ஸ் கட்டளை வரி:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"பின் வரும் லீனக்ஸ் கட்டளை வரி /etc/default/grub இலிருந்து அல்லது க்ரப் இன் பாரம்பரிய " +"menu.lst இன் `kopt' அளபுருவிலிருந்து பெறப்பட்டது. இது சரியா என்று சோதித்து " +"தேவையானால் மற்றவும். இந்த கட்டளை வரி காலியாக இருக்க அனுமதி உண்டு." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "லீனக்ஸ் முன்னிருப்பு கட்டளை வரி:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"பின் வரும் சரங்கள் முன்னிருப்பு மெனு உள்ளீட்டுக்கு லீனக்ஸ் அளபுருக்களாக பயன்படுத்தப்படும்; " +"ஆனால் மீட்டெடுப்பு பாங்குக்கு அல்ல" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "கேப்ரீபிஎஸ்டி கட்டளை வரி:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"பின் வரும் கேப்ரீபிஎஸ்டி கட்டளை வரி /etc/default/grub இலிருந்து அல்லது க்ரப் இன் " +"பாரம்பரிய menu.lst இன் `kopt' அளபுருவிலிருந்து பெறப்பட்டது. இது சரியா என்று " +"சோதித்து தேவையானால் மற்றவும். இந்த கட்டளை வரி காலியாக இருக்க அனுமதி உண்டு." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "கேப்ரீபிஎஸ்டி முன்னிருப்பு கட்டளை வரி:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"பின் வரும் சரங்கள் முன்னிருப்பு மெனு உள்ளீட்டுக்கு கேப்ரீபிஎஸ்டி அளபுருக்களாக " +"பயன்படுத்தப்படும்; ஆனால் மீட்டெடுப்பு பாங்குக்கு அல்ல" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "/boot/grub/device.map மறு உருவாக்கப்பட்டது" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +" /boot/grub/device.map கோப்பு நிலையான சாதனங்களின் பெயரை பயன்படுத்துமாறு மீண்டும் " +"உருவாக்கப்பட்டது. பெரும்பாலான சமயங்களில் இது எதிர்காலத்தில் மாற்ற வேன்டிய அவசியம் " +"ஏற்படாது. க்ரப் ஆல் உருவாக்கப்படும் பூட் மெனு உள்ளீடுகள் பாதிக்கப்படாது." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"இருப்பினும் கணினியில் ஒன்றுக்கு மேற்பட்ட வட்டுகள் இருப்பதால் கணினி பழைய சாதன வரைபடத்தை " +"சார்ந்து பயன்படுத்திக்கொண்டு இருக்க வாய்ப்பு உண்டு. க்ரப் இன் (hdN) எண்ணிடலை சார்ந்த " +"தனிப்பயன் பூட் மெனு ஏதும் உள்ளதா என தயை செய்து சோதிக்கவும்; அப்படி இருப்பின் அவற்றை " +"மேம்படுத்தவும்." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"இந்த செய்தி உங்களுக்குப் புரியவில்லையானால், அல்லது தனிப்பயன் பூட் மெனு உள்ளீடுகள் " +"இல்லையானால் இந்த செய்தியை உதாசீனம் செய்யலாம்." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "எப்படி இருந்தாலும்நீங்கள் க்ரப்2 ஐ எம்பிஆர் இலிருந்து நேரடியாக ஏற்ற விரும்பினால் எப்போது " +#~ "வேண்டுமானாலும் ரூட் ஆக கீழ் கண்ட கட்டளை மூலம் அதை செய்யலாம்." --- grub2-1.99.orig/debian/po/es.po +++ grub2-1.99/debian/po/es.po @@ -0,0 +1,492 @@ +# grub2 po-debconf translation to Spanish +# Copyright (C) 2007, 2009, 2010, 2011 Software in the Public Interest +# This file is distributed under the same license as the grub2 package. +# +# Changes: +# - Initial translation +# Maria Germana Oliveira Blazetic, 2007 +# +# - Updates +# Gary Ariel Sandi Vigabriel , 2009 +# Francisco Javier Cuadrado , 2009, 2010, 2011 +# +# - Revisions +# Innocent De Marchi , 2010 +# +# Traductores, si no conocen el formato PO, merece la pena leer la +# documentación de gettext, especialmente las secciones dedicadas a este +# formato, por ejemplo ejecutando: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# +# Equipo de traducción al español, por favor lean antes de traducir +# los siguientes documentos: +# +# - El proyecto de traducción de Debian al español +# http://www.debian.org/intl/spanish/ +# especialmente las notas y normas de traducción en +# http://www.debian.org/intl/spanish/notas +# +# - La guía de traducción de po's de debconf: +# /usr/share/doc/po-debconf/README-trans +# o http://www.debian.org/intl/l10n/po-debconf/README-trans +# +msgid "" +msgstr "" +"Project-Id-Version: grub2 1.99-5\n" +"Report-Msgid-Bugs-To: grub2@packages.debian.org\n" +"POT-Creation-Date: 2011-05-27 13:33+0100\n" +"PO-Revision-Date: 2011-05-28 14:04+0100\n" +"Last-Translator: Francisco Javier Cuadrado \n" +"Language-Team: Debian l10n Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "Chainload from menu.lst?" +msgstr "¿Desea realizar la carga en cadena desde el archivo «menu.lst»?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "GRUB upgrade scripts have detected a GRUB Legacy setup in /boot/grub." +msgstr "" +"Los scripts de actualización han detectado en «/boot/grub» una configuración " +"heredada de una versión anterior de GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"In order to replace the Legacy version of GRUB in your system, it is " +"recommended that /boot/grub/menu.lst is adjusted to load a GRUB 2 boot image " +"from your existing GRUB Legacy setup. This step can be automatically " +"performed now." +msgstr "" +"Con el fin de reemplazar la versión anterior de GRUB en el sistema, se " +"recomienda configurar «/boot/grub/menu.lst» para que cargue GRUB 2 a partir " +"de la configuración heredada de GRUB. Este paso se puede hacer de forma " +"automática." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"It's recommended that you accept chainloading GRUB 2 from menu.lst, and " +"verify that the new GRUB 2 setup works before it is written to the MBR " +"(Master Boot Record)." +msgstr "" +"Se recomienda que acepte cargarlo en cadena desde el archivo «menu.lst» y " +"que compruebe el buen funcionamiento del nuevo GRUB 2, antes de instalarlo " +"en el MBR («Master Boot Record»)." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:2001 +msgid "" +"Whatever your decision, you can replace the old MBR image with GRUB 2 later " +"by issuing the following command as root:" +msgstr "" +"Sea cual sea su decisión, puede reemplazar la imagen del MBR anterior con " +"GRUB 2 más tarde ejecutando, como administrador («root»), la siguiente orden:" + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "GRUB install devices:" +msgstr "Dispositivos en los que se puede instalar GRUB:" + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"The grub-pc package is being upgraded. This menu allows you to select which " +"devices you'd like grub-install to be automatically run for, if any." +msgstr "" +"Se está actualizando el paquete grub-pc. Este menú le permite escoger en qué " +"dispositivos quiere ejecutar automáticamente grub-install, si es que quiere." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 +msgid "" +"Running grub-install automatically is recommended in most situations, to " +"prevent the installed GRUB core image from getting out of sync with GRUB " +"modules or grub.cfg." +msgstr "" +"Se recomienda ejecutar automáticamente grub-install en la mayoría de las " +"situaciones, para evitar que la imagen del núcleo de GRUB instalada no esté " +"sincronizada con los módulos GRUB o con el archivo «grub.cfg»." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"If you're unsure which drive is designated as boot drive by your BIOS, it is " +"often a good idea to install GRUB to all of them." +msgstr "" +"Si no está seguro cuál es la unidad de arranque de la BIOS, normalmente es " +"una buena idea instalar GRUB en todas ellas." + +#. Type: multiselect +#. Description +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:3001 ../grub-pc.templates.in:4001 +msgid "" +"Note: it is possible to install GRUB to partition boot records as well, and " +"some appropriate partitions are offered here. However, this forces GRUB to " +"use the blocklist mechanism, which makes it less reliable, and therefore is " +"not recommended." +msgstr "" +"Nota: también es posible instalar GRUB en los registros de arranque de " +"particiones, aquí se ofrecen algunas particiones apropiadas. Sin embargo, " +"esto obliga a GRUB a utilizar el mecanismo de la lista de bloqueo, que lo " +"hace menos fiable, y por tanto no es recomendable." + +#. Type: multiselect +#. Description +#: ../grub-pc.templates.in:4001 +msgid "" +"The GRUB boot loader was previously installed to a disk that is no longer " +"present, or whose unique identifier has changed for some reason. It is " +"important to make sure that the installed GRUB core image stays in sync with " +"GRUB modules and grub.cfg. Please check again to make sure that GRUB is " +"written to the appropriate boot devices." +msgstr "" +"El gestor de arranque GRUB se instaló previamente en un disco que ya no está " +"presente o cuyo identificador único ha cambiado por alguna razón. Es " +"importante asegurarse de que la imagen del núcleo de GRUB instalada se " +"mantiene sincronizada con los módulos de GRUB y el archivo «grub.cfg». Por " +"favor, asegúrese que GRUB se instala en los dispositivos de arranque " +"adecuado." + +#. Type: text +#. Description +#. Disk sizes are in decimal megabytes, to match how disk manufacturers +#. usually describe them. +#: ../grub-pc.templates.in:5001 +msgid "${DEVICE} (${SIZE} MB; ${MODEL})" +msgstr "${DEVICE} (${SIZE} MB; ${MODEL})" + +#. Type: text +#. Description +#. The "-" is used to indicate indentation. Leading spaces may not work. +#: ../grub-pc.templates.in:6001 +msgid "- ${DEVICE} (${SIZE} MB; ${PATH})" +msgstr "- ${DEVICE} (${SIZE} MB; ${PATH})" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "Writing GRUB to boot device failed - continue?" +msgstr "" +"La instalación de GRUB en el dispositivo de arranque ha fallado. ¿Desea " +"continuar?" + +#. Type: boolean +#. Description +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 ../grub-pc.templates.in:8001 +msgid "GRUB failed to install to the following devices:" +msgstr "No se pudo instalar GRUB en los siguientes dispositivos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:7001 +msgid "" +"Do you want to continue anyway? If you do, your computer may not start up " +"properly." +msgstr "" +"¿Desea continuar de todos modos? Si lo hace, puede que su máquina no se " +"inicie apropiadamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "Writing GRUB to boot device failed - try again?" +msgstr "" +"La instalación de GRUB en el dispositivo de arranque ha fallado. ¿Desea " +"volver a intentarlo?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:8001 +msgid "" +"You may be able to install GRUB to some other device, although you should " +"check that your system will boot from that device. Otherwise, the upgrade " +"from GRUB Legacy will be canceled." +msgstr "" +"Puede instalar GRUB en otro dispositivo, aunque debería comprobar que su " +"sistema arrancará desde ese dispositivo. De otro modo, se cancelará la " +"actualización de la versión anterior de GRUB." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "Continue without installing GRUB?" +msgstr "¿Desea continuar sin instalar GRUB?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"You chose not to install GRUB to any devices. If you continue, the boot " +"loader may not be properly configured, and when this computer next starts up " +"it will use whatever was previously in the boot sector. If there is an " +"earlier version of GRUB 2 in the boot sector, it may be unable to load " +"modules or handle the current configuration file." +msgstr "" +"Ha escogido no instalar GRUB en ningún dispositivo. Si continua, puede que " +"el cargador de arranque no se configure correctamente, y cuando esta máquina " +"se vuelva a iniciar se utilizará lo que hubiera anteriormente en el sector " +"de arranque. Si hay una versión previa de GRUB 2 en el sector de arranque, " +"puede que sea imposible cargar los módulos o manejar el archivo de " +"configuración actual." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:9001 +msgid "" +"If you are already using a different boot loader and want to carry on doing " +"so, or if this is a special environment where you do not need a boot loader, " +"then you should continue anyway. Otherwise, you should install GRUB " +"somewhere." +msgstr "" +"Si está ejecutando un cargador de arranque diferente y quiere seguir " +"haciéndolo o si es un entorno especial en el que no necesita un cargador de " +"arranque, entonces debería continuar. De otro modo, debería instalar GRUB en " +"otra ubicación." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Remove GRUB 2 from /boot/grub?" +msgstr "¿Desea eliminar GRUB 2 de «/boot/grub»?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "Do you want to have all GRUB 2 files removed from /boot/grub?" +msgstr "¿Desea eliminar todos los archivos de GRUB 2 de «/boot/grub»?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:10001 +msgid "" +"This will make the system unbootable unless another boot loader is installed." +msgstr "" +"Esto hará que el sistema no arranque a menos que otro gestor de arranque " +"esté instalado." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "Finish conversion to GRUB 2 now?" +msgstr "¿Desea terminar la conversión a GRUB 2 ahora?" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"This system still has files from the GRUB Legacy boot loader installed, but " +"it now also has GRUB 2 boot records installed on these disks:" +msgstr "" +"Este sistema todavía tiene archivos del cargador de arranque de la versión " +"anterior de GRUB instalados, pero ahora también tiene registros de arranque " +"de GRUB 2 instalados en estos discos:" + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"It seems likely that GRUB Legacy is no longer in use, and that you should " +"instead upgrade the GRUB 2 images on these disks and finish the conversion " +"to GRUB 2 by removing old GRUB Legacy files. If you do not upgrade these " +"GRUB 2 images, then they may be incompatible with the new packages and cause " +"your system to stop booting properly." +msgstr "" +"Parece que la versión anterior de GRUB ya no se utiliza, por lo que usted " +"debería actualizar las imágenes de GRUB 2 en estos discos y terminar la " +"conversión a GRUB 2 borrando los archivos de la versión anterior de GRUB. Si " +"no actualiza estas imágenes de GRUB 2, puede que sean incompatibles con los " +"nuevos paquetes y que provoquen que su sistema no arranque correctamente." + +#. Type: boolean +#. Description +#: ../grub-pc.templates.in:11001 +msgid "" +"You should generally finish the conversion to GRUB 2 unless these boot " +"records were created by a GRUB 2 installation on some other operating system." +msgstr "" +"Debería terminar la conversión a GRUB 2 a menos que estos registros de " +"arranque los crease una instalación de GRUB 2 en algún otro sistema " +"operativo." + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "Linux command line:" +msgstr "Linea de órdenes de Linux:" + +#. Type: string +#. Description +#: ../templates.in:1001 +msgid "" +"The following Linux command line was extracted from /etc/default/grub or the " +"`kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La siguiente linea de órdenes de Linux se extrajo del archivo «/etc/default/" +"grub» o del parámetro «kopt» en el archivo «menu.lst» de la versión anterior " +"de GRUB. Por favor, compruebe que es correcta y modifíquela si es necesario. " +"La línea de órdenes se puede dejar en blanco." + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "Linux default command line:" +msgstr "Linea de órdenes predeterminada de Linux:" + +#. Type: string +#. Description +#: ../templates.in:2001 +msgid "" +"The following string will be used as Linux parameters for the default menu " +"entry but not for the recovery mode." +msgstr "" +"La siguiente cadena se utilizará como parámetros de Linux para la entrada " +"predeterminada del menú pero no para el modo de recuperación." + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "kFreeBSD command line:" +msgstr "Linea de órdenes de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:3001 +msgid "" +"The following kFreeBSD command line was extracted from /etc/default/grub or " +"the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is " +"correct, and modify it if necessary. The command line is allowed to be empty." +msgstr "" +"La siguiente linea de órdenes de kFreeBSD se extrajo del archivo «/etc/" +"default/grub» o del parámetro «kopt» en el archivo «menu.lst» de la versión " +"anterior de GRUB. Por favor, compruebe que es correcta y modifíquela si es " +"necesario. La línea de órdenes se puede dejar en blanco." + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "kFreeBSD default command line:" +msgstr "Linea de órdenes predeterminada de kFreeBSD:" + +#. Type: string +#. Description +#: ../templates.in:4001 +msgid "" +"The following string will be used as kFreeBSD parameters for the default " +"menu entry but not for the recovery mode." +msgstr "" +"La siguiente cadena se utilizará como parámetros de kFreeBSD para la entrada " +"predeterminada del menú pero no para el modo de recuperación." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "/boot/grub/device.map has been regenerated" +msgstr "Se ha regenerado el archivo «/boot/grub/device.map»" + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"The file /boot/grub/device.map has been rewritten to use stable device " +"names. In most cases, this should significantly reduce the need to change it " +"in future, and boot menu entries generated by GRUB should not be affected." +msgstr "" +"El archivo «/boot/grub/device.map» se ha rescrito para utilizar los nombres " +"de dispositivos estables. En la mayoría de los casos, esto debería reducir " +"significativamente la necesidad de cambiarlo en el futuro, y las entradas " +"del menú que generó GRUB no se verán afectadas." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"However, since more than one disk is present in the system, it is possible " +"that the system is depending on the old device map. Please check whether " +"there are any custom boot menu entries that rely on GRUB's (hdN) drive " +"numbering, and update them if necessary." +msgstr "" +"Sin embargo, ya que hay más de un disco en el sistema, es posible que el " +"sistema dependa de un mapa de dispositivos antiguo. Por favor, compruebe si " +"tiene entradas personalizadas en el menú de arranque que dependan de la " +"numeración de los dispositivos de GRUB (hdN) y actualícela si es necesario." + +#. Type: note +#. Description +#: ../templates.in:5001 +msgid "" +"If you do not understand this message, or if there are no custom boot menu " +"entries, you can ignore this message." +msgstr "" +"Puede ignorar este mensaje si no lo entiende o si no tiene entradas " +"personalizadas en el menú de arranque." + +#~ msgid "" +#~ "In either case, whenever you want GRUB 2 to be loaded directly from MBR, " +#~ "you can do so by issuing (as root) the following command:" +#~ msgstr "" +#~ "En cualquier caso, cuando quiera que GRUB 2 se cargue directamente desde " +#~ "el MBR, puede hacerlo ejecutando (como usuario «root») la siguiente orden:" + +#~ msgid "GRUB installation failed. Continue?" +#~ msgstr "La instalación de GRUB ha fallado. ¿Desea continuar?" + +#~ msgid "GRUB 1.95 numbering scheme transition" +#~ msgstr "Esquema de transición numérica de GRUB 1.95" + +#~ msgid "" +#~ "As of version 1.95, GRUB 2 has changed its numbering scheme. Partitions " +#~ "are now counted starting from 1 rather than 0. This is to make it " +#~ "consistent with device names of Linux and the other kernels used in " +#~ "Debian. For example, when using Linux as the kernel, \"(hd0,1)\" refers " +#~ "to the same partition as the /dev/sda1 device node." +#~ msgstr "" +#~ "GRUB 2 ha cambiado el esquema de numeración, como en la versión 1.95. " +#~ "Ahora las particiones comienzan en el número 1 en vez de en el número 0. " +#~ "Esto sirve para hacerlo consistente con los nombres de dispositivos de " +#~ "Linux y otros núcleos que se usan en Debian. Por ejemplo, cuando se usa " +#~ "Linux como núcleo, «(hd0, 1)» se refiere a la misma partición que el " +#~ "dispositivo «/dev/sda1»." + +#~ msgid "" +#~ "Because of this, there's a chance your system becomes unbootable if " +#~ "update-grub(8) is run before GRUB is updated, generating a grub.cfg file " +#~ "that your installed GRUB won't yet be able to parse correctly. To ensure " +#~ "your system will be able to boot, you have to:" +#~ msgstr "" +#~ "Por este motivo, existe la posibilidad de que su sistema no sea capaz de " +#~ "arrancar si se ejecuta update-grub(8) antes de actualizar GRUB, ya que se " +#~ "generaría un archivo «grub.cfg» que la versión instalada de GRUB no " +#~ "podría leer correctamente. Para asegurarse de que el sistema arrancará, " +#~ "debe:" + +#~ msgid "" +#~ " - Reinstall GRUB (typically, by running grub-install).\n" +#~ " - Rerun update-grub to generate a new grub.cfg." +#~ msgstr "" +#~ " - Reinstalar GRUB (normalmente, ejecutando grub-install).\n" +#~ "- Volver a ejecutar update-grub para generar un nuevo archivo «grub.cfg»." --- grub2-1.99.orig/debian/patches/ubuntu_uefi_firmware_setup.patch +++ grub2-1.99/debian/patches/ubuntu_uefi_firmware_setup.patch @@ -0,0 +1,81 @@ +Description: Output a menu entry for firmware setup on UEFI FastBoot systems +Author: Steve Langasek +Forwarded: no + +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -388,6 +388,12 @@ + }; + + script = { ++ name = '30_uefi-firmware'; ++ common = util/grub.d/30_uefi-firmware.in; ++ installdir = grubconf; ++}; ++ ++script = { + name = '40_custom'; + common = util/grub.d/40_custom.in; + installdir = grubconf; +Index: b/po/POTFILES-shell.in +=================================================================== +--- a/po/POTFILES-shell.in ++++ b/po/POTFILES-shell.in +@@ -5,3 +5,4 @@ + util/grub.d/10_linux.in + util/grub.d/10_netbsd.in + util/grub.d/20_linux_xen.in ++util/grub.d/30_uefi-firmware.in +Index: b/util/grub.d/30_uefi-firmware.in +=================================================================== +--- /dev/null ++++ b/util/grub.d/30_uefi-firmware.in +@@ -0,0 +1,46 @@ ++#! /bin/sh ++set -e ++ ++# grub-mkconfig helper script. ++# Copyright (C) 2012 Free Software Foundation, Inc. ++# ++# GRUB 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 3 of the License, or ++# (at your option) any later version. ++# ++# GRUB 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 GRUB. If not, see . ++ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++export TEXTDOMAIN=@PACKAGE@ ++export TEXTDOMAINDIR="@localedir@" ++ ++. "@datadir@/grub/grub-mkconfig_lib" ++ ++efi_vars_dir=/sys/firmware/efi/vars ++EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c ++OsIndications="$efi_vars_dir/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE/data" ++ ++if [ -e "$OsIndications" ] && \ ++ [ "$(( $(printf %x \'"$(cat $OsIndications | cut -b1)") & 1 ))" = 1 ]; then ++ LABEL="System setup" ++ ++ gettext_printf "Adding boot menu entry for EFI firmware configuration\n" >&2 ++ ++ onstr="$(gettext_printf "(on %s)" "${DEVICE}")" ++ ++ cat << EOF ++menuentry '$LABEL' { ++ fwsetup ++} ++EOF ++fi --- grub2-1.99.orig/debian/patches/ubuntu_vt_handoff.patch +++ grub2-1.99/debian/patches/ubuntu_vt_handoff.patch @@ -0,0 +1,54 @@ +Description: Add vt.handoff=7 to non-recovery Linux entries + We do it this way rather than by changing GRUB_CMDLINE_LINUX_DEFAULT + directly because this saves users from having to resolve configuration file + conflicts, especially since this may not be the final version of the + parameter. +Author: Colin Watson +Author: Andy Whitcroft +Forwarded: not-needed +Last-Update: 2012-04-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -65,6 +65,12 @@ + fi + fi + ++for word in $GRUB_CMDLINE_LINUX_DEFAULT; do ++ if [ "$word" = splash ]; then ++ GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff" ++ fi ++done ++ + # add crashkernel option if we have the required tools + if [ -x "/usr/bin/makedumpfile" ] && [ -x "/sbin/kexec" ]; then + GRUB_CMDLINE_EXTRA="$GRUB_CMDLINE_EXTRA crashkernel=384M-2G:64M,2G-:128M" +@@ -90,7 +96,7 @@ + fi + + cat << EOF +- set gfxpayload=\$linux_gfx_mode ++ gfxmode \$linux_gfx_mode + EOF + + cat << EOF +@@ -147,6 +153,17 @@ + prepare_boot_cache= + prepare_root_cache= + ++cat << 'EOF' ++function gfxmode { ++ set gfxpayload="${1}" ++ if [ "${1}" = "keep" ]; then ++ set vt_handoff=vt.handoff=7 ++ else ++ set vt_handoff= ++ fi ++} ++EOF ++ + # Use ELILO's generic "efifb" when it's known to be available. + # FIXME: We need an interface to select vesafb in case efifb can't be used. + if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then --- grub2-1.99.orig/debian/patches/ubuntu_linuxefi_amd64_only.patch +++ grub2-1.99/debian/patches/ubuntu_linuxefi_amd64_only.patch @@ -0,0 +1,17 @@ +Description: Only build linuxefi on amd64 +Author: Colin Watson +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1235,7 +1235,6 @@ + name = linuxefi; + x86_efi = loader/i386/efi/linux.c; + x86_efi = lib/cmdline.c; +- enable = i386_efi; + enable = x86_64_efi; + }; + --- grub2-1.99.orig/debian/patches/ubuntu_wubi_no_windows.patch +++ grub2-1.99/debian/patches/ubuntu_wubi_no_windows.patch @@ -0,0 +1,47 @@ +Description: Skip Windows os-prober entries on Wubi systems + Since we're already being booted from the Windows boot loader, including + entries that take us back to it mostly just causes confusion, and stops us + from being able to hide the menu if there are no other OSes installed. + . + https://blueprints.launchpad.net/ubuntu/+spec/foundations-o-wubi +Author: Colin Watson +Forwarded: not-needed +Last-Update: 2011-06-17 + +Index: b/util/grub.d/30_os-prober.in +=================================================================== +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -147,6 +147,8 @@ + EOF + } + ++wubi= ++ + for OS in ${OSPROBED} ; do + DEVICE="`echo ${OS} | cut -d ':' -f 1`" + LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`" +@@ -162,6 +164,23 @@ + case ${BOOT} in + chain) + ++ case ${LONGNAME} in ++ Windows*) ++ if [ -z "$wubi" ]; then ++ if [ -x /usr/share/lupin-support/grub-mkimage ] && \ ++ /usr/share/lupin-support/grub-mkimage --test; then ++ wubi=yes ++ else ++ wubi=no ++ fi ++ fi ++ if [ "$wubi" = yes ]; then ++ echo "Skipping ${LONGNAME} on Wubi system" >&2 ++ continue ++ fi ++ ;; ++ esac ++ + found_other_os=1 + cat << EOF + menuentry "${LONGNAME} (on ${DEVICE})" --class windows --class os { --- grub2-1.99.orig/debian/patches/mkrescue_diet.patch +++ grub2-1.99/debian/patches/mkrescue_diet.patch @@ -0,0 +1,54 @@ +Description: Allow reducing size of xorriso-created rescue images + This lets us create smaller images that will fit on floppy disks. It has + been approved by the upstream maintainer but has not yet been applied. +Author: Thomas Schmitt +Origin: other, http://lists.gnu.org/archive/html/grub-devel/2010-05/msg00100.html +Forwarded: yes +Last-Update: 2010-06-02 + +Index: b/util/grub-mkrescue.in +=================================================================== +--- a/util/grub-mkrescue.in ++++ b/util/grub-mkrescue.in +@@ -44,6 +44,7 @@ + grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` + + xorriso=xorriso ++diet=no + + # Usage: usage + # Print the usage. +@@ -59,6 +60,7 @@ + --rom-directory=DIR save rom images in DIR [optional] + --xorriso=FILE use FILE as xorriso [optional] + --grub-mkimage=FILE use FILE as grub-mkimage ++ --diet apply size reducing measures [optional] + + $self generates a bootable rescue image with specified source files, source + directories, or mkisofs options listed by: xorriso -as mkisofs -help +@@ -133,6 +135,9 @@ + --xorriso=*) + xorriso=`echo "${option}/" | sed 's/--xorriso=//'` ;; + ++ --diet) ++ diet=yes ;; ++ + *) + source="${source} ${option} $@"; break ;; + esac +@@ -307,7 +312,14 @@ + fi + + # build iso image +-"${xorriso}" -as mkisofs -graft-points ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} --sort-weight 0 / --sort-weight 1 /boot ${source} ++if [ "${diet}" = yes ]; then ++ if [ -e "${output_image}" ]; then ++ rm "${output_image}" || exit 1 ++ fi ++ "${xorriso}" -report_about HINT -as mkisofs -graft-points -no-pad ${grub_mkisofs_arguments} --protective-msdos-label -r ${iso9660_dir} --sort-weight 0 / --sort-weight 1 /boot ${source} | cat >"${output_image}" ++else ++ "${xorriso}" -report_about HINT -as mkisofs -graft-points ${grub_mkisofs_arguments} --protective-msdos-label -o ${output_image} -r ${iso9660_dir} --sort-weight 0 / --sort-weight 1 /boot ${source} ++fi + rm -rf ${iso9660_dir} + + rm -f ${embed_img} --- grub2-1.99.orig/debian/patches/ubuntu_no_insmod_on_sb.patch +++ grub2-1.99/debian/patches/ubuntu_no_insmod_on_sb.patch @@ -0,0 +1,89 @@ +Description: Don't permit loading modules on UEFI secure boot +Author: Matthew Garrett +Author: Colin Watson +Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub-2.00-no-insmod-on-sb.patch +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/grub-core/kern/dl.c +=================================================================== +--- a/grub-core/kern/dl.c ++++ b/grub-core/kern/dl.c +@@ -32,6 +32,10 @@ + #include + #include + ++#ifdef GRUB_MACHINE_EFI ++#include ++#endif ++ + /* Platforms where modules are in a readonly area of memory. */ + #if defined(GRUB_MACHINE_QEMU) + #define GRUB_MODULES_MACHINE_READONLY +@@ -595,6 +599,15 @@ + void *core = 0; + grub_dl_t mod = 0; + ++#ifdef GRUB_MACHINE_EFI ++ if (grub_efi_secure_boot ()) ++ { ++ grub_error (GRUB_ERR_ACCESS_DENIED, ++ "Secure Boot forbids loading module from %s", filename); ++ return 0; ++ } ++#endif ++ + file = grub_file_open (filename); + if (! file) + return 0; +Index: b/grub-core/kern/efi/efi.c +=================================================================== +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -271,6 +271,34 @@ + return NULL; + } + ++grub_efi_boolean_t ++grub_efi_secure_boot (void) ++{ ++ grub_efi_guid_t efi_var_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID; ++ grub_size_t datasize; ++ char *secure_boot = NULL; ++ char *setup_mode = NULL; ++ grub_efi_boolean_t ret = 0; ++ ++ secure_boot = grub_efi_get_variable("SecureBoot", &efi_var_guid, &datasize); ++ ++ if (datasize != 1 || !secure_boot) ++ goto out; ++ ++ setup_mode = grub_efi_get_variable("SetupMode", &efi_var_guid, &datasize); ++ ++ if (datasize != 1 || !setup_mode) ++ goto out; ++ ++ if (*secure_boot && !*setup_mode) ++ ret = 1; ++ ++ out: ++ grub_free (secure_boot); ++ grub_free (setup_mode); ++ return ret; ++} ++ + grub_uint32_t + grub_get_rtc (void) + { +Index: b/include/grub/efi/efi.h +=================================================================== +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -69,6 +69,7 @@ + const grub_efi_guid_t *guid, + void *data, + grub_size_t datasize); ++grub_efi_boolean_t EXPORT_FUNC (grub_efi_secure_boot) (void); + int + EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, + const grub_efi_device_path_t *dp2); --- grub2-1.99.orig/debian/patches/ubuntu_linux_submenus.patch +++ grub2-1.99/debian/patches/ubuntu_linux_submenus.patch @@ -0,0 +1,32 @@ +Description: Put second and subsequent Linux menu entries in a submenu +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/540452 +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2010-11/msg00074.html +Last-Update: 2011-01-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -177,6 +177,7 @@ + if [ "\$linux_gfx_mode" != "text" ]; then load_video; fi + EOF + ++in_submenu=false + while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + echo "Found linux image: $linux" >&2 +@@ -230,4 +231,13 @@ + fi + + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` ++ ++ if [ "$list" ] && ! $in_submenu; then ++ echo "submenu \"Previous Linux versions\" {" ++ in_submenu=: ++ fi + done ++ ++if $in_submenu; then ++ echo "}" ++fi --- grub2-1.99.orig/debian/patches/disable_floppies.patch +++ grub2-1.99/debian/patches/disable_floppies.patch @@ -0,0 +1,28 @@ + +Author: Robert Millan + +An ugly kludge. Should this be merged upstream? + +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -1077,6 +1077,18 @@ + continue; + } + ++ if (! strncmp (p, "/dev/fd", sizeof ("/dev/fd") - 1)) ++ { ++ char *q = p + sizeof ("/dev/fd") - 1; ++ if (*q >= '0' && *q <= '9') ++ { ++ free (map[drive].drive); ++ map[drive].drive = NULL; ++ grub_util_info ("`%s' looks like a floppy drive, skipping", p); ++ continue; ++ } ++ } ++ + #ifdef __linux__ + /* On Linux, the devfs uses symbolic links horribly, and that + confuses the interface very much, so use realpath to expand --- grub2-1.99.orig/debian/patches/xen_replace.patch +++ grub2-1.99/debian/patches/xen_replace.patch @@ -0,0 +1,64 @@ +Description: New GRUB_CMDLINE_LINUX_XEN_REPLACE* options + Honour GRUB_CMDLINE_LINUX_XEN_REPLACE and + GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT, which replace GRUB_CMDLINE_LINUX + and GRUB_CMDLINE_LINUX_DEFAULT (complementing the existing options which + append). +Author: Colin Watson +Bug-Debian: http://bugs.debian.org/617538 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3294 +Last-Update: 2011-08-08 + +Index: b/docs/grub.texi +=================================================================== +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1169,8 +1169,14 @@ + + @item GRUB_CMDLINE_XEN + @itemx GRUB_CMDLINE_XEN_DEFAULT +-As @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT}, but for +-Linux and Xen. ++The values of these options are appended to the values of ++@samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux ++and Xen menu entries. ++ ++@item GRUB_CMDLINE_LINUX_XEN_REPLACE ++@item GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT ++The values of these options replace the values of @samp{GRUB_CMDLINE_LINUX} ++and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux and Xen menu entries. + + @item GRUB_DISABLE_LINUX_UUID + Normally, @command{grub-mkconfig} will generate menu entries that use +Index: b/util/grub.d/20_linux_xen.in +=================================================================== +--- a/util/grub.d/20_linux_xen.in ++++ b/util/grub.d/20_linux_xen.in +@@ -56,6 +56,14 @@ + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} + fi + ++# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT. ++if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then ++ GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ++fi ++if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then ++ GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ++fi ++ + if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ] \ + || [ "x`stat -f --printf=%T /`" = xbtrfs ]; then + rootsubvol="`make_system_path_relative_to_its_root /`" +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -239,6 +239,8 @@ + GRUB_CMDLINE_LINUX_DEFAULT \ + GRUB_CMDLINE_XEN \ + GRUB_CMDLINE_XEN_DEFAULT \ ++ GRUB_CMDLINE_LINUX_XEN_REPLACE \ ++ GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT \ + GRUB_CMDLINE_NETBSD \ + GRUB_CMDLINE_NETBSD_DEFAULT \ + GRUB_TERMINAL_INPUT \ --- grub2-1.99.orig/debian/patches/series +++ grub2-1.99/debian/patches/series @@ -0,0 +1,77 @@ +olpc_prefix_hack.patch +core_in_fs.patch +dpkg_version_comparison.patch +grub_legacy_0_based_partitions.patch +disable_floppies.patch +grub.cfg_400.patch +gfxpayload_keep_default.patch +mkrescue_diet.patch +mkconfig_skip_dmcrypt.patch +install_stage2_confusion.patch +qemu_img_exists.patch +branch_devmapper.patch +branch_squash.patch +branch_longlinuxcmd.patch +branch_parse-color.patch +branch_embed-sectors.patch +branch_fuse.patch +mkrescue_efi_modules.patch +mkconfig_loopback.patch +lazy_stat.patch +btrfs_stat.patch +partition_performance.patch +kfreebsd-9_ada_devices.patch +gfxterm_background.patch +zfs_packed_la_array.patch +xen_replace.patch +kfreebsd_mfi_devices.patch +probe_canonicalise.patch +mkconfig_skip_readme.patch +kfreebsd_lvm.patch +zfs_update.patch +no_libzfs.patch +xfs_invalid_bmap.patch +handle_new_autotools.patch +bash-completion_identifiers.patch +mkconfig_gnumach.patch +gcc_4_6_space.patch +lzo.patch +fat_uuid.patch +efiemu_fix.patch +4k_sectors.patch +efi_disk_cache.patch +ubuntu_grub_standards.patch +ubuntu_crashkernel.patch +ubuntu_quick_boot.patch +ubuntu_sleep_shift.patch +ubuntu_normal_quiet.patch +ubuntu_really_quiet.patch +ubuntu_linux_quiet.patch +ubuntu_failed_boot_menu.patch +ubuntu_no_device_map.patch +ubuntu_quiet_grub_loading.patch +ubuntu_lvm_raid_probe.patch +ubuntu_langpacks.patch +ubuntu_gfxpayload_filter.patch +ubuntu_linux_submenus.patch +ubuntu_vt_handoff.patch +ubuntu_vbe_autodetect.patch +ubuntu_blacklist_1440x900x32.patch +ubuntu_recovery_nomodeset.patch +ubuntu_recovery_nosingle.patch +ubuntu_wubi_no_windows.patch +ubuntu_probe_dmraid.patch +ubuntu_qemu_no_kvm.patch +ubuntu_probe_nonexistent_loopback.patch +ubuntu_efi_device_discovery.patch +ubuntu_efi_supporting_backports.patch +ubuntu_efifwsetup.patch +ubuntu_no_insmod_on_sb.patch +ubuntu_linuxefi.patch +ubuntu_linuxefi_amd64_only.patch +ubuntu_linuxefi_require_shim.patch +ubuntu_linuxefi_non_sb_fallback.patch +ubuntu_use_signed_kernel.patch +ubuntu_install_signed.patch +ubuntu_uefi_firmware_setup.patch +ubuntu_linuxefi_debug.patch --- grub2-1.99.orig/debian/patches/probe_canonicalise.patch +++ grub2-1.99/debian/patches/probe_canonicalise.patch @@ -0,0 +1,26 @@ +Description: Canonicalise path argument to grub-probe + This fixes use of "/path/.." as in grub-install for EFI, as well as + handling symlinks correctly. +Author: Mario Limonciello +Author: Colin Watson +Bug-Debian: http://bugs.debian.org/637768 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3401 +Last-Update: 2011-08-15 + +Index: b/util/grub-probe.c +=================================================================== +--- a/util/grub-probe.c ++++ b/util/grub-probe.c +@@ -108,7 +108,10 @@ + #endif + } + else +- device_name = grub_guess_root_device (path); ++ { ++ grub_path = canonicalize_file_name (path); ++ device_name = grub_guess_root_device (grub_path); ++ } + + if (! device_name) + grub_util_error ("cannot find a device for %s (is /dev mounted?)", path); --- grub2-1.99.orig/debian/patches/ubuntu_linux_quiet.patch +++ grub2-1.99/debian/patches/ubuntu_linux_quiet.patch @@ -0,0 +1,48 @@ +Description: Suppress kernel/initrd progress messages, except in recovery mode +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/386922 +Forwarded: no +Last-Update: 2011-01-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -114,15 +114,23 @@ + fi + printf '%s\n' "${prepare_boot_cache}" + fi +- message="$(gettext_printf "Loading Linux %s ..." ${version})" +- cat << EOF ++ if [ "x$5" != "xquiet" ]; then ++ message="$(gettext_printf "Loading Linux %s ..." ${version})" ++ cat << EOF + echo '$message' ++EOF ++ fi ++ cat << EOF + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + if test -n "${initrd}" ; then +- message="$(gettext_printf "Loading initial ramdisk ...")" +- cat << EOF ++ if [ "x$5" != "xquiet" ]; then ++ message="$(gettext_printf "Loading initial ramdisk ...")" ++ cat << EOF + echo '$message' ++EOF ++ fi ++ cat << EOF + initrd ${rel_dirname}/${initrd} + EOF + fi +@@ -190,7 +198,8 @@ + fi + + linux_entry "${OS}" "${version}" false \ +- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" ++ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \ ++ quiet + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" true \ + "single ${GRUB_CMDLINE_LINUX}" --- grub2-1.99.orig/debian/patches/ubuntu_quick_boot.patch +++ grub2-1.99/debian/patches/ubuntu_quick_boot.patch @@ -0,0 +1,157 @@ +Description: Bypass menu unless other OSes are installed or Shift is pressed + If other operating systems are installed, then automatically unhide the + menu. Otherwise, if GRUB_HIDDEN_TIMEOUT is 0, then use keystatus if + available to check whether Shift is pressed. If it is, show the menu, + otherwise boot immediately. If keystatus is not available, then fall back + to a short delay interruptible with Escape. + . + This may or may not remain Ubuntu-specific, although it's not obviously + wanted upstream. It implements a requirement of + https://wiki.ubuntu.com/DesktopExperienceTeam/KarmicBootExperienceDesignSpec#Bootloader. +Author: Colin Watson +Forwarded: no +Last-Update: 2011-01-05 + +Index: b/util/grub.d/00_header.in +=================================================================== +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -225,22 +225,9 @@ + + make_timeout () + { +- if [ "x${1}" != "x" ] ; then +- if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then +- verbose= +- else +- verbose=" --verbose" +- fi +- cat << EOF +-if sleep$verbose --interruptible ${1} ; then +- set timeout=${2} +-fi +-EOF +- else +- cat << EOF ++ cat << EOF + set timeout=${2} + EOF +- fi + } + + if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then +Index: b/util/grub.d/30_os-prober.in +=================================================================== +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -23,22 +23,80 @@ + + . "@datadir@/grub/grub-mkconfig_lib" + ++found_other_os= ++ ++make_timeout () { ++ if [ "x${found_other_os}" = "x" ] ; then ++ if [ "x${1}" != "x" ] ; then ++ if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then ++ verbose= ++ else ++ verbose=" --verbose" ++ fi ++ ++ if [ "x${1}" = "x0" ] ; then ++ cat < /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then + # missing os-prober and/or linux-boot-prober ++ adjust_timeout + exit 0 + fi + + OSPROBED="`os-prober | tr ' ' '^' | paste -s -d ' '`" + if [ -z "${OSPROBED}" ] ; then + # empty os-prober output, nothing doing ++ adjust_timeout + exit 0 + fi + + osx_entry() { ++ found_other_os=1 + cat << EOF + menuentry "${LONGNAME} (${2}-bit) (on ${DEVICE})" --class osx --class darwin --class os { + EOF +@@ -104,6 +162,7 @@ + case ${BOOT} in + chain) + ++ found_other_os=1 + cat << EOF + menuentry "${LONGNAME} (on ${DEVICE})" --class windows --class os { + EOF +@@ -146,6 +205,7 @@ + LINITRD="${LINITRD#/boot}" + fi + ++ found_other_os=1 + cat << EOF + menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os { + EOF +@@ -173,6 +233,7 @@ + osx_entry xnu_kernel64 64 + ;; + hurd) ++ found_other_os=1 + cat << EOF + menuentry "${LONGNAME} (on ${DEVICE})" --class hurd --class gnu --class os { + EOF +@@ -202,3 +263,5 @@ + ;; + esac + done ++ ++adjust_timeout --- grub2-1.99.orig/debian/patches/no_libzfs.patch +++ grub2-1.99/debian/patches/no_libzfs.patch @@ -0,0 +1,227 @@ +--- a/grub-core/kern/emu/getroot.c ++++ b/grub-core/kern/emu/getroot.c +@@ -32,6 +32,9 @@ + #include + #include + #include ++#ifdef HAVE_LIMITS_H ++#include ++#endif + #include + #include + +@@ -238,7 +241,67 @@ + + #endif /* __linux__ */ + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) ++static char * ++find_device_from_pool (const char *poolname) ++{ ++ char *device; ++ char *cmd; ++ FILE *fp; ++ int ret; ++ char *line; ++ size_t len; ++ int st; ++ ++ char name[PATH_MAX], state[256], readlen[256], writelen[256], cksum[256], notes[256]; ++ unsigned int dummy; ++ ++ cmd = xasprintf ("zpool status %s", poolname); ++ fp = popen (cmd, "r"); ++ free (cmd); ++ ++ st = 0; ++ while (st < 3) ++ { ++ line = NULL; ++ ret = getline (&line, &len, fp); ++ if (ret == -1) ++ { ++ pclose (fp); ++ return NULL; ++ } ++ ++ if (sscanf (line, " %s %s %s %s %s %s", name, state, readlen, writelen, cksum, notes) >= 5) ++ switch (st) ++ { ++ case 0: ++ if (!strcmp (name, "NAME") ++ && !strcmp (state, "STATE") ++ && !strcmp (readlen, "READ") ++ && !strcmp (writelen, "WRITE") ++ && !strcmp (cksum, "CKSUM")) ++ st++; ++ break; ++ case 1: ++ if (!strcmp (name, poolname)) ++ st++; ++ break; ++ case 2: ++ if (strcmp (name, "mirror") && !sscanf (name, "mirror-%u", &dummy) ++ && !sscanf (name, "raidz%u", &dummy) ++ && !strcmp (state, "ONLINE")) ++ st++; ++ break; ++ } ++ ++ free (line); ++ } ++ pclose (fp); ++ ++ device = xasprintf ("/dev/%s", name); ++ ++ return device; ++} ++ + static char * + find_root_device_from_libzfs (const char *dir) + { +@@ -250,49 +313,7 @@ + if (! poolname) + return NULL; + +- { +- zpool_handle_t *zpool; +- libzfs_handle_t *libzfs; +- nvlist_t *config, *vdev_tree; +- nvlist_t **children, **path; +- unsigned int nvlist_count; +- unsigned int i; +- +- libzfs = grub_get_libzfs_handle (); +- if (! libzfs) +- return NULL; +- +- zpool = zpool_open (libzfs, poolname); +- config = zpool_get_config (zpool, NULL); +- +- if (nvlist_lookup_nvlist (config, "vdev_tree", &vdev_tree) != 0) +- error (1, errno, "nvlist_lookup_nvlist (\"vdev_tree\")"); +- +- if (nvlist_lookup_nvlist_array (vdev_tree, "children", &children, &nvlist_count) != 0) +- error (1, errno, "nvlist_lookup_nvlist_array (\"children\")"); +- assert (nvlist_count > 0); +- +- while (nvlist_lookup_nvlist_array (children[0], "children", +- &children, &nvlist_count) == 0) +- assert (nvlist_count > 0); +- +- for (i = 0; i < nvlist_count; i++) +- { +- if (nvlist_lookup_string (children[i], "path", &device) != 0) +- error (1, errno, "nvlist_lookup_string (\"path\")"); +- +- struct stat st; +- if (stat (device, &st) == 0) +- { +- device = xstrdup (device); +- break; +- } +- +- device = NULL; +- } +- +- zpool_close (zpool); +- } ++ device = find_device_from_pool (poolname); + + free (poolname); + if (poolfs) +@@ -300,7 +321,6 @@ + + return device; + } +-#endif + + #ifdef __MINGW32__ + +@@ -603,10 +623,8 @@ + os_dev = grub_find_root_device_from_mountinfo (dir, NULL); + #endif /* __linux__ */ + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + if (!os_dev) + os_dev = find_root_device_from_libzfs (dir); +-#endif + + if (os_dev) + { +@@ -708,7 +726,7 @@ + } + + int +-grub_util_get_dev_abstraction (const char *os_dev __attribute__((unused))) ++grub_util_get_dev_abstraction (const char *os_dev) + { + #if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + /* User explicitly claims that this drive is visible by BIOS. */ +--- a/grub-core/kern/emu/misc.c ++++ b/grub-core/kern/emu/misc.c +@@ -287,7 +287,6 @@ + } + #endif /* HAVE_LIBZFS */ + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + /* ZFS has similar problems to those of btrfs (see above). */ + void + grub_find_zpool_from_dir (const char *dir, char **poolname, char **poolfs) +@@ -348,7 +347,6 @@ + else + *poolfs = xstrdup (""); + } +-#endif + + /* This function never prints trailing slashes (so that its output + can be appended a slash unconditionally). */ +@@ -361,22 +359,18 @@ + dev_t num; + size_t len; + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + char *poolfs = NULL; +-#endif + + /* canonicalize. */ + p = canonicalize_file_name (path); + if (p == NULL) + grub_util_error ("failed to get canonical path of %s", path); + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + /* For ZFS sub-pool filesystems, could be extended to others (btrfs?). */ + { + char *dummy; + grub_find_zpool_from_dir (p, &dummy, &poolfs); + } +-#endif + + len = strlen (p) + 1; + buf = xstrdup (p); +@@ -428,10 +422,8 @@ + } + #endif + free (buf2); +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + if (poolfs) + return xasprintf ("/%s/@", poolfs); +-#endif + return xstrdup (""); + } + else +@@ -488,14 +480,12 @@ + len--; + } + +-#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR) + if (poolfs) + { + ret = xasprintf ("/%s/@%s", poolfs, buf3); + free (buf3); + } + else +-#endif + ret = buf3; + + return ret; --- grub2-1.99.orig/debian/patches/fat_uuid.patch +++ grub2-1.99/debian/patches/fat_uuid.patch @@ -0,0 +1,25 @@ +Description: Make FAT UUID uppercase to match Linux +Author: Vladimir Serbinenko +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3482 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/948716 +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3482 +Last-Update: 2012-03-19 + +Index: b/grub-core/fs/fat.c +=================================================================== +--- a/grub-core/fs/fat.c ++++ b/grub-core/fs/fat.c +@@ -836,9 +836,12 @@ + data = grub_fat_mount (disk); + if (data) + { ++ char *ptr; + *uuid = grub_xasprintf ("%04x-%04x", + (grub_uint16_t) (data->uuid >> 16), + (grub_uint16_t) data->uuid); ++ for (ptr = *uuid; ptr && *ptr; ptr++) ++ *ptr = grub_toupper (*ptr); + } + else + *uuid = NULL; --- grub2-1.99.orig/debian/patches/bash-completion_identifiers.patch +++ grub2-1.99/debian/patches/bash-completion_identifiers.patch @@ -0,0 +1,45 @@ +Description: Fix incorrect identifiers in bash-completion +Author: Andreas Born +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3426 +Last-Update: 2012-03-05 + +Index: b/util/bash-completion.d/grub-completion.bash.in +=================================================================== +--- a/util/bash-completion.d/grub-completion.bash.in ++++ b/util/bash-completion.d/grub-completion.bash.in +@@ -402,7 +402,7 @@ + # + # grub-mkpasswd-pbkdf2 + # +-_grub_mkpasswd-pbkdf2 () { ++_grub_mkpasswd_pbkdf2 () { + local cur + + COMPREPLY=() +@@ -417,7 +417,7 @@ + } + __grub_mkpasswd_pbkdf2_program=$( echo grub-mkpasswd-pbkdf2 | sed "@program_transform_name@" ) + have ${__grub_mkpasswd_pbkdf2_program} && \ +- complete -F _grub_mkpasswd-pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program} ++ complete -F _grub_mkpasswd_pbkdf2 -o filenames ${__grub_mkpasswd_pbkdf2_program} + unset __grub_mkpasswd_pbkdf2_program + + +@@ -462,7 +462,7 @@ + # + # grub-script-check + # +-_grub_script-check () { ++_grub_script_check () { + local cur + + COMPREPLY=() +@@ -477,7 +477,7 @@ + } + __grub_script_check_program=$( echo grub-script-check | sed "@program_transform_name@" ) + have ${__grub_script_check_program} && \ +- complete -F _grub_script-check -o filenames ${__grub_script_check_program} ++ complete -F _grub_script_check -o filenames ${__grub_script_check_program} + + + # Local variables: --- grub2-1.99.orig/debian/patches/handle_new_autotools.patch +++ grub2-1.99/debian/patches/handle_new_autotools.patch @@ -0,0 +1,535 @@ +Description: Handle new autotools, and add some missing quotes in the process + Backported by Colin Watson; I modified this to keep update-grub_lib in + place until such time as we upgrade to a newer upstream snapshot. +Author: Vladimir Serbinenko +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3766 +Last-Update: 2012-01-31 + +Index: b/Makefile.am +=================================================================== +--- a/Makefile.am ++++ b/Makefile.am +@@ -101,8 +101,8 @@ + # Install config.h into platformdir + platform_HEADERS = config.h + +-pkglib_DATA += grub-mkconfig_lib +-pkglib_DATA += update-grub_lib ++pkgdata_DATA += grub-mkconfig_lib ++pkgdata_DATA += update-grub_lib + + + if COND_i386_coreboot +Index: b/conf/Makefile.common +=================================================================== +--- a/conf/Makefile.common ++++ b/conf/Makefile.common +@@ -137,7 +137,7 @@ + + man_MANS = + noinst_DATA = +-pkglib_DATA = ++pkgdata_DATA = + bin_SCRIPTS = + sbin_SCRIPTS = + bin_PROGRAMS = +@@ -147,7 +147,6 @@ + grubconf_DATA = + check_PROGRAMS = + noinst_SCRIPTS = +-pkglib_SCRIPTS = + noinst_PROGRAMS = + grubconf_SCRIPTS = + noinst_LIBRARIES = +Index: b/tests/util/grub-shell-tester.in +=================================================================== +--- a/tests/util/grub-shell-tester.in ++++ b/tests/util/grub-shell-tester.in +@@ -19,18 +19,17 @@ + # Initialize some variables. + transform="@program_transform_name@" + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-builddir=@builddir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++builddir="@builddir@" + PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_TARNAME=@PACKAGE_TARNAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ + target_cpu=@target_cpu@ + + # Force build directory components +-PATH=${builddir}:$PATH ++PATH="${builddir}:$PATH" + export PATH + + # Usage: usage +@@ -85,23 +84,23 @@ + if [ "x${source}" = x ] ; then + tmpfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + while read REPLY; do +- echo $REPLY >> ${tmpfile} ++ echo $REPLY >> "${tmpfile}" + done +- source=${tmpfile} ++ source="${tmpfile}" + fi + + outfile1=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +-@builddir@/grub-shell --qemu-opts="${qemuopts}" --modules=${modules} ${source} >${outfile1} ++"@builddir@/grub-shell" --qemu-opts="${qemuopts}" --modules=${modules} "${source}" >"${outfile1}" + + outfile2=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +-bash ${source} >${outfile2} ++bash "${source}" >"${outfile2}" + +-if ! diff -q ${outfile1} ${outfile2} >/dev/null ++if ! diff -q "${outfile1}" "${outfile2}" >/dev/null + then + echo "${source}: GRUB and BASH outputs did not match (see diff -u ${outfile1} ${outfile2})" + status=1 + else +- rm -f ${outfile1} ${outfile2} ++ rm -f "${outfile1}" "${outfile2}" + fi + + exit $status +Index: b/tests/util/grub-shell.in +=================================================================== +--- a/tests/util/grub-shell.in ++++ b/tests/util/grub-shell.in +@@ -19,11 +19,10 @@ + # Initialize some variables. + transform="@program_transform_name@" + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-builddir=@builddir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++builddir="@builddir@" + PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_TARNAME=@PACKAGE_TARNAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ +@@ -31,7 +30,7 @@ + platform=@platform@ + + # Force build directory components +-PATH=${builddir}:$PATH ++PATH="${builddir}:$PATH" + export PATH + + # Usage: usage +@@ -140,9 +139,9 @@ + + isofile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + if [ x$boot != xnet ]; then +- sh @builddir@/grub-mkrescue --grub-mkimage=${builddir}/grub-mkimage --output=${isofile} --override-directory=${builddir}/grub-core \ ++ sh "@builddir@/grub-mkrescue" "--grub-mkimage=${builddir}/grub-mkimage" "--output=${isofile}" "--override-directory=${builddir}/grub-core" \ + --rom-directory="${rom_directory}" \ +- /boot/grub/grub.cfg=${cfgfile} /boot/grub/testcase.cfg=${source} \ ++ "/boot/grub/grub.cfg=${cfgfile}" "/boot/grub/testcase.cfg=${source}" \ + ${files} >/dev/null 2>&1 + fi + if [ x$boot = xhd ]; then +@@ -173,12 +172,12 @@ + + if [ x$boot = xnet ]; then + netdir=`mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 +- sh @builddir@/grub-mknetdir --grub-mkimage=${builddir}/grub-mkimage --override-directory=${builddir}/grub-core --net-directory=$netdir +- cp ${cfgfile} $netdir/boot/grub/grub.cfg +- cp ${source} $netdir/boot/grub/testcase.cfg +- ${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -boot n -net user,tftp=$netdir,bootfile=/boot/grub/$target_cpu-$platform/core.0 -net nic | cat | tr -d "\r" ++ sh "@builddir@/grub-mknetdir" "--grub-mkimage=${builddir}/grub-mkimage" "--override-directory=${builddir}/grub-core" "--net-directory=$netdir" ++ cp "${cfgfile}" "$netdir/boot/grub/grub.cfg" ++ cp "${source}" "$netdir/boot/grub/testcase.cfg" ++ "${qemu}" ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -boot n -net "user,tftp=$netdir,bootfile=/boot/grub/$target_cpu-$platform/core.0" -net nic | cat | tr -d "\r" + else +- ${qemu} ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | cat | tr -d "\r" ++ "${qemu}" ${qemuopts} -nographic -serial file:/dev/stdout -monitor file:/dev/null -${device} ${isofile} ${bootdev} | cat | tr -d "\r" + fi + rm -f "${isofile}" "${imgfile}" + rm -rf "${rom_directory}" +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -21,6 +21,7 @@ + + prefix="@prefix@" + exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" + sbindir="@sbindir@" + bindir="@bindir@" + libdir="@libdir@" +@@ -32,6 +33,7 @@ + platform=@platform@ + host_os=@host_os@ + pkglibdir="${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}`" ++datadir="@datadir@" + localedir="@datadir@/locale" + + self="`basename $0`" +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -18,26 +18,27 @@ + # along with GRUB. If not, see . + + transform="@program_transform_name@" +- +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-sbindir=@sbindir@ +-bindir=@bindir@ +-libdir=@libdir@ +-sysconfdir=@sysconfdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++sbindir="@sbindir@" ++bindir="@bindir@" ++sysconfdir="@sysconfdir@" + PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ + host_os=@host_os@ +-datarootdir=@datarootdir@ +-datadir=@datadir@ +-pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"` ++datadir="@datadir@" ++pkgdatadir="${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`" + grub_cfg="" +-grub_mkconfig_dir=${sysconfdir}/grub.d ++grub_mkconfig_dir="${sysconfdir}"/grub.d + + self=`basename $0` + +-grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed "${transform}"` +-grub_probe=${sbindir}/`echo grub-probe | sed "${transform}"` ++grub_mkdevicemap="${sbindir}/`echo grub-mkdevicemap | sed "${transform}"`" ++grub_probe="${sbindir}/`echo grub-probe | sed "${transform}"`" + grub_script_check="${bindir}/`echo grub-script-check | sed "${transform}"`" + + GRUB_PREFIX=`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"` +@@ -95,7 +96,7 @@ + esac + done + +-. ${libdir}/grub/grub-mkconfig_lib ++. "${datadir}/grub/grub-mkconfig_lib" + + if [ "x$EUID" = "x" ] ; then + EUID=`id -u` +Index: b/util/grub-mknetdir.in +=================================================================== +--- a/util/grub-mknetdir.in ++++ b/util/grub-mknetdir.in +@@ -19,25 +19,23 @@ + # Initialize some variables. + transform="@program_transform_name@" + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-sbindir=@sbindir@ +-bindir=@bindir@ +-libdir=@libdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++bindir="@bindir@" ++libdir="@libdir@" + PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_TARNAME=@PACKAGE_TARNAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ + target_cpu=@target_cpu@ + platform=@platform@ + host_os=@host_os@ +-pkglibdir=${libdir}/`echo ${PACKAGE_TARNAME}/${target_cpu}-${platform} | sed ${transform}` +-localedir=@datadir@/locale + native_platform=@platform@ + pkglib_DATA="moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst" + + self=`basename $0` + +-grub_mkimage=${bindir}/`echo grub-mkimage | sed ${transform}` ++grub_mkimage="${bindir}/`echo grub-mkimage | sed ${transform}`" + rootdir=/srv/tftp + grub_prefix=`echo /boot/grub | sed ${transform}` + modules= +@@ -48,7 +46,7 @@ + debug=no + debug_image= + subdir=`echo /boot/grub | sed ${transform}` +-pc_dir=${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-pc ++pc_dir="${libdir}/$(echo ${PACKAGE_TARNAME} | sed ${transform})/i386-pc" + + # Usage: usage + # Print the usage. +@@ -170,12 +168,12 @@ + config_opt= + mkdir -p "$grubdir" || exit 1 + +- for file in ${grubdir}/*.mod ${grubdir}/*.lst ${grubdir}/*.img ${grubdir}/efiemu??.o; do +- if test -f $file && [ "`basename $file`" != menu.lst ]; then +- rm -f $file || exit 1 ++ for file in "${grubdir}"/*.mod "${grubdir}"/*.lst "${grubdir}"/*.img "${grubdir}"/efiemu??.o; do ++ if test -f "$file" && [ "`basename $file`" != menu.lst ]; then ++ rm -f "$file" || exit 1 + fi + done +- for file in ${input_dir}/*.mod; do ++ for file in "${input_dir}"/*.mod; do + if test -f "$file"; then + cp -f "$file" "$grubdir/" + fi +@@ -213,7 +211,7 @@ + source ${subdir}/grub.cfg + EOF + +- $grub_mkimage ${config_opt} -d "${input_dir}" -O ${mkimage_target} --output=${grubdir}/core.$ext --prefix=$prefix $modules $netmodules || exit 1 ++ "$grub_mkimage" ${config_opt} -d "${input_dir}" -O ${mkimage_target} "--output=${grubdir}/core.$ext" "--prefix=$prefix" $modules $netmodules || exit 1 + echo "Netboot directory for ${platform} created. Configure your DHCP server to point to ${subdir}/${platform}/core.$ext" + } + +Index: b/util/grub-mkrescue.in +=================================================================== +--- a/util/grub-mkrescue.in ++++ b/util/grub-mkrescue.in +@@ -18,12 +18,14 @@ + # along with GRUB. If not, see . + + # Initialize some variables. ++ + transform="@program_transform_name@" + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++bindir="@bindir@" ++libdir="@libdir@" + PACKAGE_NAME=@PACKAGE_NAME@ + PACKAGE_TARNAME=@PACKAGE_TARNAME@ + PACKAGE_VERSION=@PACKAGE_VERSION@ +Index: b/util/grub.d/00_header.in +=================================================================== +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -19,13 +19,13 @@ + + transform="@program_transform_name@" + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" + locale_dir=`echo ${GRUB_PREFIX}/locale | sed ${transform}` + grub_lang=`echo $LANG | cut -d . -f 1` + +-. ${libdir}/grub/grub-mkconfig_lib ++. "@datadir@/grub/grub-mkconfig_lib" + + # Do this as early as possible, since other commands might depend on it. + # (e.g. the `loadfont' command might need lvm or raid modules) +@@ -112,7 +112,7 @@ + done + + if [ "x$serial" = x1 ]; then +- if ! test -e ${GRUB_PREFIX}/serial.mod ; then ++ if ! test -e "${GRUB_PREFIX}/serial.mod" ; then + echo "Serial terminal not available on this platform." >&2 ; exit 1 + fi + +Index: b/util/grub.d/10_hurd.in +=================================================================== +--- a/util/grub.d/10_hurd.in ++++ b/util/grub.d/10_hurd.in +@@ -17,10 +17,10 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++. "@datadir@/grub/grub-mkconfig_lib" + + CLASS="--class gnu --class os" + +Index: b/util/grub.d/10_kfreebsd.in +=================================================================== +--- a/util/grub.d/10_kfreebsd.in ++++ b/util/grub.d/10_kfreebsd.in +@@ -17,14 +17,13 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++. "@datadir@/grub/grub-mkconfig_lib" + + export TEXTDOMAIN=@PACKAGE@ +-export TEXTDOMAINDIR=@localedir@ ++export TEXTDOMAINDIR="@localedir@" + + CLASS="--class os" + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -17,14 +17,14 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++. "@datadir@/grub/grub-mkconfig_lib" + + export TEXTDOMAIN=@PACKAGE@ +-export TEXTDOMAINDIR=@localedir@ ++export TEXTDOMAINDIR="@localedir@" + + CLASS="--class gnu-linux --class gnu --class os" + +Index: b/util/grub.d/10_netbsd.in +=================================================================== +--- a/util/grub.d/10_netbsd.in ++++ b/util/grub.d/10_netbsd.in +@@ -17,14 +17,13 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++. "@datadir@/grub/grub-mkconfig_lib" + + export TEXTDOMAIN=@PACKAGE@ +-export TEXTDOMAINDIR=@localedir@ ++export TEXTDOMAINDIR="@localedir@" + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS="NetBSD" +Index: b/util/grub.d/10_windows.in +=================================================================== +--- a/util/grub.d/10_windows.in ++++ b/util/grub.d/10_windows.in +@@ -17,10 +17,11 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++. "@datadir@/grub/grub-mkconfig_lib" + + case "`uname 2>/dev/null`" in + CYGWIN*) ;; +Index: b/util/grub.d/20_linux_xen.in +=================================================================== +--- a/util/grub.d/20_linux_xen.in ++++ b/util/grub.d/20_linux_xen.in +@@ -17,14 +17,14 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-bindir=@bindir@ +-libdir=@libdir@ +-. ${libdir}/grub/grub-mkconfig_lib ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" ++ ++. "@datadir@/grub/grub-mkconfig_lib" + + export TEXTDOMAIN=@PACKAGE@ +-export TEXTDOMAINDIR=@localedir@ ++export TEXTDOMAINDIR="@localedir@" + + CLASS="--class gnu-linux --class gnu --class os --class xen" + +Index: b/util/grub.d/30_os-prober.in +=================================================================== +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -17,11 +17,11 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" + +-. ${libdir}/grub/grub-mkconfig_lib ++. "@datadir@/grub/grub-mkconfig_lib" + + if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then + exit 0 +Index: b/util/update-grub_lib.in +=================================================================== +--- a/util/update-grub_lib.in ++++ b/util/update-grub_lib.in +@@ -14,10 +14,10 @@ + # You should have received a copy of the GNU General Public License + # along with GRUB. If not, see . + +-prefix=@prefix@ +-exec_prefix=@exec_prefix@ +-libdir=@libdir@ ++prefix="@prefix@" ++exec_prefix="@exec_prefix@" ++datarootdir="@datarootdir@" + +-. ${libdir}/grub/grub-mkconfig_lib ++. "@datadir@/grub/grub-mkconfig_lib" + + grub_warn "update-grub_lib is deprecated, use grub-mkconfig_lib instead" --- grub2-1.99.orig/debian/patches/ubuntu_efi_device_discovery.patch +++ grub2-1.99/debian/patches/ubuntu_efi_device_discovery.patch @@ -0,0 +1,390 @@ +Description: Several EFI device discovery patches to fix boot failures + Move compare_device_paths to an externally-visible function. + . + Fix off-by-one error. + . + Accept whole disk declared as partition. + . + Fix incorrect memory usage. + . + Remove unreachable code. + . + Simplify root device discovery and don't fail when trying to open incorrect + devices. +Author: Vladimir Serbinenko +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3375 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3383 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3652 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3781 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/975061 +Forwarded: not-needed +Last-Update: 2012-04-17 + +Index: b/grub-core/disk/efi/efidisk.c +=================================================================== +--- a/grub-core/disk/efi/efidisk.c ++++ b/grub-core/disk/efi/efidisk.c +@@ -84,54 +84,6 @@ + return p; + } + +-/* Compare device paths. */ +-static int +-compare_device_paths (const grub_efi_device_path_t *dp1, +- const grub_efi_device_path_t *dp2) +-{ +- if (! dp1 || ! dp2) +- /* Return non-zero. */ +- return 1; +- +- while (1) +- { +- grub_efi_uint8_t type1, type2; +- grub_efi_uint8_t subtype1, subtype2; +- grub_efi_uint16_t len1, len2; +- int ret; +- +- type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1); +- type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2); +- +- if (type1 != type2) +- return (int) type2 - (int) type1; +- +- subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1); +- subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2); +- +- if (subtype1 != subtype2) +- return (int) subtype1 - (int) subtype2; +- +- len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1); +- len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2); +- +- if (len1 != len2) +- return (int) len1 - (int) len2; +- +- ret = grub_memcmp (dp1, dp2, len1); +- if (ret != 0) +- return ret; +- +- if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) +- break; +- +- dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1); +- dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); +- } +- +- return 0; +-} +- + static struct grub_efidisk_data * + make_devices (void) + { +@@ -214,7 +166,7 @@ + if (parent == d) + continue; + +- if (compare_device_paths (parent->device_path, dp) == 0) ++ if (grub_efi_compare_device_paths (parent->device_path, dp) == 0) + { + /* Found. */ + if (! parent->last_device_path) +@@ -249,7 +201,7 @@ + ldp->length[0] = sizeof (*ldp); + ldp->length[1] = 0; + +- if (compare_device_paths (dp, d->device_path) == 0) ++ if (grub_efi_compare_device_paths (dp, d->device_path) == 0) + if (hook (p)) + { + grub_free (dp); +@@ -273,11 +225,11 @@ + { + int ret; + +- ret = compare_device_paths (find_last_device_path ((*p)->device_path), +- find_last_device_path (d->device_path)); ++ ret = grub_efi_compare_device_paths (find_last_device_path ((*p)->device_path), ++ find_last_device_path (d->device_path)); + if (ret == 0) +- ret = compare_device_paths ((*p)->device_path, +- d->device_path); ++ ret = grub_efi_compare_device_paths ((*p)->device_path, ++ d->device_path); + if (ret == 0) + return; + else if (ret > 0) +@@ -530,7 +482,7 @@ + and total sectors should be replaced with total blocks. */ + grub_dprintf ("efidisk", "m = %p, last block = %llx, block size = %x\n", + m, (unsigned long long) m->last_block, m->block_size); +- disk->total_sectors = m->last_block; ++ disk->total_sectors = m->last_block + 1; + if (m->block_size & (m->block_size - 1) || !m->block_size) + return grub_error (GRUB_ERR_IO, "invalid sector size %d", + m->block_size); +@@ -703,10 +655,52 @@ + return 0; + } + ++#define NEEDED_BUFLEN sizeof ("XdXXXXXXXXXX") ++static inline int ++get_diskname_from_path_real (const grub_efi_device_path_t *path, ++ struct grub_efidisk_data *head, ++ char *buf) ++{ ++ int count = 0; ++ struct grub_efidisk_data *d; ++ for (d = head, count = 0; d; d = d->next, count++) ++ if (grub_efi_compare_device_paths (d->device_path, path) == 0) ++ { ++ grub_snprintf (buf, NEEDED_BUFLEN - 1, "d%d", count); ++ return 1; ++ } ++ return 0; ++} ++ ++static inline int ++get_diskname_from_path (const grub_efi_device_path_t *path, ++ char *buf) ++{ ++ if (get_diskname_from_path_real (path, hd_devices, buf + 1)) ++ { ++ buf[0] = 'h'; ++ return 1; ++ } ++ ++ if (get_diskname_from_path_real (path, fd_devices, buf + 1)) ++ { ++ buf[0] = 'f'; ++ return 1; ++ } ++ ++ if (get_diskname_from_path_real (path, cd_devices, buf + 1)) ++ { ++ buf[0] = 'c'; ++ return 1; ++ } ++ return 0; ++} ++ + char * + grub_efidisk_get_device_name (grub_efi_handle_t *handle) + { + grub_efi_device_path_t *dp, *ldp; ++ char device_name[NEEDED_BUFLEN]; + + dp = grub_efi_get_device_path (handle); + if (! dp) +@@ -720,39 +714,13 @@ + && (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) + == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)) + { +- /* This is a hard disk partition. */ +- grub_disk_t parent = 0; +- grub_partition_t tpart = NULL; +- char *device_name; ++ char *partition_name = NULL; ++ char *dev_name; + grub_efi_device_path_t *dup_dp, *dup_ldp; + grub_efi_hard_drive_device_path_t hd; +- auto int find_parent_disk (const char *name); +- auto int find_partition (grub_disk_t disk, const grub_partition_t part); +- +- /* Find the disk which is the parent of a given hard disk partition. */ +- int find_parent_disk (const char *name) +- { +- grub_disk_t disk; +- +- disk = grub_disk_open (name); +- if (! disk) +- return 1; +- +- if (disk->dev->id == GRUB_DISK_DEVICE_EFIDISK_ID) +- { +- struct grub_efidisk_data *d; +- +- d = disk->data; +- if (compare_device_paths (d->device_path, dup_dp) == 0) +- { +- parent = disk; +- return 1; +- } +- } ++ grub_disk_t parent = 0; + +- grub_disk_close (disk); +- return 0; +- } ++ auto int find_partition (grub_disk_t disk, const grub_partition_t part); + + /* Find the identical partition. */ + int find_partition (grub_disk_t disk __attribute__ ((unused)), +@@ -761,7 +729,7 @@ + if (grub_partition_get_start (part) == hd.partition_start + && grub_partition_get_len (part) == hd.partition_size) + { +- tpart = part; ++ partition_name = grub_partition_get_name (part); + return 1; + } + +@@ -780,7 +748,9 @@ + dup_ldp->length[0] = sizeof (*dup_ldp); + dup_ldp->length[1] = 0; + +- grub_efidisk_iterate (find_parent_disk); ++ if (!get_diskname_from_path (dup_dp, device_name)) ++ return 0; ++ parent = grub_disk_open (device_name); + grub_free (dup_dp); + + if (! parent) +@@ -788,58 +758,33 @@ + + /* Find a partition which matches the hard drive device path. */ + grub_memcpy (&hd, ldp, sizeof (hd)); +- grub_partition_iterate (parent, find_partition); +- +- if (! tpart) ++ if (hd.partition_start == 0 ++ && hd.partition_size == grub_disk_get_size (parent)) + { +- grub_disk_close (parent); +- return 0; ++ dev_name = grub_strdup (parent->name); + } +- +- { +- char *partition_name = grub_partition_get_name (tpart); +- device_name = grub_xasprintf ("%s,%s", parent->name, partition_name); +- grub_free (partition_name); +- } +- grub_disk_close (parent); +- +- return device_name; +- } +- else +- { +- /* This should be an entire disk. */ +- auto int find_disk (const char *name); +- char *device_name = 0; +- +- int find_disk (const char *name) ++ else + { +- grub_disk_t disk; +- +- disk = grub_disk_open (name); +- if (! disk) +- return 1; ++ grub_partition_iterate (parent, find_partition); + +- if (disk->dev->id == GRUB_DISK_DEVICE_EFIDISK_ID) ++ if (! partition_name) + { +- struct grub_efidisk_data *d; +- +- d = disk->data; +- if (compare_device_paths (d->device_path, dp) == 0) +- { +- device_name = grub_strdup (disk->name); +- grub_disk_close (disk); +- return 1; +- } ++ grub_disk_close (parent); ++ return 0; + } + +- grub_disk_close (disk); +- return 0; +- ++ dev_name = grub_xasprintf ("%s,%s", parent->name, partition_name); ++ grub_free (partition_name); + } ++ grub_disk_close (parent); + +- grub_efidisk_iterate (find_disk); +- return device_name; ++ return dev_name; ++ } ++ else ++ { ++ /* This should be an entire disk. */ ++ if (!get_diskname_from_path (dp, device_name)) ++ return 0; ++ return grub_strdup (device_name); + } +- +- return 0; + } +Index: b/grub-core/kern/efi/efi.c +=================================================================== +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -740,3 +740,51 @@ + dp = (grub_efi_device_path_t *) ((char *) dp + len); + } + } ++ ++/* Compare device paths. */ ++int ++grub_efi_compare_device_paths (const grub_efi_device_path_t *dp1, ++ const grub_efi_device_path_t *dp2) ++{ ++ if (! dp1 || ! dp2) ++ /* Return non-zero. */ ++ return 1; ++ ++ while (1) ++ { ++ grub_efi_uint8_t type1, type2; ++ grub_efi_uint8_t subtype1, subtype2; ++ grub_efi_uint16_t len1, len2; ++ int ret; ++ ++ type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1); ++ type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2); ++ ++ if (type1 != type2) ++ return (int) type2 - (int) type1; ++ ++ subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1); ++ subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2); ++ ++ if (subtype1 != subtype2) ++ return (int) subtype1 - (int) subtype2; ++ ++ len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1); ++ len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2); ++ ++ if (len1 != len2) ++ return (int) len1 - (int) len2; ++ ++ ret = grub_memcmp (dp1, dp2, len1); ++ if (ret != 0) ++ return ret; ++ ++ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) ++ break; ++ ++ dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1); ++ dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); ++ } ++ ++ return 0; ++} +Index: b/include/grub/efi/efi.h +=================================================================== +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -62,6 +62,10 @@ + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map); + ++int ++EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, ++ const grub_efi_device_path_t *dp2); ++ + void grub_efi_mm_init (void); + void grub_efi_mm_fini (void); + void grub_efi_init (void); --- grub2-1.99.orig/debian/patches/ubuntu_use_signed_kernel.patch +++ grub2-1.99/debian/patches/ubuntu_use_signed_kernel.patch @@ -0,0 +1,40 @@ +Description: Generate configuration for signed UEFI kernels if available +Author: Colin Watson +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -120,9 +120,15 @@ + echo '$message' + EOF + fi +- cat << EOF ++ if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then ++ cat << EOF ++ linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args} ++EOF ++ else ++ cat << EOF + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF ++ fi + if test -n "${initrd}" ; then + if [ "x$5" != "xquiet" ]; then + message="$(gettext_printf "Loading initial ramdisk ...")" +@@ -197,6 +203,13 @@ + in_submenu=false + while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` ++ case $linux in ++ *.efi.signed) ++ # We handle these in linux_entry. ++ list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` ++ continue ++ ;; ++ esac + echo "Found linux image: $linux" >&2 + basename=`basename $linux` + dirname=`dirname $linux` --- grub2-1.99.orig/debian/patches/zfs_update.patch +++ grub2-1.99/debian/patches/zfs_update.patch @@ -0,0 +1,2415 @@ + +Revisions: + +3340: ZFS zlib support +3474: Fix 2G limit on ZFS +3486: ZFS fixes +3488: ZFS multi-device and version 33 support +3494: Fix memory leak +3518: Rewrite RAIDZ part based on reverse engineering +3519: Fix RAIDZ(2) for >= 5 devices +3520: Add ability to sustain a single drive failure on both raidz and raidz2 +3521: Support raidz3 +3533: Support second redundancy strip on raidz(2,3) +3534: Support case-insensitive ZFS subvolumes +3535: Support third redundancy strip on raidz3 + +--- a/grub-core/fs/zfs/zfs.c ++++ b/grub-core/fs/zfs/zfs.c +@@ -51,6 +51,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -139,6 +140,27 @@ + grub_zfs_endian_t endian; + } dnode_end_t; + ++struct grub_zfs_device_desc ++{ ++ enum { DEVICE_LEAF, DEVICE_MIRROR, DEVICE_RAIDZ } type; ++ grub_uint64_t id; ++ grub_uint64_t guid; ++ ++ /* Valid only for non-leafs. */ ++ unsigned n_children; ++ struct grub_zfs_device_desc *children; ++ ++ /* Valid only for RAIDZ. */ ++ unsigned nparity; ++ unsigned ashift; ++ ++ /* Valid only for leaf devices. */ ++ grub_device_t dev; ++ grub_disk_addr_t vdev_phys_sector; ++ uberblock_t current_uberblock; ++ int original; ++}; ++ + struct grub_zfs_data + { + /* cache for a file block of the currently zfs_open()-ed file */ +@@ -153,23 +175,45 @@ + grub_uint64_t dnode_end; + grub_zfs_endian_t dnode_endian; + +- uberblock_t current_uberblock; +- grub_disk_t disk; +- + dnode_end_t mos; + dnode_end_t mdn; + dnode_end_t dnode; + +- grub_disk_addr_t vdev_phys_sector; ++ struct grub_zfs_device_desc *devices_attached; ++ unsigned n_devices_attached; ++ unsigned n_devices_allocated; ++ struct grub_zfs_device_desc *device_original; ++ ++ uberblock_t current_uberblock; ++ ++ int mounted; ++ grub_uint64_t guid; + }; + ++static grub_err_t ++zlib_decompress (void *s, void *d, ++ grub_size_t slen, grub_size_t dlen) ++{ ++ if (grub_zlib_decompress (s, slen, 0, d, dlen) < 0) ++ return grub_errno; ++ return GRUB_ERR_NONE; ++} ++ + static decomp_entry_t decomp_table[ZIO_COMPRESS_FUNCTIONS] = { + {"inherit", NULL}, /* ZIO_COMPRESS_INHERIT */ + {"on", lzjb_decompress}, /* ZIO_COMPRESS_ON */ + {"off", NULL}, /* ZIO_COMPRESS_OFF */ + {"lzjb", lzjb_decompress}, /* ZIO_COMPRESS_LZJB */ + {"empty", NULL}, /* ZIO_COMPRESS_EMPTY */ +- {"gzip", NULL}, /* ZIO_COMPRESS_GZIP */ ++ {"gzip-1", zlib_decompress}, /* ZIO_COMPRESS_GZIP1 */ ++ {"gzip-2", zlib_decompress}, /* ZIO_COMPRESS_GZIP2 */ ++ {"gzip-3", zlib_decompress}, /* ZIO_COMPRESS_GZIP3 */ ++ {"gzip-4", zlib_decompress}, /* ZIO_COMPRESS_GZIP4 */ ++ {"gzip-5", zlib_decompress}, /* ZIO_COMPRESS_GZIP5 */ ++ {"gzip-6", zlib_decompress}, /* ZIO_COMPRESS_GZIP6 */ ++ {"gzip-7", zlib_decompress}, /* ZIO_COMPRESS_GZIP7 */ ++ {"gzip-8", zlib_decompress}, /* ZIO_COMPRESS_GZIP8 */ ++ {"gzip-9", zlib_decompress}, /* ZIO_COMPRESS_GZIP9 */ + }; + + static grub_err_t zio_read_data (blkptr_t * bp, grub_zfs_endian_t endian, +@@ -224,7 +268,7 @@ + */ + static grub_err_t + zio_checksum_verify (zio_cksum_t zc, grub_uint32_t checksum, +- grub_zfs_endian_t endian, char *buf, int size) ++ grub_zfs_endian_t endian, char *buf, grub_size_t size) + { + zio_eck_t *zec = (zio_eck_t *) (buf + size) - 1; + zio_checksum_info_t *ci = &zio_checksum_table[checksum]; +@@ -253,13 +297,13 @@ + || (actual_cksum.zc_word[2] != zc.zc_word[2]) + || (actual_cksum.zc_word[3] != zc.zc_word[3])) + { +- grub_dprintf ("zfs", "checksum %d verification failed\n", checksum); +- grub_dprintf ("zfs", "actual checksum %16llx %16llx %16llx %16llx\n", ++ grub_dprintf ("zfs", "checksum %s verification failed\n", ci->ci_name); ++ grub_dprintf ("zfs", "actual checksum %016llx %016llx %016llx %016llx\n", + (unsigned long long) actual_cksum.zc_word[0], + (unsigned long long) actual_cksum.zc_word[1], + (unsigned long long) actual_cksum.zc_word[2], + (unsigned long long) actual_cksum.zc_word[3]); +- grub_dprintf ("zfs", "expected checksum %16llx %16llx %16llx %16llx\n", ++ grub_dprintf ("zfs", "expected checksum %016llx %016llx %016llx %016llx\n", + (unsigned long long) zc.zc_word[0], + (unsigned long long) zc.zc_word[1], + (unsigned long long) zc.zc_word[2], +@@ -319,7 +363,7 @@ + * + */ + static grub_err_t +-uberblock_verify (uberblock_phys_t * ub, int offset) ++uberblock_verify (uberblock_phys_t * ub, grub_uint64_t offset) + { + uberblock_t *uber = &ub->ubp_uberblock; + grub_err_t err; +@@ -392,7 +436,7 @@ + } + + static grub_uint64_t +-dva_get_offset (dva_t * dva, grub_zfs_endian_t endian) ++dva_get_offset (const dva_t *dva, grub_zfs_endian_t endian) + { + grub_dprintf ("zfs", "dva=%llx, %llx\n", + (unsigned long long) dva->dva_word[0], +@@ -401,6 +445,842 @@ + endian) << SPA_MINBLOCKSHIFT; + } + ++static grub_err_t ++zfs_fetch_nvlist (struct grub_zfs_device_desc *diskdesc, char **nvlist) ++{ ++ grub_err_t err; ++ ++ *nvlist = grub_malloc (VDEV_PHYS_SIZE); ++ if (!diskdesc->dev) ++ return grub_error (GRUB_ERR_BAD_FS, "member drive unknown"); ++ ++ /* Read in the vdev name-value pair list (112K). */ ++ err = grub_disk_read (diskdesc->dev->disk, diskdesc->vdev_phys_sector, 0, ++ VDEV_PHYS_SIZE, *nvlist); ++ if (err) ++ { ++ grub_free (*nvlist); ++ *nvlist = 0; ++ return err; ++ } ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++fill_vdev_info_real (struct grub_zfs_data *data, ++ const char *nvlist, ++ struct grub_zfs_device_desc *fill, ++ struct grub_zfs_device_desc *insert) ++{ ++ char *type; ++ ++ type = grub_zfs_nvlist_lookup_string (nvlist, ZPOOL_CONFIG_TYPE); ++ ++ if (!type) ++ return grub_errno; ++ ++ if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "id", &(fill->id))) ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); ++ ++ if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "guid", &(fill->guid))) ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); ++ ++ if (grub_strcmp (type, VDEV_TYPE_DISK) == 0 ++ || grub_strcmp (type, VDEV_TYPE_FILE) == 0) ++ { ++ fill->type = DEVICE_LEAF; ++ ++ if (!fill->dev && fill->guid == insert->guid) ++ { ++ fill->dev = insert->dev; ++ fill->vdev_phys_sector = insert->vdev_phys_sector; ++ fill->current_uberblock = insert->current_uberblock; ++ fill->original = insert->original; ++ if (!data->device_original) ++ data->device_original = fill; ++ } ++ ++ return GRUB_ERR_NONE; ++ } ++ ++ if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0 ++ || grub_strcmp (type, VDEV_TYPE_RAIDZ) == 0) ++ { ++ int nelm, i; ++ ++ if (grub_strcmp (type, VDEV_TYPE_MIRROR) == 0) ++ fill->type = DEVICE_MIRROR; ++ else ++ { ++ grub_uint64_t par; ++ fill->type = DEVICE_RAIDZ; ++ if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "nparity", &par)) ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find raidz parity"); ++ fill->nparity = par; ++ if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "ashift", &par)) ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find raidz ashift"); ++ fill->ashift = par; ++ } ++ ++ nelm = grub_zfs_nvlist_lookup_nvlist_array_get_nelm (nvlist, ZPOOL_CONFIG_CHILDREN); ++ ++ if (nelm <= 0) ++ return grub_error (GRUB_ERR_BAD_FS, "incorrect mirror VDEV"); ++ ++ if (!fill->children) ++ { ++ fill->n_children = nelm; ++ ++ fill->children = grub_zalloc (fill->n_children ++ * sizeof (fill->children[0])); ++ } ++ ++ for (i = 0; i < nelm; i++) ++ { ++ char *child; ++ grub_err_t err; ++ ++ child = grub_zfs_nvlist_lookup_nvlist_array ++ (nvlist, ZPOOL_CONFIG_CHILDREN, i); ++ ++ err = fill_vdev_info_real (data, child, &fill->children[i], insert); ++ ++ grub_free (child); ++ ++ if (err) ++ return err; ++ } ++ return GRUB_ERR_NONE; ++ } ++ ++ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "vdev %s isn't supported", ++ type); ++} ++ ++static grub_err_t ++fill_vdev_info (struct grub_zfs_data *data, ++ char *nvlist, struct grub_zfs_device_desc *diskdesc) ++{ ++ grub_uint64_t id; ++ unsigned i; ++ ++ if (!grub_zfs_nvlist_lookup_uint64 (nvlist, "id", &id)) ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev id"); ++ ++ for (i = 0; i < data->n_devices_attached; i++) ++ if (data->devices_attached[i].id == id) ++ return fill_vdev_info_real (data, nvlist, &data->devices_attached[i], ++ diskdesc); ++ ++ data->n_devices_attached++; ++ if (data->n_devices_attached > data->n_devices_allocated) ++ { ++ void *tmp; ++ data->n_devices_allocated = 2 * data->n_devices_attached + 1; ++ data->devices_attached ++ = grub_realloc (tmp = data->devices_attached, ++ data->n_devices_allocated ++ * sizeof (data->devices_attached[0])); ++ if (!data->devices_attached) ++ { ++ data->devices_attached = tmp; ++ return grub_errno; ++ } ++ } ++ ++ grub_memset (&data->devices_attached[data->n_devices_attached - 1], ++ 0, sizeof (data->devices_attached[data->n_devices_attached - 1])); ++ ++ return fill_vdev_info_real (data, nvlist, ++ &data->devices_attached[data->n_devices_attached - 1], ++ diskdesc); ++} ++ ++/* ++ * Check the disk label information and retrieve needed vdev name-value pairs. ++ * ++ */ ++static grub_err_t ++check_pool_label (struct grub_zfs_data *data, ++ struct grub_zfs_device_desc *diskdesc) ++{ ++ grub_uint64_t pool_state, txg = 0; ++ char *nvlist; ++#if 0 ++ char *nv; ++#endif ++ grub_uint64_t poolguid; ++ grub_uint64_t version; ++ int found; ++ grub_err_t err; ++ ++ err = zfs_fetch_nvlist (diskdesc, &nvlist); ++ if (err) ++ return err; ++ ++ grub_dprintf ("zfs", "check 2 passed\n"); ++ ++ found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_STATE, ++ &pool_state); ++ if (! found) ++ { ++ grub_free (nvlist); ++ if (! grub_errno) ++ grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_STATE " not found"); ++ return grub_errno; ++ } ++ grub_dprintf ("zfs", "check 3 passed\n"); ++ ++ if (pool_state == POOL_STATE_DESTROYED) ++ { ++ grub_free (nvlist); ++ return grub_error (GRUB_ERR_BAD_FS, "zpool is marked as destroyed"); ++ } ++ grub_dprintf ("zfs", "check 4 passed\n"); ++ ++ found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_TXG, &txg); ++ if (!found) ++ { ++ grub_free (nvlist); ++ if (! grub_errno) ++ grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_TXG " not found"); ++ return grub_errno; ++ } ++ grub_dprintf ("zfs", "check 6 passed\n"); ++ ++ /* not an active device */ ++ if (txg == 0) ++ { ++ grub_free (nvlist); ++ return grub_error (GRUB_ERR_BAD_FS, "zpool isn't active"); ++ } ++ grub_dprintf ("zfs", "check 7 passed\n"); ++ ++ found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_VERSION, ++ &version); ++ if (! found) ++ { ++ grub_free (nvlist); ++ if (! grub_errno) ++ grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_VERSION " not found"); ++ return grub_errno; ++ } ++ grub_dprintf ("zfs", "check 8 passed\n"); ++ ++ if (version > SPA_VERSION) ++ { ++ grub_free (nvlist); ++ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, ++ "too new version %llu > %llu", ++ (unsigned long long) version, ++ (unsigned long long) SPA_VERSION); ++ } ++ grub_dprintf ("zfs", "check 9 passed\n"); ++ ++ found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_GUID, ++ &(diskdesc->guid)); ++ if (! found) ++ { ++ grub_free (nvlist); ++ if (! grub_errno) ++ grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_GUID " not found"); ++ return grub_errno; ++ } ++ ++ found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_GUID, ++ &poolguid); ++ if (! found) ++ { ++ grub_free (nvlist); ++ if (! grub_errno) ++ grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_GUID " not found"); ++ return grub_errno; ++ } ++ ++ grub_dprintf ("zfs", "check 11 passed\n"); ++ ++ if (data->mounted && data->guid != poolguid) ++ return grub_error (GRUB_ERR_BAD_FS, "another zpool"); ++ else ++ data->guid = poolguid; ++ ++ { ++ char *nv; ++ nv = grub_zfs_nvlist_lookup_nvlist (nvlist, ZPOOL_CONFIG_VDEV_TREE); ++ ++ if (!nv) ++ { ++ grub_free (nvlist); ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find vdev tree"); ++ } ++ err = fill_vdev_info (data, nv, diskdesc); ++ if (err) ++ { ++ grub_free (nvlist); ++ return err; ++ } ++ } ++ grub_dprintf ("zfs", "check 10 passed\n"); ++ ++ grub_free (nvlist); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++scan_disk (grub_device_t dev, struct grub_zfs_data *data, ++ int original) ++{ ++ int label = 0; ++ uberblock_phys_t *ub_array, *ubbest = NULL; ++ vdev_boot_header_t *bh; ++ grub_err_t err; ++ int vdevnum; ++ struct grub_zfs_device_desc desc; ++ ++ ub_array = grub_malloc (VDEV_UBERBLOCK_RING); ++ if (!ub_array) ++ return grub_errno; ++ ++ bh = grub_malloc (VDEV_BOOT_HEADER_SIZE); ++ if (!bh) ++ { ++ grub_free (ub_array); ++ return grub_errno; ++ } ++ ++ vdevnum = VDEV_LABELS; ++ ++ desc.dev = dev; ++ desc.original = original; ++ ++ /* Don't check back labels on CDROM. */ ++ if (grub_disk_get_size (dev->disk) == GRUB_DISK_SIZE_UNKNOWN) ++ vdevnum = VDEV_LABELS / 2; ++ ++ for (label = 0; ubbest == NULL && label < vdevnum; label++) ++ { ++ desc.vdev_phys_sector ++ = label * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT) ++ + ((VDEV_SKIP_SIZE + VDEV_BOOT_HEADER_SIZE) >> SPA_MINBLOCKSHIFT) ++ + (label < VDEV_LABELS / 2 ? 0 : grub_disk_get_size (dev->disk) ++ - VDEV_LABELS * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT)); ++ ++ /* Read in the uberblock ring (128K). */ ++ err = grub_disk_read (dev->disk, desc.vdev_phys_sector ++ + (VDEV_PHYS_SIZE >> SPA_MINBLOCKSHIFT), ++ 0, VDEV_UBERBLOCK_RING, (char *) ub_array); ++ if (err) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ continue; ++ } ++ grub_dprintf ("zfs", "label ok %d\n", label); ++ ++ ubbest = find_bestub (ub_array, desc.vdev_phys_sector); ++ if (!ubbest) ++ { ++ grub_dprintf ("zfs", "No uberblock found\n"); ++ grub_errno = GRUB_ERR_NONE; ++ continue; ++ } ++ ++ grub_memmove (&(desc.current_uberblock), ++ &ubbest->ubp_uberblock, sizeof (uberblock_t)); ++ if (original) ++ grub_memmove (&(data->current_uberblock), ++ &ubbest->ubp_uberblock, sizeof (uberblock_t)); ++ ++ err = check_pool_label (data, &desc); ++ if (err) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ continue; ++ } ++#if 0 ++ if (find_best_root && ++ vdev_uberblock_compare (&ubbest->ubp_uberblock, ++ &(current_uberblock)) <= 0) ++ continue; ++#endif ++ grub_free (ub_array); ++ grub_free (bh); ++ return GRUB_ERR_NONE; ++ } ++ ++ grub_free (ub_array); ++ grub_free (bh); ++ ++ return grub_error (GRUB_ERR_BAD_FS, "couldn't find a valid label"); ++} ++ ++static grub_err_t ++scan_devices (struct grub_zfs_data *data) ++{ ++ auto int hook (const char *name); ++ int hook (const char *name) ++ { ++ grub_device_t dev; ++ grub_err_t err; ++ dev = grub_device_open (name); ++ if (!dev) ++ return 0; ++ if (!dev->disk) ++ { ++ grub_device_close (dev); ++ return 0; ++ } ++ err = scan_disk (dev, data, 0); ++ if (err == GRUB_ERR_BAD_FS) ++ { ++ grub_device_close (dev); ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (err) ++ { ++ grub_device_close (dev); ++ grub_print_error (); ++ return 0; ++ } ++ ++ return 0; ++ } ++ grub_device_iterate (hook); ++ return GRUB_ERR_NONE; ++} ++ ++static inline void ++xor (grub_uint64_t *a, const grub_uint64_t *b, grub_size_t s) ++{ ++ s /= sizeof (grub_uint64_t); ++ while (s--) ++ *a++ ^= *b++; ++} ++ ++/* x**y. */ ++static grub_uint8_t powx[255 * 2]; ++/* Such an s that x**s = y */ ++static int powx_inv[256]; ++static const grub_uint8_t poly = 0x1d; ++ ++/* perform the operation a ^= b * (x ** (known_idx * recovery_pow) ) */ ++static inline void ++xor_out (void *a_in, const void *b_in, grub_size_t s, ++ int known_idx, int recovery_pow) ++{ ++ int add; ++ grub_uint8_t *a = a_in; ++ const grub_uint8_t *b = b_in; ++ ++ /* Simple xor. */ ++ if (known_idx == 0 || recovery_pow == 0) ++ { ++ xor (a_in, b_in, s); ++ return; ++ } ++ add = (known_idx * recovery_pow) % 255; ++ for (;s--; b++, a++) ++ if (*b) ++ *a ^= powx[powx_inv[*b] + add]; ++} ++ ++static inline grub_uint8_t ++gf_mul (grub_uint8_t a, grub_uint8_t b) ++{ ++ if (a == 0 || b == 0) ++ return 0; ++ return powx[powx_inv[a] + powx_inv[b]]; ++} ++ ++static inline grub_err_t ++recovery (grub_uint8_t *bufs[4], grub_size_t s, const int nbufs, ++ const unsigned *powers, ++ const int *idx) ++{ ++ grub_dprintf ("zfs", "recovering %u bufers\n", nbufs); ++ /* Now we have */ ++ /* b_i = sum (r_j* (x ** (powers[i] * idx[j])))*/ ++ /* Let's invert the matrix in question. */ ++ switch (nbufs) ++ { ++ /* Easy: r_0 = bufs[0] / (x << (powers[i] * idx[j])). */ ++ case 1: ++ { ++ int add; ++ grub_uint8_t *a; ++ if (powers[0] == 0 || idx[0] == 0) ++ return GRUB_ERR_NONE; ++ add = 255 - ((powers[0] * idx[0]) % 255); ++ for (a = bufs[0]; s--; a++) ++ if (*a) ++ *a = powx[powx_inv[*a] + add]; ++ return GRUB_ERR_NONE; ++ } ++ /* Case 2x2: Let's use the determinant formula. */ ++ case 2: ++ { ++ grub_uint8_t det, det_inv; ++ grub_uint8_t matrixinv[2][2]; ++ unsigned i; ++ /* The determinant is: */ ++ det = (powx[(powers[0] * idx[0] + powers[1] * idx[1]) % 255] ++ ^ powx[(powers[0] * idx[1] + powers[1] * idx[0]) % 255]); ++ if (det == 0) ++ return grub_error (GRUB_ERR_BAD_FS, "singular recovery matrix"); ++ det_inv = powx[255 - powx_inv[det]]; ++ matrixinv[0][0] = gf_mul (powx[(powers[1] * idx[1]) % 255], det_inv); ++ matrixinv[1][1] = gf_mul (powx[(powers[0] * idx[0]) % 255], det_inv); ++ matrixinv[0][1] = gf_mul (powx[(powers[0] * idx[1]) % 255], det_inv); ++ matrixinv[1][0] = gf_mul (powx[(powers[1] * idx[0]) % 255], det_inv); ++ for (i = 0; i < s; i++) ++ { ++ grub_uint8_t b0, b1; ++ b0 = bufs[0][i]; ++ b1 = bufs[1][i]; ++ ++ bufs[0][i] = (gf_mul (b0, matrixinv[0][0]) ++ ^ gf_mul (b1, matrixinv[0][1])); ++ bufs[1][i] = (gf_mul (b0, matrixinv[1][0]) ++ ^ gf_mul (b1, matrixinv[1][1])); ++ } ++ return GRUB_ERR_NONE; ++ } ++ /* Otherwise use Gauss. */ ++ default: ++ { ++ grub_uint8_t matrix1[nbufs][nbufs], matrix2[nbufs][nbufs]; ++ int i, j, k; ++ ++ for (i = 0; i < nbufs; i++) ++ for (j = 0; j < nbufs; j++) ++ matrix1[i][j] = powx[(powers[i] * idx[j]) % 255]; ++ for (i = 0; i < nbufs; i++) ++ for (j = 0; j < nbufs; j++) ++ matrix2[i][j] = 0; ++ for (i = 0; i < nbufs; i++) ++ matrix2[i][i] = 1; ++ ++ for (i = 0; i < nbufs; i++) ++ { ++ grub_uint8_t mul; ++ for (j = i; j < nbufs; j++) ++ if (matrix1[i][j]) ++ break; ++ if (j == nbufs) ++ return grub_error (GRUB_ERR_BAD_FS, "singular recovery matrix"); ++ if (j != i) ++ { ++ int xchng; ++ xchng = j; ++ for (j = 0; j < nbufs; j++) ++ { ++ grub_uint8_t t; ++ t = matrix1[xchng][j]; ++ matrix1[xchng][j] = matrix1[i][j]; ++ matrix1[i][j] = t; ++ } ++ for (j = 0; j < nbufs; j++) ++ { ++ grub_uint8_t t; ++ t = matrix2[xchng][j]; ++ matrix2[xchng][j] = matrix2[i][j]; ++ matrix2[i][j] = t; ++ } ++ } ++ mul = powx[255 - powx_inv[matrix1[i][i]]]; ++ for (j = 0; j < nbufs; j++) ++ matrix1[i][j] = gf_mul (matrix1[i][j], mul); ++ for (j = 0; j < nbufs; j++) ++ matrix2[i][j] = gf_mul (matrix2[i][j], mul); ++ for (j = i + 1; j < nbufs; j++) ++ { ++ mul = matrix1[j][i]; ++ for (k = 0; k < nbufs; k++) ++ matrix1[j][k] ^= gf_mul (matrix1[i][k], mul); ++ for (k = 0; k < nbufs; k++) ++ matrix2[j][k] ^= gf_mul (matrix2[i][k], mul); ++ } ++ } ++ for (i = nbufs - 1; i >= 0; i--) ++ { ++ for (j = 0; j < i; j++) ++ { ++ grub_uint8_t mul; ++ mul = matrix1[j][i]; ++ for (k = 0; k < nbufs; k++) ++ matrix1[j][k] ^= gf_mul (matrix1[i][k], mul); ++ for (k = 0; k < nbufs; k++) ++ matrix2[j][k] ^= gf_mul (matrix2[i][k], mul); ++ } ++ } ++ ++ for (i = 0; i < (int) s; i++) ++ { ++ grub_uint8_t b[nbufs]; ++ for (j = 0; j < nbufs; j++) ++ b[j] = bufs[j][i]; ++ for (j = 0; j < nbufs; j++) ++ { ++ bufs[j][i] = 0; ++ for (k = 0; k < nbufs; k++) ++ bufs[j][i] ^= gf_mul (matrix2[j][k], b[k]); ++ } ++ } ++ return GRUB_ERR_NONE; ++ } ++ } ++} ++ ++static grub_err_t ++read_device (grub_uint64_t offset, struct grub_zfs_device_desc *desc, ++ grub_size_t len, void *buf) ++{ ++ switch (desc->type) ++ { ++ case DEVICE_LEAF: ++ { ++ grub_uint64_t sector; ++ sector = DVA_OFFSET_TO_PHYS_SECTOR (offset); ++ if (!desc->dev) ++ { ++ return grub_error (GRUB_ERR_BAD_FS, "member drive unknown"); ++ } ++ /* read in a data block */ ++ return grub_disk_read (desc->dev->disk, sector, 0, len, buf); ++ } ++ case DEVICE_MIRROR: ++ { ++ grub_err_t err = GRUB_ERR_NONE; ++ unsigned i; ++ if (desc->n_children <= 0) ++ return grub_error (GRUB_ERR_BAD_FS, ++ "non-positive number of mirror children"); ++ for (i = 0; i < desc->n_children; i++) ++ { ++ err = read_device (offset, &desc->children[i], ++ len, buf); ++ if (!err) ++ break; ++ grub_errno = GRUB_ERR_NONE; ++ } ++ return (grub_errno = err); ++ } ++ case DEVICE_RAIDZ: ++ { ++ unsigned c = 0; ++ grub_uint64_t high; ++ grub_uint64_t devn; ++ grub_uint64_t m; ++ grub_uint32_t s, orig_s; ++ void *orig_buf = buf; ++ grub_size_t orig_len = len; ++ grub_uint8_t *recovery_buf[4]; ++ grub_size_t recovery_len[4]; ++ int recovery_idx[4]; ++ unsigned failed_devices = 0; ++ int idx, orig_idx; ++ ++ if (desc->nparity < 1 || desc->nparity > 3) ++ return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, ++ "raidz%d is not supported", desc->nparity); ++ ++ orig_s = (((len + (1 << desc->ashift) - 1) >> desc->ashift) ++ + (desc->n_children - desc->nparity) - 1); ++ s = orig_s; ++ ++ high = grub_divmod64_full ((offset >> desc->ashift), ++ desc->n_children, &m); ++ if (desc->nparity == 2) ++ c = 2; ++ if (desc->nparity == 3) ++ c = 3; ++ if (((len + (1 << desc->ashift) - 1) >> desc->ashift) ++ >= (desc->n_children - desc->nparity)) ++ idx = (desc->n_children - desc->nparity - 1); ++ else ++ idx = ((len + (1 << desc->ashift) - 1) >> desc->ashift) - 1; ++ orig_idx = idx; ++ while (len > 0) ++ { ++ grub_size_t csize; ++ grub_uint32_t bsize; ++ grub_err_t err; ++ bsize = s / (desc->n_children - desc->nparity); ++ ++ if (desc->nparity == 1 ++ && ((offset >> (desc->ashift + 11)) & 1) == c) ++ c++; ++ ++ high = grub_divmod64_full ((offset >> desc->ashift) + c, ++ desc->n_children, &devn); ++ csize = bsize << desc->ashift; ++ if (csize > len) ++ csize = len; ++ ++ grub_dprintf ("zfs", "RAIDZ mapping 0x%" PRIxGRUB_UINT64_T ++ "+%u (%" PRIxGRUB_SIZE ", %" PRIxGRUB_UINT32_T ++ ") -> (0x%" PRIxGRUB_UINT64_T ", 0x%" ++ PRIxGRUB_UINT64_T ")\n", ++ offset >> desc->ashift, c, len, bsize, high, ++ devn); ++ err = read_device ((high << desc->ashift) ++ | (offset & ((1 << desc->ashift) - 1)), ++ &desc->children[devn], ++ csize, buf); ++ if (err && failed_devices < desc->nparity) ++ { ++ recovery_buf[failed_devices] = buf; ++ recovery_len[failed_devices] = csize; ++ recovery_idx[failed_devices] = idx; ++ failed_devices++; ++ grub_errno = err = 0; ++ } ++ if (err) ++ return err; ++ ++ c++; ++ idx--; ++ s--; ++ buf = (char *) buf + csize; ++ len -= csize; ++ } ++ if (failed_devices) ++ { ++ unsigned redundancy_pow[4]; ++ unsigned cur_redundancy_pow = 0; ++ unsigned n_redundancy = 0; ++ unsigned i, j; ++ grub_err_t err; ++ ++ /* Compute mul. x**s has a period of 255. */ ++ if (powx[0] == 0) ++ { ++ grub_uint8_t cur = 1; ++ for (i = 0; i < 255; i++) ++ { ++ powx[i] = cur; ++ powx[i + 255] = cur; ++ powx_inv[cur] = i; ++ if (cur & 0x80) ++ cur = (cur << 1) ^ poly; ++ else ++ cur <<= 1; ++ } ++ } ++ ++ /* Read redundancy data. */ ++ for (n_redundancy = 0, cur_redundancy_pow = 0; ++ n_redundancy < failed_devices; ++ cur_redundancy_pow++) ++ { ++ high = grub_divmod64_full ((offset >> desc->ashift) ++ + cur_redundancy_pow ++ + ((desc->nparity == 1) ++ && ((offset >> (desc->ashift + 11)) ++ & 1)), ++ desc->n_children, &devn); ++ err = read_device ((high << desc->ashift) ++ | (offset & ((1 << desc->ashift) - 1)), ++ &desc->children[devn], ++ recovery_len[n_redundancy], ++ recovery_buf[n_redundancy]); ++ /* Ignore error if we may still have enough devices. */ ++ if (err && n_redundancy + desc->nparity - cur_redundancy_pow - 1 ++ >= failed_devices) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ continue; ++ } ++ if (err) ++ return err; ++ redundancy_pow[n_redundancy] = cur_redundancy_pow; ++ n_redundancy++; ++ } ++ /* Now xor-our the parts we already know. */ ++ buf = orig_buf; ++ len = orig_len; ++ s = orig_s; ++ idx = orig_idx; ++ ++ while (len > 0) ++ { ++ grub_size_t csize; ++ csize = ((s / (desc->n_children - desc->nparity)) ++ << desc->ashift); ++ if (csize > len) ++ csize = len; ++ ++ for (j = 0; j < failed_devices; j++) ++ if (buf == recovery_buf[j]) ++ break; ++ ++ if (j == failed_devices) ++ for (j = 0; j < failed_devices; j++) ++ xor_out (recovery_buf[j], buf, ++ csize < recovery_len[j] ? csize : recovery_len[j], ++ idx, redundancy_pow[j]); ++ ++ s--; ++ buf = (char *) buf + csize; ++ len -= csize; ++ idx--; ++ } ++ for (i = 0; i < failed_devices ++ && recovery_len[i] == recovery_len[0]; ++ i++); ++ /* Since the chunks have variable length handle the last block ++ separately. */ ++ if (i != failed_devices) ++ { ++ grub_uint8_t *tmp_recovery_buf[4]; ++ for (j = 0; j < i; j++) ++ tmp_recovery_buf[j] = recovery_buf[j] + recovery_len[j] - 1; ++ err = recovery (tmp_recovery_buf, 1, i, redundancy_pow, ++ recovery_idx); ++ if (err) ++ return err; ++ } ++ err = recovery (recovery_buf, recovery_len[failed_devices - 1], ++ failed_devices, redundancy_pow, recovery_idx); ++ if (err) ++ return err; ++ } ++ return GRUB_ERR_NONE; ++ } ++ } ++ return grub_error (GRUB_ERR_BAD_FS, "unsupported device type"); ++} ++ ++static grub_err_t ++read_dva (const dva_t *dva, ++ grub_zfs_endian_t endian, struct grub_zfs_data *data, ++ void *buf, grub_size_t len) ++{ ++ grub_uint64_t offset; ++ unsigned i; ++ grub_err_t err; ++ int try = 0; ++ offset = dva_get_offset (dva, endian); ++ ++ for (try = 0; try < 2; try++) ++ { ++ for (i = 0; i < data->n_devices_attached; i++) ++ if (data->devices_attached[i].id == DVA_GET_VDEV (dva)) ++ { ++ err = read_device (offset, &data->devices_attached[i], len, buf); ++ if (!err) ++ return GRUB_ERR_NONE; ++ break; ++ } ++ if (try == 1) ++ break; ++ err = scan_devices (data); ++ if (err) ++ return err; ++ } ++ return err; ++} + + /* + * Read a block of data based on the gang block address dva, +@@ -412,7 +1292,6 @@ + struct grub_zfs_data *data) + { + zio_gbh_phys_t *zio_gb; +- grub_uint64_t offset, sector; + unsigned i; + grub_err_t err; + zio_cksum_t zc; +@@ -424,13 +1303,8 @@ + return grub_errno; + grub_dprintf ("zfs", endian == LITTLE_ENDIAN ? "little-endian gang\n" + :"big-endian gang\n"); +- offset = dva_get_offset (dva, endian); +- sector = DVA_OFFSET_TO_PHYS_SECTOR (offset); +- grub_dprintf ("zfs", "offset=%llx\n", (unsigned long long) offset); + +- /* read in the gang block header */ +- err = grub_disk_read (data->disk, sector, 0, SPA_GANGBLOCKSIZE, +- (char *) zio_gb); ++ err = read_dva (dva, endian, data, zio_gb, SPA_GANGBLOCKSIZE); + if (err) + { + grub_free (zio_gb); +@@ -483,20 +1357,13 @@ + /* pick a good dva from the block pointer */ + for (i = 0; i < SPA_DVAS_PER_BP; i++) + { +- grub_uint64_t offset, sector; +- + if (bp->blk_dva[i].dva_word[0] == 0 && bp->blk_dva[i].dva_word[1] == 0) + continue; + + if ((grub_zfs_to_cpu64 (bp->blk_dva[i].dva_word[1], endian)>>63) & 1) + err = zio_read_gang (bp, endian, &bp->blk_dva[i], buf, data); + else +- { +- /* read in a data block */ +- offset = dva_get_offset (&bp->blk_dva[i], endian); +- sector = DVA_OFFSET_TO_PHYS_SECTOR (offset); +- err = grub_disk_read (data->disk, sector, 0, psize, buf); +- } ++ err = read_dva (&bp->blk_dva[i], endian, data, buf, psize); + if (!err) + return GRUB_ERR_NONE; + grub_errno = GRUB_ERR_NONE; +@@ -527,7 +1394,7 @@ + *buf = NULL; + + checksum = (grub_zfs_to_cpu64((bp)->blk_prop, endian) >> 40) & 0xff; +- comp = (grub_zfs_to_cpu64((bp)->blk_prop, endian)>>32) & 0x7; ++ comp = (grub_zfs_to_cpu64((bp)->blk_prop, endian)>>32) & 0xff; + lsize = (BP_IS_HOLE(bp) ? 0 : + (((grub_zfs_to_cpu64 ((bp)->blk_prop, endian) & 0xffff) + 1) + << SPA_MINBLOCKSHIFT)); +@@ -602,7 +1469,8 @@ + dmu_read (dnode_end_t * dn, grub_uint64_t blkid, void **buf, + grub_zfs_endian_t *endian_out, struct grub_zfs_data *data) + { +- int idx, level; ++ int level; ++ grub_off_t idx; + blkptr_t *bp_array = dn->dn.dn_blkptr; + int epbs = dn->dn.dn_indblkshift - SPA_BLKPTRSHIFT; + blkptr_t *bp; +@@ -670,7 +1538,8 @@ + */ + static grub_err_t + mzap_lookup (mzap_phys_t * zapobj, grub_zfs_endian_t endian, +- int objsize, char *name, grub_uint64_t * value) ++ int objsize, char *name, grub_uint64_t * value, ++ int case_insensitive) + { + int i, chunks; + mzap_ent_phys_t *mzap_ent = zapobj->mz_chunk; +@@ -678,7 +1547,8 @@ + chunks = objsize / MZAP_ENT_LEN - 1; + for (i = 0; i < chunks; i++) + { +- if (grub_strcmp (mzap_ent[i].mze_name, name) == 0) ++ if (case_insensitive ? (grub_strcasecmp (mzap_ent[i].mze_name, name) == 0) ++ : (grub_strcmp (mzap_ent[i].mze_name, name) == 0)) + { + *value = grub_zfs_to_cpu64 (mzap_ent[i].mze_value, endian); + return GRUB_ERR_NONE; +@@ -711,7 +1581,8 @@ + } + + static grub_uint64_t +-zap_hash (grub_uint64_t salt, const char *name) ++zap_hash (grub_uint64_t salt, const char *name, ++ int case_insensitive) + { + static grub_uint64_t table[256]; + const grub_uint8_t *cp; +@@ -729,8 +1600,12 @@ + } + } + +- for (cp = (const grub_uint8_t *) name; (c = *cp) != '\0'; cp++) +- crc = (crc >> 8) ^ table[(crc ^ c) & 0xFF]; ++ if (case_insensitive) ++ for (cp = (const grub_uint8_t *) name; (c = *cp) != '\0'; cp++) ++ crc = (crc >> 8) ^ table[(crc ^ grub_toupper (c)) & 0xFF]; ++ else ++ for (cp = (const grub_uint8_t *) name; (c = *cp) != '\0'; cp++) ++ crc = (crc >> 8) ^ table[(crc ^ c) & 0xFF]; + + /* + * Only use 28 bits, since we need 4 bits in the cookie for the +@@ -748,10 +1623,34 @@ + * array_len is actual len in bytes (not encoded le_value_length). + * buf is null-terminated. + */ ++ ++static inline int ++name_cmp (const char *s1, const char *s2, grub_size_t n, ++ int case_insensitive) ++{ ++ const char *t1 = (const char *) s1; ++ const char *t2 = (const char *) s2; ++ ++ if (!case_insensitive) ++ return grub_memcmp (t1, t2, n); ++ ++ while (n--) ++ { ++ if (grub_toupper (*t1) != grub_toupper (*t2)) ++ return (int) grub_toupper (*t1) - (int) grub_toupper (*t2); ++ ++ t1++; ++ t2++; ++ } ++ ++ return 0; ++} ++ + /* XXX */ + static int + zap_leaf_array_equal (zap_leaf_phys_t * l, grub_zfs_endian_t endian, +- int blksft, int chunk, int array_len, const char *buf) ++ int blksft, int chunk, int array_len, const char *buf, ++ int case_insensitive) + { + int bseen = 0; + +@@ -763,7 +1662,8 @@ + if (chunk >= ZAP_LEAF_NUMCHUNKS (blksft)) + return (0); + +- if (grub_memcmp (la->la_array, buf + bseen, toread) != 0) ++ if (name_cmp ((char *) la->la_array, buf + bseen, toread, ++ case_insensitive) != 0) + break; + chunk = grub_zfs_to_cpu16 (la->la_next, endian); + bseen += toread; +@@ -804,7 +1704,8 @@ + static grub_err_t + zap_leaf_lookup (zap_leaf_phys_t * l, grub_zfs_endian_t endian, + int blksft, grub_uint64_t h, +- const char *name, grub_uint64_t * value) ++ const char *name, grub_uint64_t * value, ++ int case_insensitive) + { + grub_uint16_t chunk; + struct zap_leaf_entry *le; +@@ -816,7 +1717,7 @@ + return grub_error (GRUB_ERR_BAD_FS, "invalid leaf magic"); + + for (chunk = grub_zfs_to_cpu16 (l->l_hash[LEAF_HASH (blksft, h)], endian); +- chunk != CHAIN_END; chunk = le->le_next) ++ chunk != CHAIN_END; chunk = grub_zfs_to_cpu16 (le->le_next, endian)) + { + + if (chunk >= ZAP_LEAF_NUMCHUNKS (blksft)) +@@ -836,11 +1737,12 @@ + if (zap_leaf_array_equal (l, endian, blksft, + grub_zfs_to_cpu16 (le->le_name_chunk,endian), + grub_zfs_to_cpu16 (le->le_name_length, endian), +- name)) ++ name, case_insensitive)) + { + struct zap_leaf_array *la; + +- if (le->le_int_size != 8 || le->le_value_length != 1) ++ if (le->le_int_size != 8 || grub_zfs_to_cpu16 (le->le_value_length, ++ endian) != 1) + return grub_error (GRUB_ERR_BAD_FS, "invalid leaf chunk entry"); + + /* get the uint64_t property value */ +@@ -858,9 +1760,9 @@ + + /* Verify if this is a fat zap header block */ + static grub_err_t +-zap_verify (zap_phys_t *zap) ++zap_verify (zap_phys_t *zap, grub_zfs_endian_t endian) + { +- if (zap->zap_magic != (grub_uint64_t) ZAP_MAGIC) ++ if (grub_zfs_to_cpu64 (zap->zap_magic, endian) != (grub_uint64_t) ZAP_MAGIC) + return grub_error (GRUB_ERR_BAD_FS, "bad ZAP magic"); + + if (zap->zap_flags != 0) +@@ -879,7 +1781,8 @@ + /* XXX */ + static grub_err_t + fzap_lookup (dnode_end_t * zap_dnode, zap_phys_t * zap, +- char *name, grub_uint64_t * value, struct grub_zfs_data *data) ++ char *name, grub_uint64_t * value, struct grub_zfs_data *data, ++ int case_insensitive) + { + void *l; + grub_uint64_t hash, idx, blkid; +@@ -888,18 +1791,18 @@ + grub_err_t err; + grub_zfs_endian_t leafendian; + +- err = zap_verify (zap); ++ err = zap_verify (zap, zap_dnode->endian); + if (err) + return err; + +- hash = zap_hash (zap->zap_salt, name); ++ hash = zap_hash (zap->zap_salt, name, case_insensitive); + + /* get block id from index */ + if (zap->zap_ptrtbl.zt_numblks != 0) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "external pointer tables not supported"); + idx = ZAP_HASH_IDX (hash, zap->zap_ptrtbl.zt_shift); +- blkid = ((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))]; ++ blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], zap_dnode->endian); + + /* Get the leaf block */ + if ((1U << blksft) < sizeof (zap_leaf_phys_t)) +@@ -908,7 +1811,8 @@ + if (err) + return err; + +- err = zap_leaf_lookup (l, leafendian, blksft, hash, name, value); ++ err = zap_leaf_lookup (l, leafendian, blksft, hash, name, value, ++ case_insensitive); + grub_free (l); + return err; + } +@@ -922,14 +1826,14 @@ + { + zap_leaf_phys_t *l; + void *l_in; +- grub_uint64_t idx, blkid; ++ grub_uint64_t idx, idx2, blkid; + grub_uint16_t chunk; + int blksft = zfs_log2 (grub_zfs_to_cpu16 (zap_dnode->dn.dn_datablkszsec, + zap_dnode->endian) << DNODE_SHIFT); + grub_err_t err; + grub_zfs_endian_t endian; + +- if (zap_verify (zap)) ++ if (zap_verify (zap, zap_dnode->endian)) + return 0; + + /* get block id from index */ +@@ -945,9 +1849,17 @@ + grub_error (GRUB_ERR_BAD_FS, "ZAP leaf is too small"); + return 0; + } +- for (idx = 0; idx < zap->zap_ptrtbl.zt_numblks; idx++) ++ for (idx = 0; idx < (1ULL << zap->zap_ptrtbl.zt_shift); idx++) + { +- blkid = ((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))]; ++ blkid = grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx + (1 << (blksft - 3 - 1))], ++ zap_dnode->endian); ++ ++ for (idx2 = 0; idx2 < idx; idx2++) ++ if (blkid == grub_zfs_to_cpu64 (((grub_uint64_t *) zap)[idx2 + (1 << (blksft - 3 - 1))], ++ zap_dnode->endian)) ++ break; ++ if (idx2 != idx) ++ continue; + + err = dmu_read (zap_dnode, blkid, &l_in, &endian, data); + l = l_in; +@@ -983,8 +1895,11 @@ + + buf = grub_malloc (grub_zfs_to_cpu16 (le->le_name_length, endian) + + 1); +- if (zap_leaf_array_get (l, endian, blksft, le->le_name_chunk, +- le->le_name_length, buf)) ++ if (zap_leaf_array_get (l, endian, blksft, ++ grub_zfs_to_cpu16 (le->le_name_chunk, ++ endian), ++ grub_zfs_to_cpu16 (le->le_name_length, ++ endian), buf)) + { + grub_free (buf); + continue; +@@ -996,7 +1911,9 @@ + continue; + + /* get the uint64_t property value */ +- la = &ZAP_LEAF_CHUNK (l, blksft, le->le_value_chunk).l_array; ++ la = &ZAP_LEAF_CHUNK (l, blksft, ++ grub_zfs_to_cpu16 (le->le_value_chunk, ++ endian)).l_array; + val = grub_be_to_cpu64 (la->la_array64); + if (hook (buf, val)) + return 1; +@@ -1014,7 +1931,7 @@ + */ + static grub_err_t + zap_lookup (dnode_end_t * zap_dnode, char *name, grub_uint64_t * val, +- struct grub_zfs_data *data) ++ struct grub_zfs_data *data, int case_insensitive) + { + grub_uint64_t block_type; + int size; +@@ -1037,7 +1954,8 @@ + if (block_type == ZBT_MICRO) + { + grub_dprintf ("zfs", "micro zap\n"); +- err = (mzap_lookup (zapbuf, endian, size, name, val)); ++ err = mzap_lookup (zapbuf, endian, size, name, val, ++ case_insensitive); + grub_dprintf ("zfs", "returned %d\n", err); + grub_free (zapbuf); + return err; +@@ -1046,7 +1964,8 @@ + { + grub_dprintf ("zfs", "fat zap\n"); + /* this is a fat zap */ +- err = (fzap_lookup (zap_dnode, zapbuf, name, val, data)); ++ err = fzap_lookup (zap_dnode, zapbuf, name, val, data, ++ case_insensitive); + grub_dprintf ("zfs", "returned %d\n", err); + grub_free (zapbuf); + return err; +@@ -1074,7 +1993,7 @@ + return 0; + block_type = grub_zfs_to_cpu64 (*((grub_uint64_t *) zapbuf), endian); + +- grub_dprintf ("zfs", "zap read\n"); ++ grub_dprintf ("zfs", "zap iterate\n"); + + if (block_type == ZBT_MICRO) + { +@@ -1172,9 +2091,9 @@ + */ + static grub_err_t + dnode_get_path (dnode_end_t * mdn, const char *path_in, dnode_end_t * dn, +- struct grub_zfs_data *data) ++ struct grub_zfs_data *data, int *case_insensitive) + { +- grub_uint64_t objnum, version; ++ grub_uint64_t objnum, version, insensitivity; + char *cname, ch; + grub_err_t err = GRUB_ERR_NONE; + char *path, *path_buf; +@@ -1199,19 +2118,31 @@ + return err; + } + +- err = zap_lookup (&(dnode_path->dn), ZPL_VERSION_STR, &version, data); ++ err = zap_lookup (&(dnode_path->dn), ZPL_VERSION_STR, &version, ++ data, 0); + if (err) + { + grub_free (dn_new); + return err; + } ++ + if (version > ZPL_VERSION) + { + grub_free (dn_new); + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "too new ZPL version"); + } +- +- err = zap_lookup (&(dnode_path->dn), ZFS_ROOT_OBJ, &objnum, data); ++ ++ err = zap_lookup (&(dnode_path->dn), "casesensitivity", &insensitivity, ++ data, 0); ++ if (err == GRUB_ERR_FILE_NOT_FOUND) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ insensitivity = 0; ++ } ++ if (case_insensitive) ++ *case_insensitive = insensitivity; ++ ++ err = zap_lookup (&(dnode_path->dn), ZFS_ROOT_OBJ, &objnum, data, 0); + if (err) + { + grub_free (dn_new); +@@ -1272,7 +2203,7 @@ + grub_free (path_buf); + return grub_error (GRUB_ERR_BAD_FILE_TYPE, "not a directory"); + } +- err = zap_lookup (&(dnode_path->dn), cname, &objnum, data); ++ err = zap_lookup (&(dnode_path->dn), cname, &objnum, data, insensitivity); + if (err) + break; + +@@ -1291,22 +2222,54 @@ + break; + + *path = ch; +-#if 0 +- if (((grub_zfs_to_cpu64(((znode_phys_t *) DN_BONUS (&dnode_path->dn.dn))->zp_mode, dnode_path->dn.endian) >> 12) & 0xf) == 0xa && ch) ++ if (dnode_path->dn.dn.dn_bonustype == DMU_OT_ZNODE ++ && ((grub_zfs_to_cpu64(((znode_phys_t *) DN_BONUS (&dnode_path->dn.dn))->zp_mode, dnode_path->dn.endian) >> 12) & 0xf) == 0xa) + { ++ char *sym_value; ++ grub_size_t sym_sz; ++ int free_symval = 0; + char *oldpath = path, *oldpathbuf = path_buf; +- path = path_buf +- = grub_malloc (sizeof (dnode_path->dn.dn.dn_bonus) +- - sizeof (znode_phys_t) + grub_strlen (oldpath) + 1); ++ sym_value = ((char *) DN_BONUS (&dnode_path->dn.dn) + sizeof (struct znode_phys)); ++ ++ sym_sz = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dnode_path->dn.dn))->zp_size, dnode_path->dn.endian); ++ ++ if (dnode_path->dn.dn.dn_flags & 1) ++ { ++ grub_size_t block; ++ grub_size_t blksz; ++ blksz = (grub_zfs_to_cpu16 (dnode_path->dn.dn.dn_datablkszsec, ++ dnode_path->dn.endian) ++ << SPA_MINBLOCKSHIFT); ++ ++ sym_value = grub_malloc (sym_sz); ++ if (!sym_value) ++ return grub_errno; ++ for (block = 0; block < (sym_sz + blksz - 1) / blksz; block++) ++ { ++ void *t; ++ grub_size_t movesize; ++ ++ err = dmu_read (&(dnode_path->dn), block, &t, 0, data); ++ if (err) ++ return err; ++ ++ movesize = MIN (sym_sz - block * blksz, blksz); ++ ++ grub_memcpy (sym_value + block * blksz, t, movesize); ++ grub_free (t); ++ } ++ free_symval = 1; ++ } ++ path = path_buf = grub_malloc (sym_sz + grub_strlen (oldpath) + 1); + if (!path_buf) + { + grub_free (oldpathbuf); + return grub_errno; + } +- grub_memcpy (path, +- (char *) DN_BONUS(&dnode_path->dn.dn) + sizeof (znode_phys_t), +- sizeof (dnode_path->dn.dn.dn_bonus) - sizeof (znode_phys_t)); +- path [sizeof (dnode_path->dn.dn.dn_bonus) - sizeof (znode_phys_t)] = 0; ++ grub_memcpy (path, sym_value, sym_sz); ++ if (free_symval) ++ grub_free (sym_value); ++ path [sym_sz] = 0; + grub_memcpy (path + grub_strlen (path), oldpath, + grub_strlen (oldpath) + 1); + +@@ -1324,7 +2287,62 @@ + grub_free (dn_new); + } + } +-#endif ++ if (dnode_path->dn.dn.dn_bonustype == DMU_OT_SA) ++ { ++ void *sahdrp; ++ int hdrsize; ++ ++ if (dnode_path->dn.dn.dn_bonuslen != 0) ++ { ++ sahdrp = DN_BONUS (&dnode_path->dn.dn); ++ } ++ else if (dnode_path->dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) ++ { ++ blkptr_t *bp = &dnode_path->dn.dn.dn_spill; ++ ++ err = zio_read (bp, dnode_path->dn.endian, &sahdrp, NULL, data); ++ if (err) ++ return err; ++ } ++ else ++ { ++ return grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); ++ } ++ ++ hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); ++ ++ if (((grub_zfs_to_cpu64 (*(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_TYPE_OFFSET), dnode_path->dn.endian) >> 12) & 0xf) == 0xa) ++ { ++ char *sym_value = (char *) sahdrp + hdrsize + SA_SYMLINK_OFFSET; ++ grub_size_t sym_sz = ++ grub_zfs_to_cpu64 (*(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_SIZE_OFFSET), dnode_path->dn.endian); ++ char *oldpath = path, *oldpathbuf = path_buf; ++ path = path_buf = grub_malloc (sym_sz + grub_strlen (oldpath) + 1); ++ if (!path_buf) ++ { ++ grub_free (oldpathbuf); ++ return grub_errno; ++ } ++ grub_memcpy (path, sym_value, sym_sz); ++ path [sym_sz] = 0; ++ grub_memcpy (path + grub_strlen (path), oldpath, ++ grub_strlen (oldpath) + 1); ++ ++ grub_free (oldpathbuf); ++ if (path[0] != '/') ++ { ++ dn_new = dnode_path; ++ dnode_path = dn_new->next; ++ grub_free (dn_new); ++ } ++ else while (dnode_path != root) ++ { ++ dn_new = dnode_path; ++ dnode_path = dn_new->next; ++ grub_free (dn_new); ++ } ++ } ++ } + } + + if (!err) +@@ -1417,7 +2435,7 @@ + + grub_dprintf ("zfs", "alive\n"); + +- err = zap_lookup (mdn, DMU_POOL_ROOT_DATASET, &objnum, data); ++ err = zap_lookup (mdn, DMU_POOL_ROOT_DATASET, &objnum, data, 0); + if (err) + return err; + +@@ -1452,7 +2470,7 @@ + if (err) + return err; + +- err = zap_lookup (mdn, cname, &objnum, data); ++ err = zap_lookup (mdn, cname, &objnum, data, 0); + if (err) + return err; + +@@ -1495,7 +2513,7 @@ + static grub_err_t + dnode_get_fullpath (const char *fullpath, dnode_end_t * mdn, + grub_uint64_t *mdnobj, dnode_end_t * dn, int *isfs, +- struct grub_zfs_data *data) ++ struct grub_zfs_data *data, int *case_insensitive) + { + char *fsname, *snapname; + const char *ptr_at, *filename; +@@ -1573,7 +2591,7 @@ + err = dnode_get (&(data->mos), snapobj, + DMU_OT_DSL_DS_SNAP_MAP, mdn, data); + if (!err) +- err = zap_lookup (mdn, snapname, &headobj, data); ++ err = zap_lookup (mdn, snapname, &headobj, data, 0); + if (!err) + err = dnode_get (&(data->mos), headobj, DMU_OT_DSL_DATASET, mdn, data); + if (err) +@@ -1597,7 +2615,7 @@ + grub_free (snapname); + return GRUB_ERR_NONE; + } +- err = dnode_get_path (mdn, filename, dn, data); ++ err = dnode_get_path (mdn, filename, dn, data, case_insensitive); + grub_free (fsname); + grub_free (snapname); + return err; +@@ -1625,11 +2643,12 @@ + */ + + static int +-nvlist_find_value (char *nvlist, char *name, int valtype, char **val, ++nvlist_find_value (const char *nvlist, const char *name, ++ int valtype, char **val, + grub_size_t *size_out, grub_size_t *nelm_out) + { + int name_len, type, encode_size; +- char *nvpair, *nvp_name; ++ const char *nvpair, *nvp_name; + + /* Verify if the 1st and 2nd byte in the nvlist are valid. */ + /* NOTE: independently of what endianness header announces all +@@ -1671,7 +2690,7 @@ + + if ((grub_strncmp (nvp_name, name, name_len) == 0) && type == valtype) + { +- *val = nvpair; ++ *val = (char *) nvpair; + *size_out = encode_size; + if (nelm_out) + *nelm_out = nelm; +@@ -1684,7 +2703,8 @@ + } + + int +-grub_zfs_nvlist_lookup_uint64 (char *nvlist, char *name, grub_uint64_t * out) ++grub_zfs_nvlist_lookup_uint64 (const char *nvlist, const char *name, ++ grub_uint64_t * out) + { + char *nvpair; + grub_size_t size; +@@ -1704,7 +2724,7 @@ + } + + char * +-grub_zfs_nvlist_lookup_string (char *nvlist, char *name) ++grub_zfs_nvlist_lookup_string (const char *nvlist, const char *name) + { + char *nvpair; + char *ret; +@@ -1732,7 +2752,7 @@ + } + + char * +-grub_zfs_nvlist_lookup_nvlist (char *nvlist, char *name) ++grub_zfs_nvlist_lookup_nvlist (const char *nvlist, const char *name) + { + char *nvpair; + char *ret; +@@ -1753,199 +2773,114 @@ + } + + int +-grub_zfs_nvlist_lookup_nvlist_array_get_nelm (char *nvlist, char *name) +-{ +- char *nvpair; +- grub_size_t nelm, size; +- int found; +- +- found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST, &nvpair, +- &size, &nelm); +- if (! found) +- return -1; +- return nelm; +-} +- +-char * +-grub_zfs_nvlist_lookup_nvlist_array (char *nvlist, char *name, +- grub_size_t index) +-{ +- char *nvpair, *nvpairptr; +- int found; +- char *ret; +- grub_size_t size; +- unsigned i; +- grub_size_t nelm; +- +- found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST, &nvpair, +- &size, &nelm); +- if (!found) +- return 0; +- if (index >= nelm) +- { +- grub_error (GRUB_ERR_OUT_OF_RANGE, "trying to lookup past nvlist array"); +- return 0; +- } +- +- nvpairptr = nvpair; +- +- for (i = 0; i < index; i++) +- { +- grub_uint32_t encode_size; +- +- /* skip the header, nvl_version, and nvl_nvflag */ +- nvpairptr = nvpairptr + 4 * 2; +- +- while (nvpairptr < nvpair + size +- && (encode_size = grub_be_to_cpu32 (*(grub_uint32_t *) nvpairptr))) +- nvlist += encode_size; /* goto the next nvpair */ +- +- nvlist = nvlist + 4 * 2; /* skip the ending 2 zeros - 8 bytes */ +- } +- +- if (nvpairptr >= nvpair + size +- || nvpairptr + grub_be_to_cpu32 (*(grub_uint32_t *) (nvpairptr + 4 * 2)) +- >= nvpair + size) +- { +- grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist array"); +- return 0; +- } +- +- ret = grub_zalloc (grub_be_to_cpu32 (*(grub_uint32_t *) (nvpairptr + 4 * 2)) +- + 3 * sizeof (grub_uint32_t)); +- if (!ret) +- return 0; +- grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); +- +- grub_memcpy (ret + sizeof (grub_uint32_t), nvpairptr, size); +- return ret; +-} +- +-static grub_err_t +-zfs_fetch_nvlist (struct grub_zfs_data * data, char **nvlist) +-{ +- grub_err_t err; +- +- *nvlist = grub_malloc (VDEV_PHYS_SIZE); +- /* Read in the vdev name-value pair list (112K). */ +- err = grub_disk_read (data->disk, data->vdev_phys_sector, 0, +- VDEV_PHYS_SIZE, *nvlist); +- if (err) +- { +- grub_free (*nvlist); +- *nvlist = 0; +- return err; +- } +- return GRUB_ERR_NONE; +-} +- +-/* +- * Check the disk label information and retrieve needed vdev name-value pairs. +- * +- */ +-static grub_err_t +-check_pool_label (struct grub_zfs_data *data) ++grub_zfs_nvlist_lookup_nvlist_array_get_nelm (const char *nvlist, ++ const char *name) + { +- grub_uint64_t pool_state, txg = 0; +- char *nvlist; +-#if 0 +- char *nv; +-#endif +- grub_uint64_t diskguid; +- grub_uint64_t version; ++ char *nvpair; ++ grub_size_t nelm, size; + int found; +- grub_err_t err; + +- err = zfs_fetch_nvlist (data, &nvlist); +- if (err) +- return err; ++ found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST_ARRAY, &nvpair, ++ &size, &nelm); ++ if (! found) ++ return -1; ++ return nelm; ++} + +- grub_dprintf ("zfs", "check 2 passed\n"); ++static int ++get_nvlist_size (const char *beg, const char *limit) ++{ ++ const char *ptr; ++ grub_uint32_t encode_size; ++ ++ ptr = beg + 8; + +- found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_STATE, +- &pool_state); +- if (! found) +- { +- grub_free (nvlist); +- if (! grub_errno) +- grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_STATE " not found"); +- return grub_errno; +- } +- grub_dprintf ("zfs", "check 3 passed\n"); ++ while (ptr < limit ++ && (encode_size = grub_be_to_cpu32 (*(grub_uint32_t *) ptr))) ++ ptr += encode_size; /* goto the next nvpair */ ++ ptr += 8; ++ return (ptr > limit) ? -1 : (ptr - beg); ++} + +- if (pool_state == POOL_STATE_DESTROYED) +- { +- grub_free (nvlist); +- return grub_error (GRUB_ERR_BAD_FS, "zpool is marked as destroyed"); +- } +- grub_dprintf ("zfs", "check 4 passed\n"); ++char * ++grub_zfs_nvlist_lookup_nvlist_array (const char *nvlist, const char *name, ++ grub_size_t index) ++{ ++ char *nvpair, *nvpairptr; ++ int found; ++ char *ret; ++ grub_size_t size; ++ unsigned i; ++ grub_size_t nelm; ++ int elemsize = 0; + +- found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_TXG, &txg); ++ found = nvlist_find_value (nvlist, name, DATA_TYPE_NVLIST_ARRAY, &nvpair, ++ &size, &nelm); + if (!found) ++ return 0; ++ if (index >= nelm) + { +- grub_free (nvlist); +- if (! grub_errno) +- grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_POOL_TXG " not found"); +- return grub_errno; ++ grub_error (GRUB_ERR_OUT_OF_RANGE, "trying to lookup past nvlist array"); ++ return 0; + } +- grub_dprintf ("zfs", "check 6 passed\n"); + +- /* not an active device */ +- if (txg == 0) +- { +- grub_free (nvlist); +- return grub_error (GRUB_ERR_BAD_FS, "zpool isn't active"); +- } +- grub_dprintf ("zfs", "check 7 passed\n"); ++ nvpairptr = nvpair; + +- found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_VERSION, +- &version); +- if (! found) ++ for (i = 0; i < index; i++) + { +- grub_free (nvlist); +- if (! grub_errno) +- grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_VERSION " not found"); +- return grub_errno; +- } +- grub_dprintf ("zfs", "check 8 passed\n"); ++ int r; ++ r = get_nvlist_size (nvpairptr, nvpair + size); + +- if (version > SPA_VERSION) +- { +- grub_free (nvlist); +- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- "too new version %llu > %llu", +- (unsigned long long) version, +- (unsigned long long) SPA_VERSION); +- } +- grub_dprintf ("zfs", "check 9 passed\n"); +-#if 0 +- if (nvlist_lookup_value (nvlist, ZPOOL_CONFIG_VDEV_TREE, &nv, +- DATA_TYPE_NVLIST, NULL)) +- { +- grub_free (vdev); +- return (GRUB_ERR_BAD_FS); ++ if (r < 0) ++ { ++ grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist array"); ++ return NULL; ++ } ++ nvpairptr += r; + } +- grub_dprintf ("zfs", "check 10 passed\n"); +-#endif + +- found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_GUID, &diskguid); +- if (! found) ++ elemsize = get_nvlist_size (nvpairptr, nvpair + size); ++ ++ if (elemsize < 0) + { +- grub_free (nvlist); +- if (! grub_errno) +- grub_error (GRUB_ERR_BAD_FS, ZPOOL_CONFIG_GUID " not found"); +- return grub_errno; ++ grub_error (GRUB_ERR_BAD_FS, "incorrect nvlist array"); ++ return 0; + } +- grub_dprintf ("zfs", "check 11 passed\n"); + +- grub_free (nvlist); ++ ret = grub_zalloc (elemsize + sizeof (grub_uint32_t)); ++ if (!ret) ++ return 0; ++ grub_memcpy (ret, nvlist, sizeof (grub_uint32_t)); + +- return GRUB_ERR_NONE; ++ grub_memcpy (ret + sizeof (grub_uint32_t), nvpairptr, elemsize); ++ return ret; ++} ++ ++static void ++unmount_device (struct grub_zfs_device_desc *desc) ++{ ++ unsigned i; ++ switch (desc->type) ++ { ++ case DEVICE_LEAF: ++ if (!desc->original && desc->dev) ++ grub_device_close (desc->dev); ++ return; ++ case DEVICE_RAIDZ: ++ case DEVICE_MIRROR: ++ for (i = 0; i < desc->n_children; i++) ++ unmount_device (&desc->children[i]); ++ return; ++ } + } + + static void + zfs_unmount (struct grub_zfs_data *data) + { ++ unsigned i; ++ for (i = 0; i < data->n_devices_attached; i++) ++ unmount_device (&data->devices_attached[i]); ++ grub_free (data->devices_attached); + grub_free (data->dnode_buf); + grub_free (data->dnode_mdn); + grub_free (data->file_buf); +@@ -1961,13 +2896,11 @@ + zfs_mount (grub_device_t dev) + { + struct grub_zfs_data *data = 0; +- int label = 0; +- uberblock_phys_t *ub_array, *ubbest = NULL; +- vdev_boot_header_t *bh; +- void *osp = 0; +- grub_size_t ospsize; + grub_err_t err; +- int vdevnum; ++ objset_phys_t *osp = 0; ++ grub_size_t ospsize; ++ grub_zfs_endian_t ub_endian = UNKNOWN_ENDIAN; ++ uberblock_t *ub; + + if (! dev->disk) + { +@@ -1975,119 +2908,56 @@ + return 0; + } + +- data = grub_malloc (sizeof (*data)); ++ data = grub_zalloc (sizeof (*data)); + if (!data) + return 0; +- grub_memset (data, 0, sizeof (*data)); + #if 0 + /* if it's our first time here, zero the best uberblock out */ + if (data->best_drive == 0 && data->best_part == 0 && find_best_root) + grub_memset (¤t_uberblock, 0, sizeof (uberblock_t)); + #endif + +- data->disk = dev->disk; +- +- ub_array = grub_malloc (VDEV_UBERBLOCK_RING); +- if (!ub_array) ++ data->n_devices_allocated = 16; ++ data->devices_attached = grub_malloc (sizeof (data->devices_attached[0]) ++ * data->n_devices_allocated); ++ data->n_devices_attached = 0; ++ err = scan_disk (dev, data, 1); ++ if (err) + { + zfs_unmount (data); +- return 0; ++ return NULL; + } + +- bh = grub_malloc (VDEV_BOOT_HEADER_SIZE); +- if (!bh) ++ ub = &(data->current_uberblock); ++ ub_endian = (grub_zfs_to_cpu64 (ub->ub_magic, ++ LITTLE_ENDIAN) == UBERBLOCK_MAGIC ++ ? LITTLE_ENDIAN : BIG_ENDIAN); ++ ++ err = zio_read (&ub->ub_rootbp, ub_endian, ++ (void **) &osp, &ospsize, data); ++ if (err) + { + zfs_unmount (data); +- grub_free (ub_array); +- return 0; ++ return NULL; + } + +- vdevnum = VDEV_LABELS; +- +- /* Don't check back labels on CDROM. */ +- if (grub_disk_get_size (dev->disk) == GRUB_DISK_SIZE_UNKNOWN) +- vdevnum = VDEV_LABELS / 2; +- +- for (label = 0; ubbest == NULL && label < vdevnum; label++) ++ if (ospsize < OBJSET_PHYS_SIZE_V14) + { +- grub_zfs_endian_t ub_endian = UNKNOWN_ENDIAN; +- grub_dprintf ("zfs", "label %d\n", label); +- +- data->vdev_phys_sector +- = label * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT) +- + ((VDEV_SKIP_SIZE + VDEV_BOOT_HEADER_SIZE) >> SPA_MINBLOCKSHIFT) +- + (label < VDEV_LABELS / 2 ? 0 : grub_disk_get_size (dev->disk) +- - VDEV_LABELS * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT)); +- +- /* Read in the uberblock ring (128K). */ +- err = grub_disk_read (data->disk, data->vdev_phys_sector +- + (VDEV_PHYS_SIZE >> SPA_MINBLOCKSHIFT), +- 0, VDEV_UBERBLOCK_RING, (char *) ub_array); +- if (err) +- { +- grub_errno = GRUB_ERR_NONE; +- continue; +- } +- grub_dprintf ("zfs", "label ok %d\n", label); +- +- ubbest = find_bestub (ub_array, data->vdev_phys_sector); +- if (!ubbest) +- { +- grub_dprintf ("zfs", "No uberblock found\n"); +- grub_errno = GRUB_ERR_NONE; +- continue; +- } +- ub_endian = (grub_zfs_to_cpu64 (ubbest->ubp_uberblock.ub_magic, +- LITTLE_ENDIAN) == UBERBLOCK_MAGIC +- ? LITTLE_ENDIAN : BIG_ENDIAN); +- err = zio_read (&ubbest->ubp_uberblock.ub_rootbp, +- ub_endian, +- &osp, &ospsize, data); +- if (err) +- { +- grub_dprintf ("zfs", "couldn't zio_read\n"); +- grub_errno = GRUB_ERR_NONE; +- continue; +- } +- +- if (ospsize < OBJSET_PHYS_SIZE_V14) +- { +- grub_dprintf ("zfs", "osp too small\n"); +- grub_free (osp); +- continue; +- } +- grub_dprintf ("zfs", "ubbest %p\n", ubbest); +- +- err = check_pool_label (data); +- if (err) +- { +- grub_errno = GRUB_ERR_NONE; +- continue; +- } +-#if 0 +- if (find_best_root && +- vdev_uberblock_compare (&ubbest->ubp_uberblock, +- &(current_uberblock)) <= 0) +- continue; +-#endif +- /* Got the MOS. Save it at the memory addr MOS. */ +- grub_memmove (&(data->mos.dn), &((objset_phys_t *) osp)->os_meta_dnode, +- DNODE_SIZE); +- data->mos.endian = (grub_zfs_to_cpu64 (ubbest->ubp_uberblock.ub_rootbp.blk_prop, ub_endian) >> 63) & 1; +- grub_memmove (&(data->current_uberblock), +- &ubbest->ubp_uberblock, sizeof (uberblock_t)); +- grub_free (ub_array); +- grub_free (bh); ++ grub_error (GRUB_ERR_BAD_FS, "OSP too small"); + grub_free (osp); +- return data; ++ zfs_unmount (data); ++ return NULL; + } +- grub_error (GRUB_ERR_BAD_FS, "couldn't find a valid label"); +- zfs_unmount (data); +- grub_free (ub_array); +- grub_free (bh); ++ ++ /* Got the MOS. Save it at the memory addr MOS. */ ++ grub_memmove (&(data->mos.dn), &osp->os_meta_dnode, DNODE_SIZE); ++ data->mos.endian = (grub_zfs_to_cpu64 (ub->ub_rootbp.blk_prop, ++ ub_endian) >> 63) & 1; + grub_free (osp); + +- return 0; ++ data->mounted = 1; ++ ++ return data; + } + + grub_err_t +@@ -2099,7 +2969,7 @@ + zfs = zfs_mount (dev); + if (!zfs) + return grub_errno; +- err = zfs_fetch_nvlist (zfs, nvlist); ++ err = zfs_fetch_nvlist (zfs->device_original, nvlist); + zfs_unmount (zfs); + return err; + } +@@ -2115,7 +2985,7 @@ + if (! data) + return grub_errno; + +- err = zfs_fetch_nvlist (data, &nvlist); ++ err = zfs_fetch_nvlist (data->device_original, &nvlist); + if (err) + { + zfs_unmount (data); +@@ -2131,11 +3001,7 @@ + static grub_err_t + zfs_uuid (grub_device_t device, char **uuid) + { +- char *nvlist; +- int found; + struct grub_zfs_data *data; +- grub_uint64_t guid; +- grub_err_t err; + + *uuid = 0; + +@@ -2143,24 +3009,36 @@ + if (! data) + return grub_errno; + +- err = zfs_fetch_nvlist (data, &nvlist); +- if (err) +- { +- zfs_unmount (data); +- return err; +- } +- +- found = grub_zfs_nvlist_lookup_uint64 (nvlist, ZPOOL_CONFIG_POOL_GUID, &guid); +- if (! found) +- return grub_errno; +- grub_free (nvlist); +- *uuid = grub_xasprintf ("%016llx", (long long unsigned) guid); ++ *uuid = grub_xasprintf ("%016llx", (long long unsigned) data->guid); + zfs_unmount (data); + if (! *uuid) + return grub_errno; + return GRUB_ERR_NONE; + } + ++static grub_err_t ++zfs_mtime (grub_device_t device, grub_int32_t *mt) ++{ ++ struct grub_zfs_data *data; ++ grub_zfs_endian_t ub_endian = UNKNOWN_ENDIAN; ++ uberblock_t *ub; ++ ++ *mt = 0; ++ ++ data = zfs_mount (device); ++ if (! data) ++ return grub_errno; ++ ++ ub = &(data->current_uberblock); ++ ub_endian = (grub_zfs_to_cpu64 (ub->ub_magic, ++ LITTLE_ENDIAN) == UBERBLOCK_MAGIC ++ ? LITTLE_ENDIAN : BIG_ENDIAN); ++ ++ *mt = grub_zfs_to_cpu64 (ub->ub_timestamp, ub_endian); ++ zfs_unmount (data); ++ return GRUB_ERR_NONE; ++} ++ + /* + * zfs_open() locates a file in the rootpool by following the + * MOS and places the dnode of the file in the memory address DNODE. +@@ -2177,7 +3055,7 @@ + return grub_errno; + + err = dnode_get_fullpath (fsfilename, &(data->mdn), 0, +- &(data->dnode), &isfs, data); ++ &(data->dnode), &isfs, data, NULL); + if (err) + { + zfs_unmount (data); +@@ -2227,12 +3105,14 @@ + } + + hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); +- file->size = *(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_SIZE_OFFSET); ++ file->size = grub_zfs_to_cpu64 (*(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_SIZE_OFFSET), data->dnode.endian); + } +- else ++ else if (data->dnode.dn.dn_bonustype == DMU_OT_ZNODE) + { + file->size = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&data->dnode.dn))->zp_size, data->dnode.endian); + } ++ else ++ return grub_error (GRUB_ERR_BAD_FS, "bad bonus type"); + + file->data = data; + file->offset = 0; +@@ -2248,7 +3128,7 @@ + grub_zfs_read (grub_file_t file, char *buf, grub_size_t len) + { + struct grub_zfs_data *data = (struct grub_zfs_data *) file->data; +- int blksz, movesize; ++ grub_size_t blksz, movesize; + grub_size_t length; + grub_size_t read; + grub_err_t err; +@@ -2302,7 +3182,7 @@ + data->file_start = blkid * blksz; + data->file_end = data->file_start + blksz; + +- movesize = MIN (length, data->file_end - (int) file->offset - read); ++ movesize = MIN (length, data->file_end - file->offset - read); + + grub_memmove (buf, data->file_buf + file->offset + read + - data->file_start, movesize); +@@ -2339,7 +3219,7 @@ + return grub_errno; + + err = dnode_get_fullpath (fsfilename, &(data->mdn), mdnobj, +- &(data->dnode), &isfs, data); ++ &(data->dnode), &isfs, data, NULL); + zfs_unmount (data); + return err; + } +@@ -2377,7 +3257,7 @@ + return; + } + +- err = zap_lookup (&dn, ZFS_ROOT_OBJ, &objnum, data); ++ err = zap_lookup (&dn, ZFS_ROOT_OBJ, &objnum, data, 0); + if (err) + { + grub_dprintf ("zfs", "failed here\n"); +@@ -2391,8 +3271,39 @@ + return; + } + +- info->mtimeset = 1; +- info->mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], dn.endian); ++ if (dn.dn.dn_bonustype == DMU_OT_SA) ++ { ++ void *sahdrp; ++ int hdrsize; ++ ++ if (dn.dn.dn_bonuslen != 0) ++ { ++ sahdrp = (sa_hdr_phys_t *) DN_BONUS (&dn.dn); ++ } ++ else if (dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) ++ { ++ blkptr_t *bp = &dn.dn.dn_spill; ++ ++ err = zio_read (bp, dn.endian, &sahdrp, NULL, data); ++ if (err) ++ return; ++ } ++ else ++ { ++ grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); ++ return; ++ } ++ ++ hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); ++ info->mtimeset = 1; ++ info->mtime = grub_zfs_to_cpu64 (*(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_MTIME_OFFSET), dn.endian); ++ } ++ ++ if (dn.dn.dn_bonustype == DMU_OT_ZNODE) ++ { ++ info->mtimeset = 1; ++ info->mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], dn.endian); ++ } + return; + } + +@@ -2403,6 +3314,7 @@ + struct grub_zfs_data *data; + grub_err_t err; + int isfs; ++ int case_insensitive = 0; + auto int NESTED_FUNC_ATTR iterate_zap (const char *name, grub_uint64_t val); + auto int NESTED_FUNC_ATTR iterate_zap_fs (const char *name, + grub_uint64_t val); +@@ -2416,10 +3328,48 @@ + grub_memset (&info, 0, sizeof (info)); + + dnode_get (&(data->mdn), val, 0, &dn, data); +- info.mtimeset = 1; +- info.mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], dn.endian); +- info.dir = (dn.dn.dn_type == DMU_OT_DIRECTORY_CONTENTS); +- grub_dprintf ("zfs", "type=%d, name=%s\n", ++ ++ if (dn.dn.dn_bonustype == DMU_OT_SA) ++ { ++ void *sahdrp; ++ int hdrsize; ++ ++ if (dn.dn.dn_bonuslen != 0) ++ { ++ sahdrp = (sa_hdr_phys_t *) DN_BONUS (&data->dnode.dn); ++ } ++ else if (dn.dn.dn_flags & DNODE_FLAG_SPILL_BLKPTR) ++ { ++ blkptr_t *bp = &dn.dn.dn_spill; ++ ++ err = zio_read (bp, dn.endian, &sahdrp, NULL, data); ++ if (err) ++ { ++ grub_print_error (); ++ return 0; ++ } ++ } ++ else ++ { ++ grub_error (GRUB_ERR_BAD_FS, "filesystem is corrupt"); ++ grub_print_error (); ++ return 0; ++ } ++ ++ hdrsize = SA_HDR_SIZE (((sa_hdr_phys_t *) sahdrp)); ++ info.mtimeset = 1; ++ info.mtime = grub_zfs_to_cpu64 (*(grub_uint64_t *) ((char *) sahdrp + hdrsize + SA_MTIME_OFFSET), dn.endian); ++ info.case_insensitive = case_insensitive; ++ } ++ ++ if (dn.dn.dn_bonustype == DMU_OT_ZNODE) ++ { ++ info.mtimeset = 1; ++ info.mtime = grub_zfs_to_cpu64 (((znode_phys_t *) DN_BONUS (&dn.dn))->zp_mtime[0], ++ dn.endian); ++ } ++ info.dir = (dn.dn.dn_type == DMU_OT_DIRECTORY_CONTENTS); ++ grub_dprintf ("zfs", "type=%d, name=%s\n", + (int)dn.dn.dn_type, (char *)name); + return hook (name, &info); + } +@@ -2464,7 +3414,8 @@ + data = zfs_mount (device); + if (! data) + return grub_errno; +- err = dnode_get_fullpath (path, &(data->mdn), 0, &(data->dnode), &isfs, data); ++ err = dnode_get_fullpath (path, &(data->mdn), 0, &(data->dnode), &isfs, data, ++ &case_insensitive); + if (err) + { + zfs_unmount (data); +@@ -2532,12 +3483,13 @@ + .close = grub_zfs_close, + .label = zfs_label, + .uuid = zfs_uuid, +- .mtime = 0, ++ .mtime = zfs_mtime, + .next = 0 + }; + + GRUB_MOD_INIT (zfs) + { ++ COMPILE_TIME_ASSERT (sizeof (zap_leaf_chunk_t) == ZAP_LEAF_CHUNKSIZE); + grub_fs_register (&grub_zfs_fs); + #ifndef GRUB_UTIL + my_mod = mod; +--- a/include/grub/zfs/zio.h ++++ b/include/grub/zfs/zio.h +@@ -77,7 +77,15 @@ + ZIO_COMPRESS_OFF, + ZIO_COMPRESS_LZJB, + ZIO_COMPRESS_EMPTY, +- ZIO_COMPRESS_GZIP, ++ ZIO_COMPRESS_GZIP1, ++ ZIO_COMPRESS_GZIP2, ++ ZIO_COMPRESS_GZIP3, ++ ZIO_COMPRESS_GZIP4, ++ ZIO_COMPRESS_GZIP5, ++ ZIO_COMPRESS_GZIP6, ++ ZIO_COMPRESS_GZIP7, ++ ZIO_COMPRESS_GZIP8, ++ ZIO_COMPRESS_GZIP9, + ZIO_COMPRESS_FUNCTIONS + }; + +--- a/grub-core/fs/zfs/zfsinfo.c ++++ b/grub-core/fs/zfs/zfsinfo.c +@@ -141,7 +141,6 @@ + } + grub_printf ("Mirror VDEV with %d children\n", nelm); + print_state (nvlist, tab); +- + for (i = 0; i < nelm; i++) + { + char *child; +@@ -161,6 +160,7 @@ + + grub_free (child); + } ++ return GRUB_ERR_NONE; + } + + print_tabs (tab); +--- a/include/grub/zfs/sa_impl.h ++++ b/include/grub/zfs/sa_impl.h +@@ -29,6 +29,9 @@ + } sa_hdr_phys_t; + + #define SA_HDR_SIZE(hdr) BF32_GET_SB(hdr->sa_layout_info, 10, 16, 3, 0) ++#define SA_TYPE_OFFSET 0x0 + #define SA_SIZE_OFFSET 0x8 ++#define SA_MTIME_OFFSET 0x38 ++#define SA_SYMLINK_OFFSET 0xa0 + + #endif /* _SYS_SA_IMPL_H */ +--- a/include/grub/zfs/zfs.h ++++ b/include/grub/zfs/zfs.h +@@ -28,7 +28,7 @@ + /* + * On-disk version number. + */ +-#define SPA_VERSION 28ULL ++#define SPA_VERSION 33ULL + + /* + * The following are configuration names used in the nvlist describing a pool's +@@ -112,12 +112,14 @@ + grub_err_t grub_zfs_getmdnobj (grub_device_t dev, const char *fsfilename, + grub_uint64_t *mdnobj); + +-char *grub_zfs_nvlist_lookup_string (char *nvlist, char *name); +-char *grub_zfs_nvlist_lookup_nvlist (char *nvlist, char *name); +-int grub_zfs_nvlist_lookup_uint64 (char *nvlist, char *name, ++char *grub_zfs_nvlist_lookup_string (const char *nvlist, const char *name); ++char *grub_zfs_nvlist_lookup_nvlist (const char *nvlist, const char *name); ++int grub_zfs_nvlist_lookup_uint64 (const char *nvlist, const char *name, + grub_uint64_t *out); +-char *grub_zfs_nvlist_lookup_nvlist_array (char *nvlist, char *name, ++char *grub_zfs_nvlist_lookup_nvlist_array (const char *nvlist, ++ const char *name, + grub_size_t index); +-int grub_zfs_nvlist_lookup_nvlist_array_get_nelm (char *nvlist, char *name); ++int grub_zfs_nvlist_lookup_nvlist_array_get_nelm (const char *nvlist, ++ const char *name); + + #endif /* ! GRUB_ZFS_HEADER */ --- grub2-1.99.orig/debian/patches/gcc_4_6_space.patch +++ grub2-1.99/debian/patches/gcc_4_6_space.patch @@ -0,0 +1,33 @@ +Description: Build with -fno-asynchronous-unwind-tables to save space +Author: Vladimir Serbinenko +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3589 +Last-Update: 2012-03-06 + +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -415,6 +415,23 @@ + fi + fi + ++# By default, GCC 4.6 generates .eh_frame sections containing unwind ++# information in some cases where it previously did not. GRUB doesn't need ++# these and they just use up vital space. Restore the old compiler ++# behaviour. ++AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [ ++ SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm" ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], ++ [grub_cv_cc_fno_asynchronous_unwind_tables=yes], ++ [grub_cv_cc_fno_asynchronous_unwind_tables=no]) ++ CFLAGS="$SAVE_CFLAGS" ++]) ++ ++if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then ++ TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables" ++fi ++ + grub_apple_target_cc + if test x$grub_cv_apple_target_cc = xyes ; then + TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DAPPLE_CC=1" --- grub2-1.99.orig/debian/patches/branch_devmapper.patch +++ grub2-1.99/debian/patches/branch_devmapper.patch @@ -0,0 +1,286 @@ +Description: Support for partitioned loop devices; improved devmapper support +Author: Vladimir Serbinenko +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/devmapper/ +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3302 +Last-Update: 2011-05-19 + +Index: b/grub-core/kern/emu/getroot.c +=================================================================== +--- a/grub-core/kern/emu/getroot.c ++++ b/grub-core/kern/emu/getroot.c +@@ -34,6 +34,10 @@ + #include + #include + ++#ifdef HAVE_DEVICE_MAPPER ++# include ++#endif ++ + #ifdef __GNU__ + #include + #include +@@ -634,32 +638,65 @@ + } + + static int +-grub_util_is_dmraid (const char *os_dev) ++grub_util_is_lvm (const char *os_dev) + { +- if (! strncmp (os_dev, "/dev/mapper/nvidia_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/isw_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/hpt37x_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/hpt45x_", 19)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/via_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/lsi_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/pdc_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/jmicron_", 20)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/asr_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/sil_", 16)) +- return 1; +- else if (! strncmp (os_dev, "/dev/mapper/ddf1_", 17)) +- return 1; ++ if ((strncmp ("/dev/mapper/", os_dev, 12) != 0)) ++ return 0; ++ ++#ifdef HAVE_DEVICE_MAPPER ++ { ++ struct dm_tree *tree; ++ uint32_t maj, min; ++ struct dm_tree_node *node = NULL; ++ const char *node_uuid; ++ struct stat st; + +- return 0; ++ if (stat (os_dev, &st) < 0) ++ return 0; ++ ++ tree = dm_tree_create (); ++ if (! tree) ++ { ++ grub_printf ("Failed to create tree\n"); ++ grub_dprintf ("hostdisk", "dm_tree_create failed\n"); ++ return 0; ++ } ++ ++ maj = major (st.st_rdev); ++ min = minor (st.st_rdev); ++ ++ if (! dm_tree_add_dev (tree, maj, min)) ++ { ++ grub_dprintf ("hostdisk", "dm_tree_add_dev failed\n"); ++ dm_tree_free (tree); ++ return 0; ++ } ++ ++ node = dm_tree_find_node (tree, maj, min); ++ if (! node) ++ { ++ grub_dprintf ("hostdisk", "dm_tree_find_node failed\n"); ++ dm_tree_free (tree); ++ return 0; ++ } ++ node_uuid = dm_tree_node_get_uuid (node); ++ if (! node_uuid) ++ { ++ grub_dprintf ("hostdisk", "%s has no DM uuid\n", os_dev); ++ dm_tree_free (tree); ++ return 0; ++ } ++ if (strncmp (node_uuid, "LVM-", 4) != 0) ++ { ++ dm_tree_free (tree); ++ return 0; ++ } ++ dm_tree_free (tree); ++ return 1; ++ } ++#else ++ return 1; ++#endif /* HAVE_DEVICE_MAPPER */ + } + + int +@@ -671,13 +708,11 @@ + return GRUB_DEV_ABSTRACTION_NONE; + + /* Check for LVM. */ +- if (!strncmp (os_dev, "/dev/mapper/", 12) +- && ! grub_util_is_dmraid (os_dev) +- && strncmp (os_dev, "/dev/mapper/mpath", 17) != 0) ++ if (grub_util_is_lvm (os_dev)) + return GRUB_DEV_ABSTRACTION_LVM; + + /* Check for RAID. */ +- if (!strncmp (os_dev, "/dev/md", 7)) ++ if (!strncmp (os_dev, "/dev/md", 7) && ! grub_util_device_is_mapped (os_dev)) + return GRUB_DEV_ABSTRACTION_RAID; + #endif + +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -331,18 +332,23 @@ + return GRUB_ERR_NONE; + } + +-#ifdef HAVE_DEVICE_MAPPER +-static int +-device_is_mapped (const char *dev) ++int ++grub_util_device_is_mapped (const char *dev) + { ++#ifdef HAVE_DEVICE_MAPPER + struct stat st; + ++ if (!grub_device_mapper_supported ()) ++ return 0; ++ + if (stat (dev, &st) < 0) + return 0; + + return dm_is_dm_major (major (st.st_rdev)); +-} ++#else ++ return 0; + #endif /* HAVE_DEVICE_MAPPER */ ++} + + #if defined (__FreeBSD__) || defined(__FreeBSD_kernel__) + /* FIXME: geom actually gives us the whole container hierarchy. +@@ -418,7 +424,7 @@ + # endif /* !defined(HAVE_DIOCGDINFO) */ + + # ifdef HAVE_DEVICE_MAPPER +- if (grub_device_mapper_supported () && device_is_mapped (dev)) { ++ if (grub_util_device_is_mapped (dev)) { + struct dm_task *task = NULL; + grub_uint64_t start, length; + char *target_type, *params, *space; +@@ -1161,6 +1167,54 @@ + return ret; + } + ++#ifdef HAVE_DEVICE_MAPPER ++static int ++grub_util_get_dm_node_linear_info (const char *dev, ++ int *maj, int *min) ++{ ++ struct dm_task *dmt; ++ void *next = NULL; ++ uint64_t length, start; ++ char *target, *params; ++ char *ptr; ++ int major, minor; ++ ++ dmt = dm_task_create(DM_DEVICE_TABLE); ++ if (!dmt) ++ return 0; ++ ++ if (!dm_task_set_name(dmt, dev)) ++ return 0; ++ dm_task_no_open_count(dmt); ++ if (!dm_task_run(dmt)) ++ return 0; ++ next = dm_get_next_target(dmt, next, &start, &length, ++ &target, ¶ms); ++ if (grub_strcmp (target, "linear") != 0) ++ return 0; ++ major = grub_strtoul (params, &ptr, 10); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (*ptr != ':') ++ return 0; ++ ptr++; ++ minor = grub_strtoul (ptr, 0, 10); ++ if (grub_errno) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++ } ++ if (maj) ++ *maj = major; ++ if (min) ++ *min = minor; ++ return 1; ++} ++#endif ++ + static char * + convert_system_partition_to_system_disk (const char *os_dev, struct stat *st) + { +@@ -1337,9 +1391,39 @@ + node = NULL; + goto devmapper_out; + } +- else if (strncmp (node_uuid, "DMRAID-", 7) != 0) ++ if (strncmp (node_uuid, "LVM-", 4) == 0) + { ++ grub_dprintf ("hostdisk", "%s is an LVM\n", path); ++ node = NULL; ++ goto devmapper_out; ++ } ++ if (strncmp (node_uuid, "mpath-", 6) == 0) ++ { ++ /* Multipath partitions have partN-mpath-* UUIDs, and are ++ linear mappings so are handled by ++ grub_util_get_dm_node_linear_info. Multipath disks are not ++ linear mappings and must be handled specially. */ ++ grub_dprintf ("hostdisk", "%s is a multipath disk\n", path); ++ mapper_name = dm_tree_node_get_name (node); ++ goto devmapper_out; ++ } ++ if (strncmp (node_uuid, "DMRAID-", 7) != 0) ++ { ++ int major, minor; ++ const char *node_name; + grub_dprintf ("hostdisk", "%s is not DM-RAID\n", path); ++ ++ if ((node_name = dm_tree_node_get_name (node)) ++ && grub_util_get_dm_node_linear_info (node_name, ++ &major, &minor)) ++ { ++ if (tree) ++ dm_tree_free (tree); ++ free (path); ++ char *ret = grub_find_device (NULL, (major << 8) | minor); ++ return ret; ++ } ++ + node = NULL; + goto devmapper_out; + } +Index: b/include/grub/emu/misc.h +=================================================================== +--- a/include/grub/emu/misc.h ++++ b/include/grub/emu/misc.h +@@ -54,6 +54,8 @@ + + char *grub_make_system_path_relative_to_its_root (const char *path) + __attribute__ ((warn_unused_result)); ++int ++grub_util_device_is_mapped (const char *dev); + + void * EXPORT_FUNC(xmalloc) (grub_size_t size) __attribute__ ((warn_unused_result)); + void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) __attribute__ ((warn_unused_result)); --- grub2-1.99.orig/debian/patches/dpkg_version_comparison.patch +++ grub2-1.99/debian/patches/dpkg_version_comparison.patch @@ -0,0 +1,30 @@ +Description: Improve handling of Debian kernel version numbers +Author: Robert Millan +Forwarded: not-needed +Last-Update: 2011-04-21 + +Index: b/util/grub-mkconfig_lib.in +=================================================================== +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -172,8 +172,9 @@ + + version_test_gt () + { +- local a="`echo "$1" | sed -e "s/[^-]*-//"`" +- local b="`echo "$2" | sed -e "s/[^-]*-//"`" ++ local sedexp="s/[^-]*-//;s/[._-]\(pre\|rc\|test\|git\|old\|trunk\)/~\1/g" ++ local a="`echo "$1" | sed -e "$sedexp"`" ++ local b="`echo "$2" | sed -e "$sedexp"`" + local cmp=gt + if [ "x$b" = "x" ] ; then + return 0 +@@ -183,7 +184,7 @@ + *.old:*) a="`echo -n "$a" | sed -e 's/\.old$//'`" ; cmp=gt ;; + *:*.old) b="`echo -n "$b" | sed -e 's/\.old$//'`" ; cmp=ge ;; + esac +- version_test_numeric "$a" "$cmp" "$b" ++ dpkg --compare-versions "$a" $cmp "$b" + return "$?" + } + --- grub2-1.99.orig/debian/patches/btrfs_stat.patch +++ grub2-1.99/debian/patches/btrfs_stat.patch @@ -0,0 +1,36 @@ +Description: Cope with btrfs / inside an encrypted block device + If / is inside an encrypted block device, then grub-probe can't tell what + its filesystem type is. Work around this. +Author: alexeagar@gmail.com +Bug-Ubuntu: https://bugs.launchpad.net/bugs/757631 +Forwarded: no +Last-Update: 2011-06-15 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -56,7 +56,8 @@ + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} + fi + +-if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ]; then ++if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ] \ ++ || [ "x`stat -f --printf=%T /`" = xbtrfs ]; then + rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="${rootsubvol#/}" + if [ "x${rootsubvol}" != x ]; then +Index: b/util/grub.d/20_linux_xen.in +=================================================================== +--- a/util/grub.d/20_linux_xen.in ++++ b/util/grub.d/20_linux_xen.in +@@ -56,7 +56,8 @@ + LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID} + fi + +-if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ]; then ++if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ] \ ++ || [ "x`stat -f --printf=%T /`" = xbtrfs ]; then + rootsubvol="`make_system_path_relative_to_its_root /`" + rootsubvol="${rootsubvol#/}" + if [ "x${rootsubvol}" != x ]; then --- grub2-1.99.orig/debian/patches/branch_longlinuxcmd.patch +++ grub2-1.99/debian/patches/branch_longlinuxcmd.patch @@ -0,0 +1,179 @@ +Description: Support long Linux command lines +Author: Vladimir Serbinenko +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/longlinuxcmd/ +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3303 +Last-Update: 2011-05-19 + +Index: b/grub-core/loader/i386/linux.c +=================================================================== +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -57,7 +57,6 @@ + #endif + + #define GRUB_LINUX_CL_OFFSET 0x1000 +-#define GRUB_LINUX_CL_END_OFFSET 0x2000 + + static grub_dl_t my_mod; + +@@ -74,6 +73,7 @@ + static grub_uint32_t initrd_pages; + static struct grub_relocator *relocator = NULL; + static void *efi_mmap_buf; ++static grub_size_t maximal_cmdline_size; + #ifdef GRUB_MACHINE_EFI + static grub_efi_uintn_t efi_mmap_size; + #else +@@ -189,7 +189,7 @@ + grub_err_t err; + + /* Make sure that each size is aligned to a page boundary. */ +- real_size = GRUB_LINUX_CL_END_OFFSET; ++ real_size = GRUB_LINUX_CL_OFFSET + maximal_cmdline_size; + prot_size = page_align (prot_size); + mmap_size = find_mmap_size (); + +@@ -662,6 +662,14 @@ + goto fail; + } + ++ if (grub_le_to_cpu16 (lh.version) >= 0x0206) ++ maximal_cmdline_size = grub_le_to_cpu32 (lh.cmdline_size) + 1; ++ else ++ maximal_cmdline_size = 256; ++ ++ if (maximal_cmdline_size < 128) ++ maximal_cmdline_size = 128; ++ + setup_sects = lh.setup_sects; + + /* If SETUP_SECTS is not set, set it to the default (4). */ +@@ -675,7 +683,7 @@ + goto fail; + + params = (struct linux_kernel_params *) real_mode_mem; +- grub_memset (params, 0, GRUB_LINUX_CL_END_OFFSET); ++ grub_memset (params, 0, GRUB_LINUX_CL_OFFSET + maximal_cmdline_size); + grub_memcpy (¶ms->setup_sects, &lh.setup_sects, sizeof (lh) - 0x1F1); + + params->ps_mouse = params->padding10 = 0; +@@ -870,7 +878,7 @@ + grub_create_loader_cmdline (argc, argv, + (char *)real_mode_mem + GRUB_LINUX_CL_OFFSET + + sizeof (LINUX_IMAGE) - 1, +- GRUB_LINUX_CL_END_OFFSET - GRUB_LINUX_CL_OFFSET ++ maximal_cmdline_size + - (sizeof (LINUX_IMAGE) - 1)); + + len = prot_size; +Index: b/grub-core/loader/i386/pc/linux.c +=================================================================== +--- a/grub-core/loader/i386/pc/linux.c ++++ b/grub-core/loader/i386/pc/linux.c +@@ -39,7 +39,6 @@ + GRUB_MOD_LICENSE ("GPLv3+"); + + #define GRUB_LINUX_CL_OFFSET 0x9000 +-#define GRUB_LINUX_CL_END_OFFSET 0x90FF + + static grub_dl_t my_mod; + +@@ -49,6 +48,7 @@ + static grub_addr_t grub_linux_real_target; + static char *grub_linux_real_chunk; + static grub_size_t grub_linux16_prot_size; ++static grub_size_t maximal_cmdline_size; + + static grub_err_t + grub_linux16_boot (void) +@@ -128,15 +128,20 @@ + setup_sects = lh.setup_sects; + linux_mem_size = 0; + ++ maximal_cmdline_size = 256; ++ + if (lh.header == grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) + && grub_le_to_cpu16 (lh.version) >= 0x0200) + { + grub_linux_is_bzimage = (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL); + lh.type_of_loader = GRUB_LINUX_BOOT_LOADER_TYPE; + ++ if (grub_le_to_cpu16 (lh.version) >= 0x0206) ++ maximal_cmdline_size = grub_le_to_cpu32 (lh.cmdline_size) + 1; ++ + /* Put the real mode part at as a high location as possible. */ + grub_linux_real_target = grub_mmap_get_lower () +- - GRUB_LINUX_SETUP_MOVE_SIZE; ++ - (GRUB_LINUX_CL_OFFSET + maximal_cmdline_size); + /* But it must not exceed the traditional area. */ + if (grub_linux_real_target > GRUB_LINUX_OLD_REAL_MODE_ADDR) + grub_linux_real_target = GRUB_LINUX_OLD_REAL_MODE_ADDR; +@@ -153,7 +158,8 @@ + { + lh.cl_magic = grub_cpu_to_le16 (GRUB_LINUX_CL_MAGIC); + lh.cl_offset = grub_cpu_to_le16 (GRUB_LINUX_CL_OFFSET); +- lh.setup_move_size = grub_cpu_to_le16 (GRUB_LINUX_SETUP_MOVE_SIZE); ++ lh.setup_move_size = grub_cpu_to_le16 (GRUB_LINUX_CL_OFFSET ++ + maximal_cmdline_size); + } + } + else +@@ -185,12 +191,13 @@ + goto fail; + } + +- if (grub_linux_real_target + GRUB_LINUX_SETUP_MOVE_SIZE ++ if (grub_linux_real_target + GRUB_LINUX_CL_OFFSET + maximal_cmdline_size + > grub_mmap_get_lower ()) + { + grub_error (GRUB_ERR_OUT_OF_RANGE, + "too small lower memory (0x%x > 0x%x)", +- grub_linux_real_target + GRUB_LINUX_SETUP_MOVE_SIZE, ++ grub_linux_real_target + GRUB_LINUX_CL_OFFSET ++ + maximal_cmdline_size, + (int) grub_mmap_get_lower ()); + goto fail; + } +@@ -263,7 +270,8 @@ + grub_relocator_chunk_t ch; + err = grub_relocator_alloc_chunk_addr (relocator, &ch, + grub_linux_real_target, +- GRUB_LINUX_SETUP_MOVE_SIZE); ++ GRUB_LINUX_CL_OFFSET ++ + maximal_cmdline_size); + if (err) + return err; + grub_linux_real_chunk = get_virtual_current_address (ch); +@@ -294,7 +302,7 @@ + grub_create_loader_cmdline (argc, argv, + (char *)grub_linux_real_chunk + + GRUB_LINUX_CL_OFFSET + sizeof (LINUX_IMAGE) - 1, +- GRUB_LINUX_CL_END_OFFSET - GRUB_LINUX_CL_OFFSET ++ maximal_cmdline_size + - (sizeof (LINUX_IMAGE) - 1)); + + if (grub_linux_is_bzimage) +Index: b/include/grub/i386/linux.h +=================================================================== +--- a/include/grub/i386/linux.h ++++ b/include/grub/i386/linux.h +@@ -41,7 +41,6 @@ + #define GRUB_LINUX_VID_MODE_ASK 0xFFFD + #define GRUB_LINUX_VID_MODE_VESA_START 0x0300 + +-#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 + #define GRUB_LINUX_CL_MAGIC 0xA33F + + #ifdef __x86_64__ +@@ -130,6 +129,10 @@ + grub_uint16_t pad1; /* Unused */ + grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ + grub_uint32_t initrd_addr_max; /* Highest address for initrd */ ++ grub_uint32_t kernel_alignment; ++ grub_uint8_t relocatable; ++ grub_uint8_t pad[3]; ++ grub_uint32_t cmdline_size; + } __attribute__ ((packed)); + + /* Boot parameters for Linux based on 2.6.12. This is used by the setup --- grub2-1.99.orig/debian/patches/ubuntu_probe_nonexistent_loopback.patch +++ grub2-1.99/debian/patches/ubuntu_probe_nonexistent_loopback.patch @@ -0,0 +1,59 @@ +Description: Don't crash on canonicalize_file_name failure + Also amend os-prober handling a bit to avoid getting confused by + inaccessible loop device backing paths. This is probably incomplete. +Author: Richard Laager +Author: Colin Watson +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3824 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/938724 +Forwarded: no +Last-Update: 2012-04-05 + +Index: b/util/grub-probe.c +=================================================================== +--- a/util/grub-probe.c ++++ b/util/grub-probe.c +@@ -111,6 +111,8 @@ + else + { + grub_path = canonicalize_file_name (path); ++ if (! grub_path) ++ grub_util_error (_("failed to get canonical path of %s"), path); + device_name = grub_guess_root_device (grub_path); + } + +Index: b/util/grub-mkconfig_lib.in +=================================================================== +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -114,7 +114,7 @@ + /dev/*) ;; + *) + loop_device="${device}" +- device=`"${grub_probe}" --target=device "${loop_file}"` ++ device=`"${grub_probe}" --target=device "${loop_file}"` || return 0 + ;; + esac + ;; +Index: b/util/grub.d/30_os-prober.in +=================================================================== +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -224,14 +224,15 @@ + LINITRD="${LINITRD#/boot}" + fi + ++ if [ -z "${prepare_boot_cache}" ]; then ++ prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")" ++ [ "${prepare_boot_cache}" ] || continue ++ fi + found_other_os=1 + cat << EOF + menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os { + EOF + save_default_entry | sed -e "s/^/\t/" +- if [ -z "${prepare_boot_cache}" ]; then +- prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")" +- fi + printf '%s\n' "${prepare_boot_cache}" + cat << EOF + linux ${LKERNEL} ${LPARAMS} --- grub2-1.99.orig/debian/patches/ubuntu_failed_boot_menu.patch +++ grub2-1.99/debian/patches/ubuntu_failed_boot_menu.patch @@ -0,0 +1,89 @@ +Description: Show the boot menu if the previous boot failed + "Failure" here is defined as failing to get to the end of one of the normal + runlevels. +Author: Colin Watson +Forwarded: no +Last-Update: 2011-01-05 + +Index: b/util/grub.d/00_header.in +=================================================================== +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -44,6 +44,7 @@ + + cat << EOF + if [ -s \$prefix/grubenv ]; then ++ set have_grubenv=true + load_env + fi + EOF +@@ -76,6 +77,11 @@ + fi + } + ++function recordfail { ++ set recordfail=1 ++ if [ -n "\${have_grubenv}" ]; then if [ -z "\${boot_once}" ]; then save_env recordfail; fi; fi ++} ++ + function load_video { + EOF + if [ -n "${GRUB_VIDEO_BACKEND}" ]; then +@@ -226,7 +232,11 @@ + make_timeout () + { + cat << EOF +-set timeout=${2} ++if [ "\${recordfail}" = 1 ]; then ++ set timeout=${GRUB_RECORDFAIL_TIMEOUT:--1} ++else ++ set timeout=${2} ++fi + EOF + } + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -82,6 +82,9 @@ + title="$(gettext_quoted "%s, with Linux %s")" + fi + printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}" ++ cat << EOF ++ recordfail ++EOF + if ! ${recovery} ; then + save_default_entry | sed -e "s/^/\t/" + fi +Index: b/docs/grub.texi +=================================================================== +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1250,6 +1250,12 @@ + Each module will be loaded as early as possible, at the start of + @file{grub.cfg}. + ++@item GRUB_RECORDFAIL_TIMEOUT ++If this option is set, it overrides the default recordfail setting. The ++default setting is -1, which causes GRUB to wait for user input. This option ++should be set on headless and appliance systems where access to a console is ++restricted or limited. ++ + @end table + + For more detailed customisation of @command{grub-mkconfig}'s output, you may +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -258,7 +258,8 @@ + GRUB_DISABLE_OS_PROBER \ + GRUB_INIT_TUNE \ + GRUB_SAVEDEFAULT \ +- GRUB_BADRAM ++ GRUB_BADRAM \ ++ GRUB_RECORDFAIL_TIMEOUT + + if test "x${grub_cfg}" != "x"; then + rm -f ${grub_cfg}.new --- grub2-1.99.orig/debian/patches/zfs_packed_la_array.patch +++ grub2-1.99/debian/patches/zfs_packed_la_array.patch @@ -0,0 +1,17 @@ +2011-08-03 Robert Millan + + * include/grub/zfs/zap_leaf.h (typedef union zap_leaf_chunk): Mark + la_array as packed. + Reported by: Zachary Bedell + +--- a/include/grub/zfs/zap_leaf.h ++++ b/include/grub/zfs/zap_leaf.h +@@ -90,7 +90,7 @@ + { + grub_uint8_t la_array[ZAP_LEAF_ARRAY_BYTES]; + grub_uint64_t la_array64; +- }; ++ } __attribute__ ((packed)); + grub_uint16_t la_next; /* next blk or CHAIN_END */ + } l_array; + struct zap_leaf_free { --- grub2-1.99.orig/debian/patches/ubuntu_crashkernel.patch +++ grub2-1.99/debian/patches/ubuntu_crashkernel.patch @@ -0,0 +1,34 @@ +Description: Add crashkernel option + Add crashkernel= option if kdump and makedumpfile are available. See + https://blueprints.launchpad.net/ubuntu/+spec/foundations-karmic-linux-kernel-crash-dump. + . + This requires several fairly distribution-specific pieces to work properly. +Author: Michael Vogt +Forwarded: not-needed +Last-Update: 2011-01-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -65,6 +65,11 @@ + fi + fi + ++# add crashkernel option if we have the required tools ++if [ -x "/usr/bin/makedumpfile" ] && [ -x "/sbin/kexec" ]; then ++ GRUB_CMDLINE_EXTRA="$GRUB_CMDLINE_EXTRA crashkernel=384M-2G:64M,2G-:128M" ++fi ++ + linux_entry () + { + os="$1" +@@ -185,7 +190,7 @@ + fi + + linux_entry "${OS}" "${version}" false \ +- "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" ++ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" true \ + "single ${GRUB_CMDLINE_LINUX}" --- grub2-1.99.orig/debian/patches/4k_sectors.patch +++ grub2-1.99/debian/patches/4k_sectors.patch @@ -0,0 +1,1025 @@ +Description: Support non-512B sectors and agglomerate reads +Author: Vladimir Serbinenko +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3325 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3709 +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3325 +Last-Update: 2012-04-02 + +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -34,6 +34,7 @@ + common_nodist = grub_script.tab.h; + + common = grub-core/commands/blocklist.c; ++ common = grub-core/commands/testload.c; + common = grub-core/commands/extcmd.c; + common = grub-core/commands/ls.c; + common = grub-core/disk/dmraid_nvidia.c; +Index: b/grub-core/disk/efi/efidisk.c +=================================================================== +--- a/grub-core/disk/efi/efidisk.c ++++ b/grub-core/disk/efi/efidisk.c +@@ -33,12 +33,10 @@ + grub_efi_device_path_t *device_path; + grub_efi_device_path_t *last_device_path; + grub_efi_block_io_t *block_io; +- grub_efi_disk_io_t *disk_io; + struct grub_efidisk_data *next; + }; + +-/* GUIDs. */ +-static grub_efi_guid_t disk_io_guid = GRUB_EFI_DISK_IO_GUID; ++/* GUID. */ + static grub_efi_guid_t block_io_guid = GRUB_EFI_BLOCK_IO_GUID; + + static struct grub_efidisk_data *fd_devices; +@@ -143,7 +141,7 @@ + struct grub_efidisk_data *devices = 0; + + /* Find handles which support the disk io interface. */ +- handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &disk_io_guid, ++ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &block_io_guid, + 0, &num_handles); + if (! handles) + return 0; +@@ -155,7 +153,6 @@ + grub_efi_device_path_t *ldp; + struct grub_efidisk_data *d; + grub_efi_block_io_t *bio; +- grub_efi_disk_io_t *dio; + + dp = grub_efi_get_device_path (*handle); + if (! dp) +@@ -168,9 +165,7 @@ + + bio = grub_efi_open_protocol (*handle, &block_io_guid, + GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); +- dio = grub_efi_open_protocol (*handle, &disk_io_guid, +- GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); +- if (! bio || ! dio) ++ if (! bio) + /* This should not happen... Why? */ + continue; + +@@ -186,7 +181,6 @@ + d->device_path = dp; + d->last_device_path = ldp; + d->block_io = bio; +- d->disk_io = dio; + d->next = devices; + devices = d; + } +@@ -536,8 +530,13 @@ + and total sectors should be replaced with total blocks. */ + grub_dprintf ("efidisk", "m = %p, last block = %llx, block size = %x\n", + m, (unsigned long long) m->last_block, m->block_size); +- disk->total_sectors = (m->last_block +- * (m->block_size >> GRUB_DISK_SECTOR_BITS)); ++ disk->total_sectors = m->last_block; ++ if (m->block_size & (m->block_size - 1) || !m->block_size) ++ return grub_error (GRUB_ERR_IO, "invalid sector size %d", ++ m->block_size); ++ for (disk->log_sector_size = 0; ++ (1U << disk->log_sector_size) < m->block_size; ++ disk->log_sector_size++); + disk->data = d; + + grub_dprintf ("efidisk", "opening %s succeeded\n", name); +@@ -558,22 +557,20 @@ + { + /* For now, use the disk io interface rather than the block io's. */ + struct grub_efidisk_data *d; +- grub_efi_disk_io_t *dio; + grub_efi_block_io_t *bio; + grub_efi_status_t status; + + d = disk->data; +- dio = d->disk_io; + bio = d->block_io; + + grub_dprintf ("efidisk", + "reading 0x%lx sectors at the sector 0x%llx from %s\n", + (unsigned long) size, (unsigned long long) sector, disk->name); + +- status = efi_call_5 (dio->read, dio, bio->media->media_id, +- (grub_efi_uint64_t) sector << GRUB_DISK_SECTOR_BITS, +- (grub_efi_uintn_t) size << GRUB_DISK_SECTOR_BITS, +- buf); ++ status = efi_call_5 (bio->read_blocks, bio, bio->media->media_id, ++ (grub_efi_uint64_t) sector, ++ (grub_efi_uintn_t) size << disk->log_sector_size, ++ buf); + if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_READ_ERROR, "efidisk read error"); + +@@ -586,21 +583,19 @@ + { + /* For now, use the disk io interface rather than the block io's. */ + struct grub_efidisk_data *d; +- grub_efi_disk_io_t *dio; + grub_efi_block_io_t *bio; + grub_efi_status_t status; + + d = disk->data; +- dio = d->disk_io; + bio = d->block_io; + + grub_dprintf ("efidisk", + "writing 0x%lx sectors at the sector 0x%llx to %s\n", + (unsigned long) size, (unsigned long long) sector, disk->name); + +- status = efi_call_5 (dio->write, dio, bio->media->media_id, +- (grub_efi_uint64_t) sector << GRUB_DISK_SECTOR_BITS, +- (grub_efi_uintn_t) size << GRUB_DISK_SECTOR_BITS, ++ status = efi_call_5 (bio->write_blocks, bio, bio->media->media_id, ++ (grub_efi_uint64_t) sector, ++ (grub_efi_uintn_t) size << disk->log_sector_size, + (void *) buf); + if (status != GRUB_EFI_SUCCESS) + return grub_error (GRUB_ERR_WRITE_ERROR, "efidisk write error"); +Index: b/grub-core/disk/i386/pc/biosdisk.c +=================================================================== +--- a/grub-core/disk/i386/pc/biosdisk.c ++++ b/grub-core/disk/i386/pc/biosdisk.c +@@ -340,7 +340,8 @@ + if ((cd_drive) && (drive == cd_drive)) + { + data->flags = GRUB_BIOSDISK_FLAG_LBA | GRUB_BIOSDISK_FLAG_CDROM; +- data->sectors = 32; ++ data->sectors = 8; ++ disk->log_sector_size = 11; + /* TODO: get the correct size. */ + total_sectors = GRUB_DISK_SIZE_UNKNOWN; + } +@@ -349,6 +350,8 @@ + /* HDD */ + int version; + ++ disk->log_sector_size = 9; ++ + version = grub_biosdisk_check_int13_extensions (drive); + if (version) + { +@@ -369,6 +372,15 @@ + correctly but returns zero. So if it is zero, compute + it by C/H/S returned by the LBA BIOS call. */ + total_sectors = drp->cylinders * drp->heads * drp->sectors; ++ if (drp->bytes_per_sector ++ && !(drp->bytes_per_sector & (drp->bytes_per_sector - 1)) ++ && drp->bytes_per_sector >= 512 ++ && drp->bytes_per_sector <= 16384) ++ { ++ for (disk->log_sector_size = 0; ++ (1 << disk->log_sector_size) < drp->bytes_per_sector; ++ disk->log_sector_size++); ++ } + } + } + } +@@ -431,7 +443,7 @@ + + dap = (struct grub_biosdisk_dap *) (GRUB_MEMORY_MACHINE_SCRATCH_ADDR + + (data->sectors +- << GRUB_DISK_SECTOR_BITS)); ++ << disk->log_sector_size)); + dap->length = sizeof (*dap); + dap->reserved = 0; + dap->blocks = size; +@@ -445,9 +457,6 @@ + if (cmd) + return grub_error (GRUB_ERR_WRITE_ERROR, "can\'t write to cdrom"); + +- dap->blocks = ALIGN_UP (dap->blocks, 4) >> 2; +- dap->block >>= 2; +- + for (i = 0; i < GRUB_BIOSDISK_CDROM_RETRY_COUNT; i++) + if (! grub_biosdisk_rw_int13_extensions (0x42, data->drive, dap)) + break; +@@ -503,19 +512,21 @@ + + /* Return the number of sectors which can be read safely at a time. */ + static grub_size_t +-get_safe_sectors (grub_disk_addr_t sector, grub_uint32_t sectors) ++get_safe_sectors (grub_disk_t disk, grub_disk_addr_t sector) + { + grub_size_t size; +- grub_uint32_t offset; ++ grub_uint64_t offset; ++ struct grub_biosdisk_data *data = disk->data; ++ grub_uint32_t sectors = data->sectors; + + /* OFFSET = SECTOR % SECTORS */ +- grub_divmod64 (sector, sectors, &offset); ++ grub_divmod64_full (sector, sectors, &offset); + + size = sectors - offset; + + /* Limit the max to 0x7f because of Phoenix EDD. */ +- if (size > 0x7f) +- size = 0x7f; ++ if (size > ((0x7fU << GRUB_DISK_SECTOR_BITS) >> disk->log_sector_size)) ++ size = ((0x7fU << GRUB_DISK_SECTOR_BITS) >> disk->log_sector_size); + + return size; + } +@@ -524,21 +535,11 @@ + grub_biosdisk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_size_t size, char *buf) + { +- struct grub_biosdisk_data *data = disk->data; +- + while (size) + { + grub_size_t len; +- grub_size_t cdoff = 0; + +- len = get_safe_sectors (sector, data->sectors); +- +- if (data->flags & GRUB_BIOSDISK_FLAG_CDROM) +- { +- cdoff = (sector & 3) << GRUB_DISK_SECTOR_BITS; +- len = ALIGN_UP (sector + len, 4) - (sector & ~3); +- sector &= ~3; +- } ++ len = get_safe_sectors (disk, sector); + + if (len > size) + len = size; +@@ -547,9 +548,10 @@ + GRUB_MEMORY_MACHINE_SCRATCH_SEG)) + return grub_errno; + +- grub_memcpy (buf, (void *) (GRUB_MEMORY_MACHINE_SCRATCH_ADDR + cdoff), +- len << GRUB_DISK_SECTOR_BITS); +- buf += len << GRUB_DISK_SECTOR_BITS; ++ grub_memcpy (buf, (void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR, ++ len << disk->log_sector_size); ++ ++ buf += len << disk->log_sector_size; + sector += len; + size -= len; + } +@@ -570,18 +572,18 @@ + { + grub_size_t len; + +- len = get_safe_sectors (sector, data->sectors); ++ len = get_safe_sectors (disk, sector); + if (len > size) + len = size; + + grub_memcpy ((void *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR, buf, +- len << GRUB_DISK_SECTOR_BITS); ++ len << disk->log_sector_size); + + if (grub_biosdisk_rw (GRUB_BIOSDISK_WRITE, disk, sector, len, + GRUB_MEMORY_MACHINE_SCRATCH_SEG)) + return grub_errno; + +- buf += len << GRUB_DISK_SECTOR_BITS; ++ buf += len << disk->log_sector_size; + sector += len; + size -= len; + } +Index: b/grub-core/disk/scsi.c +=================================================================== +--- a/grub-core/disk/scsi.c ++++ b/grub-core/disk/scsi.c +@@ -465,15 +465,20 @@ + return err; + } + +- /* SCSI blocks can be something else than 512, although GRUB +- wants 512 byte blocks. */ +- disk->total_sectors = ((grub_uint64_t)scsi->size +- * (grub_uint64_t)scsi->blocksize) +- >> GRUB_DISK_SECTOR_BITS; ++ disk->total_sectors = scsi->size; ++ if (scsi->blocksize & (scsi->blocksize - 1) || !scsi->blocksize) ++ { ++ grub_free (scsi); ++ return grub_error (GRUB_ERR_IO, "invalid sector size %d", ++ scsi->blocksize); ++ } ++ for (disk->log_sector_size = 0; ++ (1 << disk->log_sector_size) < scsi->blocksize; ++ disk->log_sector_size++); + + grub_dprintf ("scsi", "blocks=%u, blocksize=%u\n", + scsi->size, scsi->blocksize); +- grub_dprintf ("scsi", "Disk total 512 sectors = %llu\n", ++ grub_dprintf ("scsi", "Disk total sectors = %llu\n", + (unsigned long long) disk->total_sectors); + + return GRUB_ERR_NONE; +@@ -503,25 +508,6 @@ + + scsi = disk->data; + +- /* SCSI sectors are variable in size. GRUB uses 512 byte +- sectors. */ +- if (scsi->blocksize != GRUB_DISK_SECTOR_SIZE) +- { +- unsigned spb = scsi->blocksize >> GRUB_DISK_SECTOR_BITS; +- if (spb == 0 || (scsi->blocksize & (GRUB_DISK_SECTOR_SIZE - 1)) != 0) +- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- "unsupported SCSI block size"); +- +- grub_uint32_t sector_mod = 0; +- sector = grub_divmod64 (sector, spb, §or_mod); +- +- if (! (sector_mod == 0 && size % spb == 0)) +- return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- "unaligned SCSI read not supported"); +- +- size /= spb; +- } +- + /* Depending on the type, select a read function. */ + switch (scsi->devtype) + { +Index: b/grub-core/kern/disk.c +=================================================================== +--- a/grub-core/kern/disk.c ++++ b/grub-core/kern/disk.c +@@ -247,6 +247,7 @@ + disk = (grub_disk_t) grub_zalloc (sizeof (*disk)); + if (! disk) + return 0; ++ disk->log_sector_size = GRUB_DISK_SECTOR_BITS; + + p = find_part_sep (name); + if (p) +@@ -266,7 +267,6 @@ + if (! disk->name) + goto fail; + +- + for (dev = grub_disk_dev_list; dev; dev = dev->next) + { + if ((dev->open) (raw, disk) == GRUB_ERR_NONE) +@@ -282,6 +282,14 @@ + grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such disk"); + goto fail; + } ++ if (disk->log_sector_size > GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS ++ || disk->log_sector_size < GRUB_DISK_SECTOR_BITS) ++ { ++ grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, ++ "sector sizes of %d bytes aren't supported yet", ++ (1 << disk->log_sector_size)); ++ goto fail; ++ } + + disk->dev = dev; + +@@ -373,21 +381,110 @@ + *sector += start; + } + +- if (disk->total_sectors <= *sector +- || ((*offset + size + GRUB_DISK_SECTOR_SIZE - 1) +- >> GRUB_DISK_SECTOR_BITS) > disk->total_sectors - *sector) ++ if (disk->total_sectors != GRUB_DISK_SIZE_UNKNOWN ++ && ((disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)) <= *sector ++ || ((*offset + size + GRUB_DISK_SECTOR_SIZE - 1) ++ >> GRUB_DISK_SECTOR_BITS) > (disk->total_sectors ++ << (disk->log_sector_size ++ - GRUB_DISK_SECTOR_BITS)) - *sector)) + return grub_error (GRUB_ERR_OUT_OF_RANGE, "out of disk"); + + return GRUB_ERR_NONE; + } + ++static inline grub_disk_addr_t ++transform_sector (grub_disk_t disk, grub_disk_addr_t sector) ++{ ++ return sector >> (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); ++} ++ ++/* Small read (less than cache size and not pass across cache unit boundaries). ++ sector is already adjusted and is divisible by cache unit size. ++ */ ++static grub_err_t ++grub_disk_read_small (grub_disk_t disk, grub_disk_addr_t sector, ++ grub_off_t offset, grub_size_t size, void *buf) ++{ ++ char *data; ++ char *tmp_buf; ++ ++ /* Fetch the cache. */ ++ data = grub_disk_cache_fetch (disk->dev->id, disk->id, sector); ++ if (data) ++ { ++ /* Just copy it! */ ++ grub_memcpy (buf, data + offset, size); ++ grub_disk_cache_unlock (disk->dev->id, disk->id, sector); ++ return GRUB_ERR_NONE; ++ } ++ ++ /* Allocate a temporary buffer. */ ++ tmp_buf = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); ++ if (! tmp_buf) ++ return grub_errno; ++ ++ /* Otherwise read data from the disk actually. */ ++ if (disk->total_sectors == GRUB_DISK_SIZE_UNKNOWN ++ || sector + GRUB_DISK_CACHE_SIZE ++ < (disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS))) ++ { ++ grub_err_t err; ++ err = (disk->dev->read) (disk, transform_sector (disk, sector), ++ 1 << (GRUB_DISK_CACHE_BITS ++ + GRUB_DISK_SECTOR_BITS ++ - disk->log_sector_size), tmp_buf); ++ if (!err) ++ { ++ /* Copy it and store it in the disk cache. */ ++ grub_memcpy (buf, tmp_buf + offset, size); ++ grub_disk_cache_store (disk->dev->id, disk->id, ++ sector, tmp_buf); ++ grub_free (tmp_buf); ++ return GRUB_ERR_NONE; ++ } ++ } ++ ++ grub_errno = GRUB_ERR_NONE; ++ ++ { ++ /* Uggh... Failed. Instead, just read necessary data. */ ++ unsigned num; ++ grub_disk_addr_t aligned_sector; ++ ++ sector += (offset >> GRUB_DISK_SECTOR_BITS); ++ offset &= ((1 << GRUB_DISK_SECTOR_BITS) - 1); ++ aligned_sector = (sector & ~((1 << (disk->log_sector_size ++ - GRUB_DISK_SECTOR_BITS)) ++ - 1)); ++ offset += ((sector - aligned_sector) << GRUB_DISK_SECTOR_BITS); ++ num = ((size + offset + (1 << (disk->log_sector_size)) ++ - 1) >> (disk->log_sector_size)); ++ ++ tmp_buf = grub_malloc (num << disk->log_sector_size); ++ if (!tmp_buf) ++ return grub_errno; ++ ++ if ((disk->dev->read) (disk, transform_sector (disk, aligned_sector), ++ num, tmp_buf)) ++ { ++ grub_error_push (); ++ grub_dprintf ("disk", "%s read failed\n", disk->name); ++ grub_error_pop (); ++ return grub_errno; ++ } ++ grub_memcpy (buf, tmp_buf + offset, size); ++ return GRUB_ERR_NONE; ++ } ++} ++ + /* Read data from the disk. */ + grub_err_t + grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector, + grub_off_t offset, grub_size_t size, void *buf) + { +- char *tmp_buf; +- unsigned real_offset; ++ grub_off_t real_offset; ++ grub_disk_addr_t real_sector; ++ grub_size_t real_size; + + /* First of all, check if the region is within the disk. */ + if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE) +@@ -399,126 +496,126 @@ + return grub_errno; + } + ++ real_sector = sector; + real_offset = offset; ++ real_size = size; + +- /* Allocate a temporary buffer. */ +- tmp_buf = grub_malloc (GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS); +- if (! tmp_buf) +- return grub_errno; +- +- /* Until SIZE is zero... */ +- while (size) ++ /* First read until first cache boundary. */ ++ if (offset || (sector & (GRUB_DISK_CACHE_SIZE - 1))) + { +- char *data; + grub_disk_addr_t start_sector; +- grub_size_t len; + grub_size_t pos; ++ grub_err_t err; ++ grub_size_t len; + +- /* For reading bulk data. */ + start_sector = sector & ~(GRUB_DISK_CACHE_SIZE - 1); + pos = (sector - start_sector) << GRUB_DISK_SECTOR_BITS; + len = ((GRUB_DISK_SECTOR_SIZE << GRUB_DISK_CACHE_BITS) +- - pos - real_offset); ++ - pos - offset); + if (len > size) + len = size; ++ err = grub_disk_read_small (disk, start_sector, ++ offset + pos, len, buf); ++ if (err) ++ return err; ++ buf = (char *) buf + len; ++ size -= len; ++ offset += len; ++ sector += (offset >> GRUB_DISK_SECTOR_BITS); ++ offset &= ((1 << GRUB_DISK_SECTOR_BITS) - 1); ++ } + +- /* Fetch the cache. */ +- data = grub_disk_cache_fetch (disk->dev->id, disk->id, start_sector); +- if (data) ++ /* Until SIZE is zero... */ ++ while (size >= (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS)) ++ { ++ char *data = NULL; ++ grub_disk_addr_t agglomerate; ++ grub_err_t err; ++ ++ /* agglomerate read until we find a first cached entry. */ ++ for (agglomerate = 0; agglomerate ++ < (size >> (GRUB_DISK_SECTOR_BITS + GRUB_DISK_CACHE_BITS)); ++ agglomerate++) + { +- /* Just copy it! */ +- grub_memcpy (buf, data + pos + real_offset, len); +- grub_disk_cache_unlock (disk->dev->id, disk->id, start_sector); ++ data = grub_disk_cache_fetch (disk->dev->id, disk->id, ++ sector + (agglomerate ++ << GRUB_DISK_CACHE_BITS)); ++ if (data) ++ break; + } +- else ++ ++ if (data) + { +- /* Otherwise read data from the disk actually. */ +- if (start_sector + GRUB_DISK_CACHE_SIZE > disk->total_sectors +- || (disk->dev->read) (disk, start_sector, +- GRUB_DISK_CACHE_SIZE, tmp_buf) +- != GRUB_ERR_NONE) +- { +- /* Uggh... Failed. Instead, just read necessary data. */ +- unsigned num; +- char *p; +- +- grub_errno = GRUB_ERR_NONE; +- +- num = ((size + real_offset + GRUB_DISK_SECTOR_SIZE - 1) +- >> GRUB_DISK_SECTOR_BITS); +- +- p = grub_realloc (tmp_buf, num << GRUB_DISK_SECTOR_BITS); +- if (!p) +- goto finish; +- +- tmp_buf = p; +- +- if ((disk->dev->read) (disk, sector, num, tmp_buf)) +- { +- grub_error_push (); +- grub_dprintf ("disk", "%s read failed\n", disk->name); +- grub_error_pop (); +- goto finish; +- } +- +- grub_memcpy (buf, tmp_buf + real_offset, size); +- +- /* Call the read hook, if any. */ +- if (disk->read_hook) +- while (size) +- { +- grub_size_t to_read = (size > GRUB_DISK_SECTOR_SIZE) ? GRUB_DISK_SECTOR_SIZE : size; +- (disk->read_hook) (sector, real_offset, +- to_read); +- if (grub_errno != GRUB_ERR_NONE) +- goto finish; +- +- sector++; +- size -= to_read - real_offset; +- real_offset = 0; +- } ++ grub_memcpy ((char *) buf ++ + (agglomerate << (GRUB_DISK_CACHE_BITS ++ + GRUB_DISK_SECTOR_BITS)), ++ data, GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); ++ grub_disk_cache_unlock (disk->dev->id, disk->id, ++ sector + (agglomerate ++ << GRUB_DISK_CACHE_BITS)); ++ } + +- /* This must be the end. */ +- goto finish; +- } ++ if (agglomerate) ++ { ++ grub_disk_addr_t i; + +- /* Copy it and store it in the disk cache. */ +- grub_memcpy (buf, tmp_buf + pos + real_offset, len); +- grub_disk_cache_store (disk->dev->id, disk->id, +- start_sector, tmp_buf); ++ err = (disk->dev->read) (disk, transform_sector (disk, sector), ++ agglomerate << (GRUB_DISK_CACHE_BITS ++ + GRUB_DISK_SECTOR_BITS ++ - disk->log_sector_size), ++ buf); ++ if (err) ++ return err; ++ ++ for (i = 0; i < agglomerate; i ++) ++ grub_disk_cache_store (disk->dev->id, disk->id, ++ sector + (i << GRUB_DISK_CACHE_BITS), ++ (char *) buf ++ + (i << (GRUB_DISK_CACHE_BITS ++ + GRUB_DISK_SECTOR_BITS))); ++ ++ sector += agglomerate << GRUB_DISK_CACHE_BITS; ++ size -= agglomerate << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS); ++ buf = (char *) buf ++ + (agglomerate << (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS)); + } + +- /* Call the read hook, if any. */ +- if (disk->read_hook) ++ if (data) + { +- grub_disk_addr_t s = sector; +- grub_size_t l = len; +- +- while (l) +- { +- (disk->read_hook) (s, real_offset, +- ((l > GRUB_DISK_SECTOR_SIZE) +- ? GRUB_DISK_SECTOR_SIZE +- : l)); +- +- if (l < GRUB_DISK_SECTOR_SIZE - real_offset) +- break; +- +- s++; +- l -= GRUB_DISK_SECTOR_SIZE - real_offset; +- real_offset = 0; +- } ++ sector += GRUB_DISK_CACHE_SIZE; ++ buf = (char *) buf + (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); ++ size -= (GRUB_DISK_CACHE_SIZE << GRUB_DISK_SECTOR_BITS); + } ++ } + +- sector = start_sector + GRUB_DISK_CACHE_SIZE; +- buf = (char *) buf + len; +- size -= len; +- real_offset = 0; ++ /* And now read the last part. */ ++ if (size) ++ { ++ grub_err_t err; ++ err = grub_disk_read_small (disk, sector, 0, size, buf); ++ if (err) ++ return err; + } + +- finish: ++ /* Call the read hook, if any. */ ++ if (disk->read_hook) ++ { ++ grub_disk_addr_t s = real_sector; ++ grub_size_t l = real_size; ++ grub_off_t o = real_offset; + +- grub_free (tmp_buf); ++ while (l) ++ { ++ grub_size_t cl; ++ cl = GRUB_DISK_SECTOR_SIZE - o; ++ if (cl > l) ++ cl = l; ++ (disk->read_hook) (s, o, cl); ++ s++; ++ l -= cl; ++ o = 0; ++ } ++ } + + return grub_errno; + } +@@ -528,25 +625,31 @@ + grub_off_t offset, grub_size_t size, const void *buf) + { + unsigned real_offset; ++ grub_disk_addr_t aligned_sector; + + grub_dprintf ("disk", "Writing `%s'...\n", disk->name); + + if (grub_disk_adjust_range (disk, §or, &offset, size) != GRUB_ERR_NONE) + return -1; + +- real_offset = offset; ++ aligned_sector = (sector & ~((1 << (disk->log_sector_size ++ - GRUB_DISK_SECTOR_BITS)) - 1)); ++ real_offset = offset + ((sector - aligned_sector) << GRUB_DISK_SECTOR_BITS); ++ sector = aligned_sector; + + while (size) + { +- if (real_offset != 0 || (size < GRUB_DISK_SECTOR_SIZE && size != 0)) ++ if (real_offset != 0 || (size < (1U << disk->log_sector_size) ++ && size != 0)) + { +- char tmp_buf[GRUB_DISK_SECTOR_SIZE]; ++ char tmp_buf[1 << disk->log_sector_size]; + grub_size_t len; + grub_partition_t part; + + part = disk->partition; + disk->partition = 0; +- if (grub_disk_read (disk, sector, 0, GRUB_DISK_SECTOR_SIZE, tmp_buf) ++ if (grub_disk_read (disk, sector, ++ 0, (1 << disk->log_sector_size), tmp_buf) + != GRUB_ERR_NONE) + { + disk->partition = part; +@@ -554,7 +657,7 @@ + } + disk->partition = part; + +- len = GRUB_DISK_SECTOR_SIZE - real_offset; ++ len = (1 << disk->log_sector_size) - real_offset; + if (len > size) + len = size; + +@@ -565,7 +668,7 @@ + if ((disk->dev->write) (disk, sector, 1, tmp_buf) != GRUB_ERR_NONE) + goto finish; + +- sector++; ++ sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + buf = (char *) buf + len; + size -= len; + real_offset = 0; +@@ -575,8 +678,8 @@ + grub_size_t len; + grub_size_t n; + +- len = size & ~(GRUB_DISK_SECTOR_SIZE - 1); +- n = size >> GRUB_DISK_SECTOR_BITS; ++ len = size & ~((1 << disk->log_sector_size) - 1); ++ n = size >> disk->log_sector_size; + + if ((disk->dev->write) (disk, sector, n, buf) != GRUB_ERR_NONE) + goto finish; +@@ -599,6 +702,8 @@ + { + if (disk->partition) + return grub_partition_get_len (disk->partition); ++ else if (disk->total_sectors != GRUB_DISK_SIZE_UNKNOWN) ++ return disk->total_sectors << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + else +- return disk->total_sectors; ++ return GRUB_DISK_SIZE_UNKNOWN; + } +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -43,6 +43,7 @@ + + #ifdef __linux__ + # include /* ioctl */ ++# include + # if !defined(__GLIBC__) || \ + ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) + /* Maybe libc doesn't have large file support. */ +@@ -267,6 +268,7 @@ + # else + unsigned long long nr; + # endif ++ int sector_size; + int fd; + + fd = open (map[drive].device, O_RDONLY); +@@ -299,16 +301,32 @@ + goto fail; + } + ++# if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ++ if (ioctl (fd, DIOCGSECTORSIZE, §or_size)) ++# else ++ if (ioctl (fd, BLKSSZGET, §or_size)) ++# endif ++ { ++ close (fd); ++ goto fail; ++ } ++ + close (fd); + ++ if (sector_size & (sector_size - 1) || !sector_size) ++ goto fail; ++ for (disk->log_sector_size = 0; ++ (1 << disk->log_sector_size) < sector_size; ++ disk->log_sector_size++); ++ + # if defined (__APPLE__) + disk->total_sectors = nr; + # elif defined(__NetBSD__) + disk->total_sectors = label.d_secperunit; + # else +- disk->total_sectors = nr / 512; ++ disk->total_sectors = nr >> disk->log_sector_size; + +- if (nr % 512) ++ if (nr & ((1 << disk->log_sector_size) - 1)) + grub_util_error ("unaligned device size"); + # endif + +@@ -325,7 +343,7 @@ + if (stat (map[drive].device, &st) < 0) + return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "cannot stat `%s'", map[drive].device); + +- disk->total_sectors = st.st_size >> GRUB_DISK_SECTOR_BITS; ++ disk->total_sectors = st.st_size >> disk->log_sector_size; + + grub_util_info ("the size of %s is %lu", name, disk->total_sectors); + +@@ -798,7 +816,7 @@ + _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, + loff_t *, res, uint, wh); + +- offset = (loff_t) sector << GRUB_DISK_SECTOR_BITS; ++ offset = (loff_t) sector << disk->log_sector_size; + if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) + { + grub_error (GRUB_ERR_BAD_DEVICE, "cannot seek `%s'", map[disk->id].device); +@@ -808,7 +826,7 @@ + } + #else + { +- off_t offset = (off_t) sector << GRUB_DISK_SECTOR_BITS; ++ off_t offset = (off_t) sector << disk->log_sector_size; + + if (lseek (fd, offset, SEEK_SET) != offset) + { +@@ -908,19 +926,20 @@ + sectors that are read together with the MBR in one read. It + should only remap the MBR, so we split the read in two + parts. -jochen */ +- if (nread (fd, buf, GRUB_DISK_SECTOR_SIZE) != GRUB_DISK_SECTOR_SIZE) ++ if (nread (fd, buf, (1 << disk->log_sector_size)) ++ != (1 << disk->log_sector_size)) + { + grub_error (GRUB_ERR_READ_ERROR, "cannot read `%s'", map[disk->id].device); + return grub_errno; + } + +- buf += GRUB_DISK_SECTOR_SIZE; ++ buf += (1 << disk->log_sector_size); + size--; + } + #endif /* __linux__ */ + +- if (nread (fd, buf, size << GRUB_DISK_SECTOR_BITS) +- != (ssize_t) (size << GRUB_DISK_SECTOR_BITS)) ++ if (nread (fd, buf, size << disk->log_sector_size) ++ != (ssize_t) (size << disk->log_sector_size)) + grub_error (GRUB_ERR_READ_ERROR, "cannot read from `%s'", map[disk->id].device); + + return grub_errno; +@@ -953,8 +972,8 @@ + if (fd < 0) + return grub_errno; + +- if (nwrite (fd, buf, size << GRUB_DISK_SECTOR_BITS) +- != (ssize_t) (size << GRUB_DISK_SECTOR_BITS)) ++ if (nwrite (fd, buf, size << disk->log_sector_size) ++ != (ssize_t) (size << disk->log_sector_size)) + grub_error (GRUB_ERR_WRITE_ERROR, "cannot write to `%s'", map[disk->id].device); + + return grub_errno; +Index: b/grub-core/partmap/msdos.c +=================================================================== +--- a/grub-core/partmap/msdos.c ++++ b/grub-core/partmap/msdos.c +@@ -152,8 +152,11 @@ + { + e = mbr.entries + p.index; + +- p.start = p.offset + grub_le_to_cpu32 (e->start) - delta; +- p.len = grub_le_to_cpu32 (e->length); ++ p.start = p.offset ++ + (grub_le_to_cpu32 (e->start) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)) - delta; ++ p.len = grub_le_to_cpu32 (e->length) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); + p.msdostype = e->type; + + grub_dprintf ("partition", +@@ -188,7 +191,9 @@ + + if (grub_msdos_partition_is_extended (e->type)) + { +- p.offset = ext_offset + grub_le_to_cpu32 (e->start); ++ p.offset = ext_offset ++ + (grub_le_to_cpu32 (e->start) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + if (! ext_offset) + ext_offset = p.offset; + +@@ -267,8 +272,11 @@ + e = mbr.entries + i; + + if (!grub_msdos_partition_is_empty (e->type) +- && end > offset + grub_le_to_cpu32 (e->start)) +- end = offset + grub_le_to_cpu32 (e->start); ++ && end > offset ++ + (grub_le_to_cpu32 (e->start) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS))) ++ end = offset + (grub_le_to_cpu32 (e->start) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + + /* If this is a GPT partition, this MBR is just a dummy. */ + if (e->type == GRUB_PC_PARTITION_TYPE_GPT_DISK && i == 0) +@@ -282,7 +290,9 @@ + + if (grub_msdos_partition_is_extended (e->type)) + { +- offset = ext_offset + grub_le_to_cpu32 (e->start); ++ offset = ext_offset ++ + (grub_le_to_cpu32 (e->start) ++ << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS)); + if (! ext_offset) + ext_offset = offset; + +Index: b/include/grub/disk.h +=================================================================== +--- a/include/grub/disk.h ++++ b/include/grub/disk.h +@@ -100,6 +100,9 @@ + /* The total number of sectors. */ + grub_uint64_t total_sectors; + ++ /* Logarithm of sector size. */ ++ unsigned int log_sector_size; ++ + /* The id used by the disk cache manager. */ + unsigned long id; + +@@ -132,9 +135,10 @@ + /* The maximum number of disk caches. */ + #define GRUB_DISK_CACHE_NUM 1021 + +-/* The size of a disk cache in sector units. */ +-#define GRUB_DISK_CACHE_SIZE 8 +-#define GRUB_DISK_CACHE_BITS 3 ++/* The size of a disk cache in 512B units. Must be at least as big as the ++ largest supported sector size, currently 16K. */ ++#define GRUB_DISK_CACHE_BITS 6 ++#define GRUB_DISK_CACHE_SIZE (1 << GRUB_DISK_CACHE_BITS) + + /* Return value of grub_disk_get_size() in case disk size is unknown. */ + #define GRUB_DISK_SIZE_UNKNOWN 0xffffffffffffffffULL +Index: b/util/grub-fstest.c +=================================================================== +--- a/util/grub-fstest.c ++++ b/util/grub-fstest.c +@@ -60,6 +60,7 @@ + #define CMD_HEX 4 + #define CMD_CRC 6 + #define CMD_BLOCKLIST 7 ++#define CMD_TESTLOAD 8 + + #define BUF_SIZE 32256 + +@@ -333,6 +334,9 @@ + case CMD_BLOCKLIST: + execute_command ("blocklist", n, args); + grub_printf ("\n"); ++ case CMD_TESTLOAD: ++ execute_command ("testload", n, args); ++ grub_printf ("\n"); + } + + for (i = 0; i < num_disks; i++) +@@ -488,6 +492,11 @@ + cmd = CMD_BLOCKLIST; + nparm = 1; + } ++ else if (!grub_strcmp (arg, "testload")) ++ { ++ cmd = CMD_TESTLOAD; ++ nparm = 1; ++ } + else + { + fprintf (stderr, _("Invalid command %s.\n"), arg); --- grub2-1.99.orig/debian/patches/ubuntu_vbe_autodetect.patch +++ grub2-1.99/debian/patches/ubuntu_vbe_autodetect.patch @@ -0,0 +1,494 @@ +Description: Preferred resolution detection for VBE +Author: Colin Watson +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2010-12/msg00051.html +Last-Update: 2010-12-15 + +Index: b/ChangeLog.vbe-autodetect +=================================================================== +--- /dev/null ++++ b/ChangeLog.vbe-autodetect +@@ -0,0 +1,33 @@ ++2011-01-17 Colin Watson ++ ++ Preferred resolution detection for VBE. ++ ++ * grub-core/video/video.c (grub_video_edid_checksum): New function. ++ (grub_video_edid_preferred_mode): Likewise. Try EDID followed by ++ the Flat Panel extension, in line with the X.org VESA driver. ++ * grub-core/video/i386/pc/vbe.c (grub_vbe_bios_get_flat_panel_info): ++ New function. ++ (grub_vbe_bios_get_ddc_capabilities): Likewise. ++ (grub_vbe_bios_read_edid): Likewise. ++ (grub_vbe_get_preferred_mode): Likewise. ++ (grub_video_vbe_setup): When the mode is "auto", try to get the ++ preferred mode from VBE, and use the largest mode that is no larger ++ than the preferred mode (some BIOSes expose a preferred mode that is ++ not in their mode list!). If this fails, fall back to 640x480 as a ++ safe conservative choice. ++ (grub_video_vbe_get_edid): New function. ++ (grub_video_vbe_adapter): Add get_edid. ++ * include/grub/video.h (struct grub_vbe_edid_info): New structure. ++ (struct grub_video_adapter): Add get_edid. ++ (grub_video_edid_checksum): Add prototype. ++ (grub_video_edid_preferred_mode): Likewise. ++ * include/grub/i386/pc/vbe.h (struct grub_vbe_flat_panel_info): New ++ structure. ++ ++ * grub-core/commands/videoinfo.c (print_edid): New function. ++ (grub_cmd_videoinfo): Print EDID if available. ++ ++ * util/grub.d/00_header.in (GRUB_GFXMODE): Default to "auto". This ++ is more appropriate on a wider range of platforms than 640x480. ++ * docs/grub.texi (Simple configuration): Update GRUB_GFXMODE ++ documentation. +Index: b/docs/grub.texi +=================================================================== +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1206,7 +1206,8 @@ + Set the resolution used on the @samp{gfxterm} graphical terminal. Note that + you can only use modes which your graphics card supports via VESA BIOS + Extensions (VBE), so for example native LCD panel resolutions may not be +-available. The default is @samp{640x480}. @xref{gfxmode}. ++available. The default is @samp{auto}, which tries to select a preferred ++resolution. @xref{gfxmode}. + + @item GRUB_BACKGROUND + Set a background image for use with the @samp{gfxterm} graphical terminal. +Index: b/grub-core/commands/videoinfo.c +=================================================================== +--- a/grub-core/commands/videoinfo.c ++++ b/grub-core/commands/videoinfo.c +@@ -79,6 +79,30 @@ + return 0; + } + ++static void ++print_edid (struct grub_video_edid_info *edid_info) ++{ ++ unsigned int edid_width, edid_height; ++ ++ if (grub_video_edid_checksum (edid_info)) ++ { ++ grub_printf (" EDID checksum invalid\n"); ++ grub_errno = GRUB_ERR_NONE; ++ return; ++ } ++ ++ grub_printf (" EDID version: %u.%u\n", ++ edid_info->version, edid_info->revision); ++ if (grub_video_edid_preferred_mode (edid_info, &edid_width, &edid_height) ++ == GRUB_ERR_NONE) ++ grub_printf (" Preferred mode: %ux%u\n", edid_width, edid_height); ++ else ++ { ++ grub_printf (" No preferred mode available\n"); ++ grub_errno = GRUB_ERR_NONE; ++ } ++} ++ + static grub_err_t + grub_cmd_videoinfo (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +@@ -122,6 +146,8 @@ + + FOR_VIDEO_ADAPTERS (adapter) + { ++ struct grub_video_edid_info edid_info; ++ + grub_printf ("Adapter '%s':\n", adapter->name); + + if (!adapter->iterate) +@@ -145,6 +171,11 @@ + + adapter->iterate (hook); + ++ if (adapter->get_edid && adapter->get_edid (&edid_info) == GRUB_ERR_NONE) ++ print_edid (&edid_info); ++ else ++ grub_errno = GRUB_ERR_NONE; ++ + if (adapter->id != id) + { + if (adapter->fini ()) +Index: b/grub-core/video/i386/pc/vbe.c +=================================================================== +--- a/grub-core/video/i386/pc/vbe.c ++++ b/grub-core/video/i386/pc/vbe.c +@@ -275,6 +275,56 @@ + return regs.eax & 0xffff; + } + ++/* Call VESA BIOS 0x4f11 to get flat panel information, return status. */ ++static grub_vbe_status_t ++grub_vbe_bios_get_flat_panel_info (struct grub_vbe_flat_panel_info *flat_panel_info) ++{ ++ struct grub_bios_int_registers regs; ++ ++ regs.eax = 0x4f11; ++ regs.ebx = 0x0001; ++ regs.es = (((grub_addr_t) flat_panel_info) & 0xffff0000) >> 4; ++ regs.edi = ((grub_addr_t) flat_panel_info) & 0xffff; ++ regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; ++ grub_bios_interrupt (0x10, ®s); ++ return regs.eax & 0xffff; ++} ++ ++/* Call VESA BIOS 0x4f15 to get DDC availability, return status. */ ++static grub_vbe_status_t ++grub_vbe_bios_get_ddc_capabilities (grub_uint8_t *level) ++{ ++ struct grub_bios_int_registers regs; ++ ++ regs.eax = 0x4f15; ++ regs.ebx = 0x0000; ++ regs.ecx = 0x0000; ++ regs.es = 0x0000; ++ regs.edi = 0x0000; ++ regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; ++ grub_bios_interrupt (0x10, ®s); ++ ++ *level = regs.ebx & 0xff; ++ return regs.eax & 0xffff; ++} ++ ++/* Call VESA BIOS 0x4f15 to read EDID information, return status. */ ++static grub_vbe_status_t ++grub_vbe_bios_read_edid (struct grub_video_edid_info *edid_info) ++{ ++ struct grub_bios_int_registers regs; ++ ++ regs.eax = 0x4f15; ++ regs.ebx = 0x0001; ++ regs.ecx = 0x0000; ++ regs.edx = 0x0000; ++ regs.es = (((grub_addr_t) edid_info) & 0xffff0000) >> 4; ++ regs.edi = ((grub_addr_t) edid_info) & 0xffff; ++ regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT; ++ grub_bios_interrupt (0x10, ®s); ++ return regs.eax & 0xffff; ++} ++ + + grub_err_t + grub_vbe_probe (struct grub_vbe_info_block *info_block) +@@ -329,6 +379,61 @@ + return GRUB_ERR_NONE; + } + ++static grub_err_t ++grub_video_vbe_get_edid (struct grub_video_edid_info *edid_info) ++{ ++ struct grub_video_edid_info *edid_info_lowmem; ++ ++ /* Use low memory scratch area as temporary storage for VESA BIOS calls. */ ++ edid_info_lowmem = ++ (struct grub_video_edid_info *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR; ++ grub_memset (edid_info_lowmem, 0, sizeof (*edid_info_lowmem)); ++ ++ if (grub_vbe_bios_read_edid (edid_info_lowmem) != GRUB_VBE_STATUS_OK) ++ return grub_error (GRUB_ERR_BAD_DEVICE, "EDID information not available"); ++ ++ grub_memcpy (edid_info, edid_info_lowmem, sizeof (*edid_info)); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_vbe_get_preferred_mode (unsigned int *width, unsigned int *height) ++{ ++ grub_vbe_status_t status; ++ grub_uint8_t ddc_level; ++ struct grub_video_edid_info edid_info; ++ struct grub_vbe_flat_panel_info *flat_panel_info; ++ ++ /* Use low memory scratch area as temporary storage for VESA BIOS calls. */ ++ flat_panel_info = (struct grub_vbe_flat_panel_info *) ++ (GRUB_MEMORY_MACHINE_SCRATCH_ADDR + sizeof (struct grub_video_edid_info)); ++ grub_memset (flat_panel_info, 0, sizeof (*flat_panel_info)); ++ ++ if (controller_info.version >= 0x200 ++ && (grub_vbe_bios_get_ddc_capabilities (&ddc_level) & 0xff) ++ == GRUB_VBE_STATUS_OK) ++ { ++ if (grub_video_vbe_get_edid (&edid_info) == GRUB_ERR_NONE ++ && grub_video_edid_checksum (&edid_info) == GRUB_ERR_NONE ++ && grub_video_edid_preferred_mode (&edid_info, width, height) ++ == GRUB_ERR_NONE) ++ return GRUB_ERR_NONE; ++ ++ grub_errno = GRUB_ERR_NONE; ++ } ++ ++ status = grub_vbe_bios_get_flat_panel_info (flat_panel_info); ++ if (status == GRUB_VBE_STATUS_OK) ++ { ++ *width = flat_panel_info->horizontal_size; ++ *height = flat_panel_info->vertical_size; ++ return GRUB_ERR_NONE; ++ } ++ ++ return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "cannot get preferred mode"); ++} ++ + grub_err_t + grub_vbe_set_video_mode (grub_uint32_t vbe_mode, + struct grub_vbe_mode_info_block *vbe_mode_info) +@@ -698,11 +803,28 @@ + struct grub_vbe_mode_info_block best_vbe_mode_info; + grub_uint32_t best_vbe_mode = 0; + int depth; ++ int preferred_mode = 0; + + /* Decode depth from mode_type. If it is zero, then autodetect. */ + depth = (mode_type & GRUB_VIDEO_MODE_TYPE_DEPTH_MASK) + >> GRUB_VIDEO_MODE_TYPE_DEPTH_POS; + ++ if (width == 0 && height == 0) ++ { ++ grub_vbe_get_preferred_mode (&width, &height); ++ if (grub_errno == GRUB_ERR_NONE) ++ preferred_mode = 1; ++ else ++ { ++ /* Fall back to 640x480. This is conservative, but the largest ++ mode supported by the graphics card may not be safe for the ++ display device. */ ++ grub_errno = GRUB_ERR_NONE; ++ width = 640; ++ height = 480; ++ } ++ } ++ + /* Walk thru mode list and try to find matching mode. */ + for (p = vbe_mode_list; *p != 0xFFFF; p++) + { +@@ -745,10 +867,21 @@ + /* Unsupported bitdepth . */ + continue; + +- if (((vbe_mode_info.x_resolution != width) +- || (vbe_mode_info.y_resolution != height)) && width != 0 && height != 0) +- /* Non matching resolution. */ +- continue; ++ if (preferred_mode) ++ { ++ if (vbe_mode_info.x_resolution > width ++ || vbe_mode_info.y_resolution > height) ++ /* Resolution exceeds that of preferred mode. */ ++ continue; ++ } ++ else ++ { ++ if (((vbe_mode_info.x_resolution != width) ++ || (vbe_mode_info.y_resolution != height)) ++ && width != 0 && height != 0) ++ /* Non matching resolution. */ ++ continue; ++ } + + /* Check if user requested RGB or index color mode. */ + if ((mode_mask & GRUB_VIDEO_MODE_TYPE_COLOR_MASK) != 0) +@@ -902,6 +1035,7 @@ + .set_active_render_target = grub_video_fb_set_active_render_target, + .get_active_render_target = grub_video_fb_get_active_render_target, + .iterate = grub_video_vbe_iterate, ++ .get_edid = grub_video_vbe_get_edid, + .print_adapter_specific_info = grub_video_vbe_print_adapter_specific_info, + + .next = 0 +Index: b/grub-core/video/video.c +=================================================================== +--- a/grub-core/video/video.c ++++ b/grub-core/video/video.c +@@ -376,6 +376,50 @@ + return grub_video_adapter_active->get_active_render_target (target); + } + ++grub_err_t ++grub_video_edid_checksum (struct grub_video_edid_info *edid_info) ++{ ++ const char *edid_bytes = (const char *) edid_info; ++ int i; ++ char checksum = 0; ++ ++ /* Check EDID checksum. */ ++ for (i = 0; i < 128; ++i) ++ checksum += edid_bytes[i]; ++ ++ if (checksum != 0) ++ return grub_error (GRUB_ERR_BAD_DEVICE, ++ "invalid EDID checksum %d", checksum); ++ ++ grub_errno = GRUB_ERR_NONE; ++ return grub_errno; ++} ++ ++grub_err_t ++grub_video_edid_preferred_mode (struct grub_video_edid_info *edid_info, ++ unsigned int *width, unsigned int *height) ++{ ++ /* Bit 1 in the Feature Support field indicates that the first ++ Detailed Timing Description is the preferred timing mode. */ ++ if (edid_info->version == 1 /* we don't understand later versions */ ++ && (edid_info->feature_support ++ & GRUB_VIDEO_EDID_FEATURE_PREFERRED_TIMING_MODE) ++ && edid_info->detailed_timings[0].pixel_clock) ++ { ++ *width = edid_info->detailed_timings[0].horizontal_active_lo ++ | (((unsigned int) ++ (edid_info->detailed_timings[0].horizontal_hi & 0xf0)) ++ << 4); ++ *height = edid_info->detailed_timings[0].vertical_active_lo ++ | (((unsigned int) ++ (edid_info->detailed_timings[0].vertical_hi & 0xf0)) ++ << 4); ++ return GRUB_ERR_NONE; ++ } ++ ++ return grub_error (GRUB_ERR_BAD_DEVICE, "no preferred mode available"); ++} ++ + /* Parse x[x]*/ + static grub_err_t + parse_modespec (const char *current_mode, int *width, int *height, int *depth) +Index: b/include/grub/i386/pc/vbe.h +=================================================================== +--- a/include/grub/i386/pc/vbe.h ++++ b/include/grub/i386/pc/vbe.h +@@ -19,6 +19,8 @@ + #ifndef GRUB_VBE_MACHINE_HEADER + #define GRUB_VBE_MACHINE_HEADER 1 + ++#include ++ + /* Default video mode to be used. */ + #define GRUB_VBE_DEFAULT_VIDEO_MODE 0x101 + +@@ -169,6 +171,21 @@ + grub_uint8_t alignment; + } __attribute__ ((packed)); + ++struct grub_vbe_flat_panel_info ++{ ++ grub_uint16_t horizontal_size; ++ grub_uint16_t vertical_size; ++ grub_uint16_t panel_type; ++ grub_uint8_t red_bpp; ++ grub_uint8_t green_bpp; ++ grub_uint8_t blue_bpp; ++ grub_uint8_t reserved_bpp; ++ grub_uint32_t reserved_offscreen_mem_size; ++ grub_vbe_farptr_t reserved_offscreen_mem_ptr; ++ ++ grub_uint8_t reserved[14]; ++} __attribute__ ((packed)); ++ + /* Prototypes for helper functions. */ + /* Call VESA BIOS 0x4f00 to get VBE Controller Information, return status. */ + grub_vbe_status_t +Index: b/include/grub/video.h +=================================================================== +--- a/include/grub/video.h ++++ b/include/grub/video.h +@@ -210,6 +210,66 @@ + grub_uint8_t a; /* Reserved bits value (0-255). */ + }; + ++struct grub_video_edid_info ++{ ++ grub_uint8_t header[8]; ++ grub_uint16_t manufacturer_id; ++ grub_uint16_t product_id; ++ grub_uint32_t serial_number; ++ grub_uint8_t week_of_manufacture; ++ grub_uint8_t year_of_manufacture; ++ grub_uint8_t version; ++ grub_uint8_t revision; ++ ++ grub_uint8_t video_input_definition; ++ grub_uint8_t max_horizontal_image_size; ++ grub_uint8_t max_vertical_image_size; ++ grub_uint8_t display_gamma; ++ grub_uint8_t feature_support; ++#define GRUB_VIDEO_EDID_FEATURE_PREFERRED_TIMING_MODE (1 << 1) ++ ++ grub_uint8_t red_green_lo; ++ grub_uint8_t blue_white_lo; ++ grub_uint8_t red_x_hi; ++ grub_uint8_t red_y_hi; ++ grub_uint8_t green_x_hi; ++ grub_uint8_t green_y_hi; ++ grub_uint8_t blue_x_hi; ++ grub_uint8_t blue_y_hi; ++ grub_uint8_t white_x_hi; ++ grub_uint8_t white_y_hi; ++ ++ grub_uint8_t established_timings_1; ++ grub_uint8_t established_timings_2; ++ grub_uint8_t manufacturer_reserved_timings; ++ ++ grub_uint16_t standard_timings[8]; ++ ++ struct { ++ grub_uint16_t pixel_clock; ++ /* Only valid if the pixel clock is non-null. */ ++ grub_uint8_t horizontal_active_lo; ++ grub_uint8_t horizontal_blanking_lo; ++ grub_uint8_t horizontal_hi; ++ grub_uint8_t vertical_active_lo; ++ grub_uint8_t vertical_blanking_lo; ++ grub_uint8_t vertical_hi; ++ grub_uint8_t horizontal_sync_offset_lo; ++ grub_uint8_t horizontal_sync_pulse_width_lo; ++ grub_uint8_t vertical_sync_lo; ++ grub_uint8_t sync_hi; ++ grub_uint8_t horizontal_image_size_lo; ++ grub_uint8_t vertical_image_size_lo; ++ grub_uint8_t image_size_hi; ++ grub_uint8_t horizontal_border; ++ grub_uint8_t vertical_border; ++ grub_uint8_t flags; ++ } detailed_timings[4]; ++ ++ grub_uint8_t extension_flag; ++ grub_uint8_t checksum; ++} __attribute__ ((packed)); ++ + typedef enum grub_video_driver_id + { + GRUB_VIDEO_DRIVER_NONE, +@@ -311,6 +371,8 @@ + + int (*iterate) (int (*hook) (const struct grub_video_mode_info *info)); + ++ grub_err_t (*get_edid) (struct grub_video_edid_info *edid_info); ++ + void (*print_adapter_specific_info) (void); + }; + typedef struct grub_video_adapter *grub_video_adapter_t; +@@ -423,6 +485,11 @@ + + grub_err_t grub_video_get_active_render_target (struct grub_video_render_target **target); + ++grub_err_t grub_video_edid_checksum (struct grub_video_edid_info *edid_info); ++grub_err_t grub_video_edid_preferred_mode (struct grub_video_edid_info *edid_info, ++ unsigned int *width, ++ unsigned int *height); ++ + grub_err_t EXPORT_FUNC (grub_video_set_mode) (const char *modestring, + unsigned int modemask, + unsigned int modevalue); +Index: b/util/grub.d/00_header.in +=================================================================== +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -36,7 +36,7 @@ + if [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi + if [ "x${GRUB_DEFAULT}" = "xsaved" ] ; then GRUB_DEFAULT='${saved_entry}' ; fi + if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi +-if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=640x480 ; fi ++if [ "x${GRUB_GFXMODE}" = "x" ] ; then GRUB_GFXMODE=auto ; fi + + if [ "x${GRUB_DEFAULT_BUTTON}" = "x" ] ; then GRUB_DEFAULT_BUTTON="$GRUB_DEFAULT" ; fi + if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_entry}' ; fi --- grub2-1.99.orig/debian/patches/ubuntu_really_quiet.patch +++ grub2-1.99/debian/patches/ubuntu_really_quiet.patch @@ -0,0 +1,77 @@ +Description: Remove verbose messages printed before reading configuration + In some ways this is awkward because it makes debugging harder, but it's a + requirement for a smooth-looking boot process; we may be able to do better in + future. Upstream doesn't want this, though. + . + We disable the cursor as well, for similar reasons of tidiness. +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/386922 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/861048 +Forwarded: not-needed +Last-Update: 2011-01-05 + +Index: b/grub-core/kern/main.c +=================================================================== +--- a/grub-core/kern/main.c ++++ b/grub-core/kern/main.c +@@ -170,13 +170,14 @@ + void + grub_main (void) + { ++ struct grub_term_output *term; ++ + /* First of all, initialize the machine. */ + grub_machine_init (); + +- /* Hello. */ +- grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); +- grub_printf ("Welcome to GRUB!\n\n"); +- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); ++ /* Disable the cursor until we need it. */ ++ FOR_ACTIVE_TERM_OUTPUTS(term) ++ grub_term_setcursor (term, 0); + + /* Load pre-loaded modules and free the space. */ + grub_register_exported_symbols (); +@@ -196,5 +197,10 @@ + + grub_load_config (); + grub_load_normal_mode (); ++ ++ /* If we have to enter rescue mode, enable the cursor again. */ ++ FOR_ACTIVE_TERM_OUTPUTS(term) ++ grub_term_setcursor (term, 1); ++ + grub_rescue_run (); + } +Index: b/grub-core/kern/rescue_reader.c +=================================================================== +--- a/grub-core/kern/rescue_reader.c ++++ b/grub-core/kern/rescue_reader.c +@@ -77,8 +77,6 @@ + void + grub_rescue_run (void) + { +- grub_printf ("Entering rescue mode...\n"); +- + while (1) + { + char *line; +Index: b/grub-core/normal/menu.c +=================================================================== +--- a/grub-core/normal/menu.c ++++ b/grub-core/normal/menu.c +@@ -668,12 +668,9 @@ + + /* Callback invoked immediately before a menu entry is executed. */ + static void +-notify_booting (grub_menu_entry_t entry, ++notify_booting (grub_menu_entry_t entry __attribute__((unused)), + void *userdata __attribute__((unused))) + { +- grub_printf (" "); +- grub_printf_ (N_("Booting \'%s\'"), entry->title); +- grub_printf ("\n\n"); + } + + /* Callback invoked when a default menu entry executed because of a timeout --- grub2-1.99.orig/debian/patches/install_stage2_confusion.patch +++ grub2-1.99/debian/patches/install_stage2_confusion.patch @@ -0,0 +1,24 @@ +Description: If GRUB Legacy is still around, tell packaging to ignore it +Author: Colin Watson +Bug-Debian: http://bugs.debian.org/586143 +Forwarded: not-needed +Last-Update: 2010-06-18 + +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -660,6 +660,13 @@ + fi + fi + ++# If vestiges of GRUB Legacy still exist, tell the Debian packaging that ++# they can ignore them. ++if test -z "$rootdir" && \ ++ test -e /boot/grub/stage2 && test -e /boot/grub/menu.lst; then ++ touch /boot/grub/grub2-installed ++fi ++ + echo "Installation finished. No error reported." + + # Bye. --- grub2-1.99.orig/debian/patches/ubuntu_probe_dmraid.patch +++ grub2-1.99/debian/patches/ubuntu_probe_dmraid.patch @@ -0,0 +1,57 @@ +Description: Handle probing striped DM-RAID devices +Author: Robert Collins +Bug-Ubuntu: https://bugs.launchpad.net/bugs/803658 +Forwarded: no +Last-Update: 2011-09-14 + +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -475,9 +475,15 @@ + grub_dprintf ("hostdisk", "no dm target\n"); + goto devmapper_fail; + } +- if (strcmp (target_type, "linear") != 0) ++ if (strcmp (target_type, "striped") == 0) + { +- grub_dprintf ("hostdisk", "ignoring dm target %s (not linear)\n", ++ grub_dprintf ("hostdisk", "treating dm target %s (striped) as real disk\n", dev); ++ return 0; ++ } ++ if (strcmp (target_type, "linear") != 0 && ++ strcmp (target_type, "striped") != 0 ) ++ { ++ grub_dprintf ("hostdisk", "ignoring dm target %s (not linear/striped)\n", + target_type); + goto devmapper_fail; + } +@@ -1488,6 +1494,11 @@ + grub_dprintf ("hostdisk", "%s child has no DM name\n", path); + goto devmapper_out; + } ++ if (strstr (child_name, "-") != 0) ++ { ++ grub_dprintf ("hostdisk", "%s child %s looks like a sub-layer\n", path, child_name); ++ goto devmapper_out; ++ } + mapper_name = child_name; + + devmapper_out: +@@ -1594,6 +1605,16 @@ + + if (os_dev[len - 1] < '0' || os_dev[len - 1] > '9') + return 1; ++ /* dmraid devices are enumerated - e.g. /dev/mapper/isw_myuuidNAME0 but ++ still whole disk. An initial heuristic follows: ++ They are a whole disk device if and only if: ++ - the name starts with /dev/mapper/ ++ - the name does not contain '-' (so "NAME0-0") will not count ++ - we ignore partitions ("NAME0p1") because they return non-zero ++ partition offsets and device_is_wholedisk is not called. */ ++ if (strncmp (os_dev, "/dev/mapper/", sizeof ("/dev/mapper/") - 1) == 0 && ++ strstr (os_dev + sizeof ("/dev/mapper/") - 1, "-") == 0) ++ return 1; + return 0; + } + #endif --- grub2-1.99.orig/debian/patches/ubuntu_grub_standards.patch +++ grub2-1.99/debian/patches/ubuntu_grub_standards.patch @@ -0,0 +1,19 @@ +Description: Remove GNU/Linux from default distributor string + This is Ubuntu-specific (we call it "Ubuntu", not "Ubuntu GNU/Linux"). +Author: Mario Limonciello +Forwarded: not-needed +Last-Update: 2011-01-05 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -31,7 +31,7 @@ + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS=GNU/Linux + else +- OS="${GRUB_DISTRIBUTOR} GNU/Linux" ++ OS="${GRUB_DISTRIBUTOR}" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1) ${CLASS}" + fi + --- grub2-1.99.orig/debian/patches/branch_embed-sectors.patch +++ grub2-1.99/debian/patches/branch_embed-sectors.patch @@ -0,0 +1,247 @@ +Description: Detect other software using embedding area + When embedding the core image in a post-MBR gap, check for and avoid + sectors matching any of the signatures in embed_signatures. +Author: Colin Watson +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/embed-sectors/ +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2010-08/msg00137.html +Last-Update: 2011-04-21 + +Index: b/ChangeLog.embed-sectors +=================================================================== +--- /dev/null ++++ b/ChangeLog.embed-sectors +@@ -0,0 +1,12 @@ ++2011-03-14 Colin Watson ++ ++ * include/grub/partition.h (grub_partition_map): Change prototype of ++ embed to take a maximum value for nsectors. ++ * grub-core/partmap/msdos.c (embed_signatures): New array. ++ (pc_partition_map_embed): Check for and avoid sectors matching any ++ of the signatures in embed_signatures, up to max_nsectors. ++ * grub-core/partmap/gpt.c (gpt_partition_map_embed): Restrict ++ returned sector map to max_nsectors. ++ * util/grub-setup.c (setup): Allow for the embedding area being ++ split into multiple blocklists. Tell dest_partmap->embed the ++ maximum number of sectors we care about. +Index: b/grub-core/partmap/gpt.c +=================================================================== +--- a/grub-core/partmap/gpt.c ++++ b/grub-core/partmap/gpt.c +@@ -127,6 +127,7 @@ + #ifdef GRUB_UTIL + static grub_err_t + gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, ++ unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors) + { +@@ -176,6 +177,8 @@ + " embedding won't be possible!"); + + *nsectors = len; ++ if (*nsectors > max_nsectors) ++ *nsectors = max_nsectors; + *sectors = grub_malloc (*nsectors * sizeof (**sectors)); + if (!*sectors) + return grub_errno; +Index: b/grub-core/partmap/msdos.c +=================================================================== +--- a/grub-core/partmap/msdos.c ++++ b/grub-core/partmap/msdos.c +@@ -29,6 +29,66 @@ + static struct grub_partition_map grub_msdos_partition_map; + + ++#ifdef GRUB_UTIL ++#include ++ ++struct embed_signature ++{ ++ const char *name; ++ const char *signature; ++ int signature_len; ++ enum { TYPE_SOFTWARE, TYPE_RAID } type; ++}; ++ ++const char message_warn[][200] = { ++ [TYPE_RAID] = "Sector %llu is already in use by %s; avoiding it. " ++ "Please ask the manufacturer not to store data in MBR gap", ++ [TYPE_SOFTWARE] = "Sector %llu is already in use by %s; avoiding it. " ++ "This software may cause boot or other problems in " ++ "future. Please ask its authors not to store data " ++ "in the boot track" ++}; ++ ++ ++/* Signatures of other software that may be using sectors in the embedding ++ area. */ ++struct embed_signature embed_signatures[] = ++ { ++ { ++ .name = "ZISD", ++ .signature = "ZISD", ++ .signature_len = 4, ++ .type = TYPE_SOFTWARE ++ }, ++ { ++ .name = "FlexNet", ++ .signature = "\xd4\x41\xa0\xf5\x03\x00\x03\x00", ++ .signature_len = 8, ++ .type = TYPE_SOFTWARE ++ }, ++ { ++ .name = "FlexNet", ++ .signature = "\xd8\x41\xa0\xf5\x02\x00\x02\x00", ++ .signature_len = 8, ++ .type = TYPE_SOFTWARE ++ }, ++ { ++ /* from Ryan Perkins */ ++ .name = "HP Backup and Recovery Manager (?)", ++ .signature = "\x70\x8a\x5d\x46\x35\xc5\x1b\x93" ++ "\xae\x3d\x86\xfd\xb1\x55\x3e\xe0", ++ .signature_len = 16, ++ .type = TYPE_SOFTWARE ++ }, ++ { ++ .name = "HighPoint RAID controller", ++ .signature = "ycgl", ++ .signature_len = 4, ++ .type = TYPE_RAID ++ } ++ }; ++#endif ++ + grub_err_t + grub_partition_msdos_iterate (grub_disk_t disk, + int (*hook) (grub_disk_t disk, +@@ -148,6 +208,7 @@ + #ifdef GRUB_UTIL + static grub_err_t + pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors, ++ unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors) + { +@@ -236,13 +297,65 @@ + + if (end >= *nsectors + 2) + { +- unsigned i; ++ unsigned i, j; ++ char *embed_signature_check; ++ unsigned int orig_nsectors, avail_nsectors; ++ ++ orig_nsectors = *nsectors; + *nsectors = end - 2; ++ avail_nsectors = *nsectors; ++ if (*nsectors > max_nsectors) ++ *nsectors = max_nsectors; + *sectors = grub_malloc (*nsectors * sizeof (**sectors)); + if (!*sectors) + return grub_errno; + for (i = 0; i < *nsectors; i++) + (*sectors)[i] = 1 + i; ++ ++ /* Check for software that is already using parts of the embedding ++ * area. ++ */ ++ embed_signature_check = grub_malloc (GRUB_DISK_SECTOR_SIZE); ++ for (i = 0; i < *nsectors; i++) ++ { ++ if (grub_disk_read (disk, (*sectors)[i], 0, GRUB_DISK_SECTOR_SIZE, ++ embed_signature_check)) ++ continue; ++ ++ for (j = 0; j < ARRAY_SIZE (embed_signatures); j++) ++ if (! grub_memcmp (embed_signatures[j].signature, ++ embed_signature_check, ++ embed_signatures[j].signature_len)) ++ break; ++ if (j == ARRAY_SIZE (embed_signatures)) ++ continue; ++ grub_util_warn (message_warn[embed_signatures[j].type], ++ (*sectors)[i], embed_signatures[j].name); ++ avail_nsectors--; ++ if (avail_nsectors < *nsectors) ++ *nsectors = avail_nsectors; ++ ++ /* Avoid this sector. */ ++ for (j = i; j < *nsectors; j++) ++ (*sectors)[j]++; ++ ++ /* Have we run out of space? */ ++ if (avail_nsectors < orig_nsectors) ++ break; ++ ++ /* Make sure to check the next sector. */ ++ i--; ++ } ++ grub_free (embed_signature_check); ++ ++ if (*nsectors < orig_nsectors) ++ return grub_error (GRUB_ERR_OUT_OF_RANGE, ++ "Other software is using the embedding area, and " ++ "there is not enough room for core.img. Such " ++ "software is often trying to store data in a way " ++ "that avoids detection. We recommend you " ++ "investigate."); ++ + return GRUB_ERR_NONE; + } + +Index: b/include/grub/partition.h +=================================================================== +--- a/include/grub/partition.h ++++ b/include/grub/partition.h +@@ -49,6 +49,7 @@ + #ifdef GRUB_UTIL + /* Determine sectors available for embedding. */ + grub_err_t (*embed) (struct grub_disk *disk, unsigned int *nsectors, ++ unsigned int max_nsectors, + grub_embed_type_t embed_type, + grub_disk_addr_t **sectors); + #endif +Index: b/util/grub-setup.c +=================================================================== +--- a/util/grub-setup.c ++++ b/util/grub-setup.c +@@ -428,10 +428,8 @@ + } + + nsec = core_sectors; +- err = dest_partmap->embed (dest_dev->disk, &nsec, ++ err = dest_partmap->embed (dest_dev->disk, &nsec, 2 * core_sectors, + GRUB_EMBED_PCBIOS, §ors); +- if (nsec > 2 * core_sectors) +- nsec = 2 * core_sectors; + + if (err) + { +@@ -460,6 +458,13 @@ + save_blocklists (sectors[i] + grub_partition_get_start (container), + 0, GRUB_DISK_SECTOR_SIZE); + ++ /* Make sure that the last blocklist is a terminator. */ ++ if (block == first_block) ++ block--; ++ block->start = 0; ++ block->len = 0; ++ block->segment = 0; ++ + write_rootdev (core_img, root_dev, boot_img, first_sector); + + core_img = realloc (core_img, nsec * GRUB_DISK_SECTOR_SIZE); +@@ -476,12 +481,6 @@ + nsec * GRUB_DISK_SECTOR_SIZE + - core_size); + +- /* Make sure that the second blocklist is a terminator. */ +- block = first_block - 1; +- block->start = 0; +- block->len = 0; +- block->segment = 0; +- + /* Write the core image onto the disk. */ + for (i = 0; i < nsec; i++) + grub_disk_write (dest_dev->disk, sectors[i], 0, --- grub2-1.99.orig/debian/patches/gfxpayload_keep_default.patch +++ grub2-1.99/debian/patches/gfxpayload_keep_default.patch @@ -0,0 +1,38 @@ +Description: Disable gfxpayload=keep by default + Setting gfxpayload=keep has been known to cause efifb to be inappropriately + enabled. In any case, with the current Linux kernel the result of this + option is that early kernelspace will be unable to print anything to the + console, so (for example) if boot fails and you end up dumped to an + initramfs prompt, you won't be able to see anything on the screen. As such + it shouldn't be enabled by default in Debian, no matter what kernel options + are enabled. + . + gfxpayload=keep is a good idea but rather ahead of its time ... +Author: Colin Watson +Bug-Debian: http://bugs.debian.org/567245 +Forwarded: no +Last-Update: 2010-03-09 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -77,17 +77,7 @@ + + # Use ELILO's generic "efifb" when it's known to be available. + # FIXME: We need an interface to select vesafb in case efifb can't be used. +- if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then +- cat << EOF +- load_video +-EOF +- if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \ +- && grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then +- cat << EOF +- set gfxpayload=keep +-EOF +- fi +- else ++ if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then + if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then + cat << EOF + load_video --- grub2-1.99.orig/debian/patches/ubuntu_linuxefi_require_shim.patch +++ grub2-1.99/debian/patches/ubuntu_linuxefi_require_shim.patch @@ -0,0 +1,19 @@ +Description: Make linuxefi refuse to boot without shim + This is only intended as a temporary measure. +Author: Colin Watson +Forwarded: not-needed +Last-Update: 2012-11-05 + +Index: b/grub-core/loader/i386/efi/linux.c +=================================================================== +--- a/grub-core/loader/i386/efi/linux.c ++++ b/grub-core/loader/i386/efi/linux.c +@@ -58,7 +58,7 @@ + shim_lock = grub_efi_locate_protocol(&guid, NULL); + + if (!shim_lock) +- return 1; ++ return 0; + + if (shim_lock->verify(data, size) == GRUB_EFI_SUCCESS) + return 1; --- grub2-1.99.orig/debian/patches/ubuntu_linuxefi_non_sb_fallback.patch +++ grub2-1.99/debian/patches/ubuntu_linuxefi_non_sb_fallback.patch @@ -0,0 +1,87 @@ +Description: If running under UEFI secure boot, attempt to use linuxefi loader +Author: Colin Watson +Author: Steve Langasek +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/grub-core/loader/i386/efi/linux.c +=================================================================== +--- a/grub-core/loader/i386/efi/linux.c ++++ b/grub-core/loader/i386/efi/linux.c +@@ -219,7 +219,7 @@ + + if (! grub_linuxefi_secure_validate (kernel, filelen)) + { +- grub_error (GRUB_ERR_INVALID_COMMAND, N_("%s has invalid signature"), argv[0]); ++ grub_error (GRUB_ERR_ACCESS_DENIED, N_("%s has invalid signature"), argv[0]); + grub_free (kernel); + goto fail; + } +Index: b/grub-core/loader/i386/linux.c +=================================================================== +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -75,6 +75,8 @@ + static void *efi_mmap_buf; + static grub_size_t maximal_cmdline_size; + #ifdef GRUB_MACHINE_EFI ++static int using_linuxefi; ++static grub_command_t initrdefi_cmd; + static grub_efi_uintn_t efi_mmap_size; + #else + static const grub_size_t efi_mmap_size = 0; +@@ -611,6 +613,41 @@ + + grub_dl_ref (my_mod); + ++#ifdef GRUB_MACHINE_EFI ++ using_linuxefi = 0; ++ if (grub_efi_secure_boot ()) ++ { ++ /* Try linuxefi first, which will require a successful signature check ++ and then hand over to the kernel without calling ExitBootServices. ++ If that fails, however, fall back to calling ExitBootServices ++ ourselves and then booting an unsigned kernel. */ ++ grub_dl_t mod; ++ grub_command_t linuxefi_cmd; ++ ++ grub_dprintf ("linux", "Secure Boot enabled: trying linuxefi\n"); ++ ++ mod = grub_dl_load ("linuxefi"); ++ if (mod) ++ { ++ grub_dl_ref (mod); ++ linuxefi_cmd = grub_command_find ("linuxefi"); ++ initrdefi_cmd = grub_command_find ("initrdefi"); ++ if (linuxefi_cmd && initrdefi_cmd) ++ { ++ (linuxefi_cmd->func) (linuxefi_cmd, argc, argv); ++ if (grub_errno == GRUB_ERR_NONE) ++ { ++ grub_dprintf ("linux", "Handing off to linuxefi\n"); ++ using_linuxefi = 1; ++ return GRUB_ERR_NONE; ++ } ++ grub_dprintf ("linux", "linuxefi failed (%d)\n", grub_errno); ++ grub_errno = GRUB_ERR_NONE; ++ } ++ } ++ } ++#endif ++ + if (argc == 0) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "no kernel specified"); +@@ -917,6 +954,12 @@ + grub_err_t err; + struct linux_kernel_header *lh; + ++#ifdef GRUB_MACHINE_EFI ++ /* If we're using linuxefi, just forward to initrdefi. */ ++ if (using_linuxefi && initrdefi_cmd) ++ return (initrdefi_cmd->func) (initrdefi_cmd, argc, argv); ++#endif ++ + if (argc == 0) + { + grub_error (GRUB_ERR_BAD_ARGUMENT, "no module specified"); --- grub2-1.99.orig/debian/patches/branch_squash.patch +++ grub2-1.99/debian/patches/branch_squash.patch @@ -0,0 +1,694 @@ +Description: Add squashfs 4 support +Author: Vladimir Serbinenko +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/squash/ +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3278 +Last-Update: 2011-05-19 + +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -65,6 +65,7 @@ + common = grub-core/fs/ntfscomp.c; + common = grub-core/fs/reiserfs.c; + common = grub-core/fs/sfs.c; ++ common = grub-core/fs/squash4.c; + common = grub-core/fs/tar.c; + common = grub-core/fs/udf.c; + common = grub-core/fs/ufs2.c; +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -985,6 +985,11 @@ + }; + + module = { ++ name = squash4; ++ common = fs/squash4.c; ++}; ++ ++module = { + name = tar; + common = fs/tar.c; + }; +Index: b/grub-core/fs/squash4.c +=================================================================== +--- /dev/null ++++ b/grub-core/fs/squash4.c +@@ -0,0 +1,548 @@ ++/* squash4.c - SquashFS */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2010 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++/* ++ object format Pointed by ++ superblock RAW Fixed offset (0) ++ data RAW ? Fixed offset (60) ++ inode table Chunk superblock ++ dir table Chunk superblock ++ fragment table Chunk unk1 ++ unk1 RAW, Chunk superblock ++ unk2 RAW superblock ++ UID/GID Chunk exttblptr ++ exttblptr RAW superblock ++ ++ UID/GID table is the array ot uint32_t ++ unk1 contains pointer to unk3 followed by some chunk. ++ unk2 containts one uint64_t ++*/ ++ ++struct grub_squash_super ++{ ++ grub_uint32_t magic; ++#define SQUASH_MAGIC 0x73717368 ++ grub_uint32_t dummy1; ++ grub_uint32_t creation_time; ++ grub_uint32_t dummy2; ++ grub_uint64_t dummy3; ++ grub_uint8_t flags; ++#define SQUASH_FLAG_UNCOMPRESSED_INODES 1 ++#define SQUASH_FLAG_UNCOMPRESSED_DATA 2 ++#define SQUASH_FLAG_UNCOMPRESSED_FRAGMENTS 8 ++ grub_uint8_t dummy4[7]; ++ grub_uint16_t root_ino_offset; ++ grub_uint32_t root_ino_chunk; ++ grub_uint16_t dummy5; ++ grub_uint64_t total_size; ++ grub_uint64_t exttbloffset; ++ grub_uint64_t dummy6; ++ grub_uint64_t inodeoffset; ++ grub_uint64_t diroffset; ++ grub_uint64_t unk1offset; ++ grub_uint64_t unk2offset; ++} __attribute__ ((packed)); ++ ++ ++/* Chunk-based */ ++struct grub_squash_inode ++{ ++ /* Same values as direlem types. */ ++ grub_uint16_t type; ++ grub_uint16_t dummy[3]; ++ grub_uint32_t mtime; ++ union ++ { ++ struct { ++ grub_uint32_t dummy; ++ grub_uint32_t chunk; ++ grub_uint32_t fragment; ++ grub_uint32_t offset; ++ grub_uint32_t size; ++ } __attribute__ ((packed)) file; ++ struct { ++ grub_uint32_t dummy1; ++ grub_uint32_t chunk; ++ grub_uint32_t dummy2; ++ grub_uint16_t size; ++ grub_uint32_t offset; ++ grub_uint16_t dummy3; ++ } __attribute__ ((packed)) dir; ++ struct { ++ grub_uint64_t dummy; ++ grub_uint32_t namelen; ++ char name[0]; ++ } __attribute__ ((packed)) symlink; ++ } __attribute__ ((packed)); ++} __attribute__ ((packed)); ++ ++/* Chunk-based. */ ++struct grub_squash_dirent_header ++{ ++ /* Actually the value is the number of elements - 1. */ ++ grub_uint32_t nelems; ++ grub_uint64_t ino_chunk; ++} __attribute__ ((packed)); ++ ++struct grub_squash_dirent ++{ ++ grub_uint16_t ino_offset; ++ grub_uint16_t dummy; ++ grub_uint16_t type; ++#define SQUASH_TYPE_DIR 1 ++#define SQUASH_TYPE_REGULAR 2 ++#define SQUASH_TYPE_SYMLINK 3 ++ /* Actually the value is the length of name - 1. */ ++ grub_uint16_t namelen; ++ char name[0]; ++} __attribute__ ((packed)); ++ ++struct grub_squash_frag_desc ++{ ++ grub_uint64_t offset; ++ grub_uint64_t dummy; ++} __attribute__ ((packed)); ++ ++#define SQUASH_CHUNK_SIZE 0x2000 ++#define SQUASH_CHUNK_FLAGS 0x8000 ++#define SQUASH_CHUNK_UNCOMPRESSED 0x8000 ++ ++struct grub_squash_data ++{ ++ grub_disk_t disk; ++ struct grub_squash_super sb; ++ struct grub_squash_inode ino; ++ grub_uint64_t fragments; ++}; ++ ++struct grub_fshelp_node ++{ ++ struct grub_squash_data *data; ++ struct grub_squash_inode ino; ++ grub_uint32_t ino_chunk; ++ grub_uint16_t ino_offset; ++}; ++ ++static grub_err_t ++read_chunk (grub_disk_t disk, void *buf, grub_size_t len, ++ grub_uint64_t chunk, grub_off_t offset) ++{ ++ grub_uint64_t chunk_start; ++ chunk_start = grub_le_to_cpu64 (chunk); ++ while (len > 0) ++ { ++ grub_uint64_t csize; ++ grub_uint16_t d; ++ grub_err_t err; ++ while (1) ++ { ++ err = grub_disk_read (disk, chunk_start >> GRUB_DISK_SECTOR_BITS, ++ chunk_start & (GRUB_DISK_SECTOR_SIZE - 1), ++ sizeof (d), &d); ++ if (err) ++ return err; ++ if (offset < SQUASH_CHUNK_SIZE) ++ break; ++ offset -= SQUASH_CHUNK_SIZE; ++ chunk_start += 2 + (grub_le_to_cpu16 (d) & ~SQUASH_CHUNK_FLAGS); ++ } ++ ++ csize = SQUASH_CHUNK_SIZE - offset; ++ if (csize > len) ++ csize = len; ++ ++ if (grub_le_to_cpu16 (d) & SQUASH_CHUNK_UNCOMPRESSED) ++ { ++ grub_disk_addr_t a = chunk_start + 2 + offset; ++ err = grub_disk_read (disk, (a >> GRUB_DISK_SECTOR_BITS), ++ a & (GRUB_DISK_SECTOR_SIZE - 1), ++ csize, buf); ++ if (err) ++ return err; ++ } ++ else ++ { ++ char *tmp; ++ grub_size_t bsize = grub_le_to_cpu16 (d) & ~SQUASH_CHUNK_FLAGS; ++ grub_disk_addr_t a = chunk_start + 2; ++ tmp = grub_malloc (bsize); ++ if (!tmp) ++ return grub_errno; ++ /* FIXME: buffer uncompressed data. */ ++ err = grub_disk_read (disk, (a >> GRUB_DISK_SECTOR_BITS), ++ a & (GRUB_DISK_SECTOR_SIZE - 1), ++ bsize, tmp); ++ if (err) ++ { ++ grub_free (tmp); ++ return err; ++ } ++ ++ if (grub_zlib_decompress (tmp, bsize, offset, ++ buf, csize) < 0) ++ { ++ grub_free (tmp); ++ return grub_errno; ++ } ++ grub_free (tmp); ++ } ++ len -= csize; ++ offset += csize; ++ buf = (char *) buf + csize; ++ } ++ return GRUB_ERR_NONE; ++} ++ ++static struct grub_squash_data * ++squash_mount (grub_disk_t disk) ++{ ++ struct grub_squash_super sb; ++ grub_err_t err; ++ struct grub_squash_data *data; ++ grub_uint64_t frag; ++ ++ err = grub_disk_read (disk, 0, 0, sizeof (sb), &sb); ++ if (grub_errno == GRUB_ERR_OUT_OF_RANGE) ++ grub_error (GRUB_ERR_BAD_FS, "not a squash4"); ++ if (err) ++ return NULL; ++ if (grub_le_to_cpu32 (sb.magic) != SQUASH_MAGIC) ++ { ++ grub_error (GRUB_ERR_BAD_FS, "not squash4"); ++ return NULL; ++ } ++ ++ err = grub_disk_read (disk, grub_le_to_cpu32 (sb.unk1offset) ++ >> GRUB_DISK_SECTOR_BITS, ++ grub_le_to_cpu32 (sb.unk1offset) ++ & (GRUB_DISK_SECTOR_SIZE - 1), sizeof (frag), &frag); ++ if (grub_errno == GRUB_ERR_OUT_OF_RANGE) ++ grub_error (GRUB_ERR_BAD_FS, "not a squash4"); ++ if (err) ++ return NULL; ++ ++ data = grub_malloc (sizeof (*data)); ++ if (!data) ++ return NULL; ++ data->sb = sb; ++ data->disk = disk; ++ data->fragments = frag; ++ ++ return data; ++} ++ ++static char * ++grub_squash_read_symlink (grub_fshelp_node_t node) ++{ ++ char *ret; ++ grub_err_t err; ++ ret = grub_malloc (grub_le_to_cpu32 (node->ino.symlink.namelen) + 1); ++ ++ err = read_chunk (node->data->disk, ret, ++ grub_le_to_cpu32 (node->ino.symlink.namelen), ++ grub_le_to_cpu64 (node->data->sb.inodeoffset) ++ + node->ino_chunk, ++ node->ino_offset + (node->ino.symlink.name ++ - (char *) &node->ino)); ++ if (err) ++ { ++ grub_free (ret); ++ return NULL; ++ } ++ ret[grub_le_to_cpu32 (node->ino.symlink.namelen)] = 0; ++ return ret; ++} ++ ++static int ++grub_squash_iterate_dir (grub_fshelp_node_t dir, ++ int NESTED_FUNC_ATTR ++ (*hook) (const char *filename, ++ enum grub_fshelp_filetype filetype, ++ grub_fshelp_node_t node)) ++{ ++ grub_uint32_t off = grub_le_to_cpu16 (dir->ino.dir.offset); ++ grub_uint32_t endoff; ++ unsigned i; ++ ++ /* FIXME: why - 3 ? */ ++ endoff = grub_le_to_cpu32 (dir->ino.dir.size) + off - 3; ++ ++ while (off < endoff) ++ { ++ struct grub_squash_dirent_header dh; ++ grub_err_t err; ++ ++ err = read_chunk (dir->data->disk, &dh, sizeof (dh), ++ grub_le_to_cpu64 (dir->data->sb.diroffset) ++ + grub_le_to_cpu32 (dir->ino.dir.chunk), off); ++ if (err) ++ return 0; ++ off += sizeof (dh); ++ for (i = 0; i < (unsigned) grub_le_to_cpu16 (dh.nelems) + 1; i++) ++ { ++ char *buf; ++ int r; ++ struct grub_fshelp_node *node; ++ enum grub_fshelp_filetype filetype = GRUB_FSHELP_REG; ++ struct grub_squash_dirent di; ++ struct grub_squash_inode ino; ++ ++ err = read_chunk (dir->data->disk, &di, sizeof (di), ++ grub_le_to_cpu64 (dir->data->sb.diroffset) ++ + grub_le_to_cpu32 (dir->ino.dir.chunk), off); ++ if (err) ++ return 0; ++ off += sizeof (di); ++ ++ err = read_chunk (dir->data->disk, &ino, sizeof (ino), ++ grub_le_to_cpu64 (dir->data->sb.inodeoffset) ++ + grub_le_to_cpu32 (dh.ino_chunk), ++ grub_cpu_to_le16 (di.ino_offset)); ++ if (err) ++ return 0; ++ ++ buf = grub_malloc (grub_le_to_cpu16 (di.namelen) + 2); ++ if (!buf) ++ return 0; ++ err = read_chunk (dir->data->disk, buf, ++ grub_le_to_cpu16 (di.namelen) + 1, ++ grub_le_to_cpu64 (dir->data->sb.diroffset) ++ + grub_le_to_cpu32 (dir->ino.dir.chunk), off); ++ if (err) ++ return 0; ++ ++ off += grub_le_to_cpu16 (di.namelen) + 1; ++ buf[grub_le_to_cpu16 (di.namelen) + 1] = 0; ++ if (grub_le_to_cpu16 (di.type) == SQUASH_TYPE_DIR) ++ filetype = GRUB_FSHELP_DIR; ++ if (grub_le_to_cpu16 (di.type) == SQUASH_TYPE_SYMLINK) ++ filetype = GRUB_FSHELP_SYMLINK; ++ ++ node = grub_malloc (sizeof (*node)); ++ if (! node) ++ return 0; ++ *node = *dir; ++ node->ino = ino; ++ node->ino_chunk = grub_le_to_cpu32 (dh.ino_chunk); ++ node->ino_offset = grub_le_to_cpu16 (di.ino_offset); ++ ++ r = hook (buf, filetype, node); ++ ++ grub_free (buf); ++ if (r) ++ return r; ++ } ++ } ++ return 0; ++} ++ ++static grub_err_t ++make_root_node (struct grub_squash_data *data, struct grub_fshelp_node *root) ++{ ++ grub_memset (root, 0, sizeof (*root)); ++ root->data = data; ++ ++ return read_chunk (data->disk, &root->ino, sizeof (root->ino), ++ grub_le_to_cpu64 (data->sb.inodeoffset) ++ + grub_le_to_cpu16 (data->sb.root_ino_chunk), ++ grub_cpu_to_le16 (data->sb.root_ino_offset)); ++} ++ ++static grub_err_t ++grub_squash_dir (grub_device_t device, const char *path, ++ int (*hook) (const char *filename, ++ const struct grub_dirhook_info *info)) ++{ ++ auto int NESTED_FUNC_ATTR iterate (const char *filename, ++ enum grub_fshelp_filetype filetype, ++ grub_fshelp_node_t node); ++ ++ int NESTED_FUNC_ATTR iterate (const char *filename, ++ enum grub_fshelp_filetype filetype, ++ grub_fshelp_node_t node) ++ { ++ struct grub_dirhook_info info; ++ grub_memset (&info, 0, sizeof (info)); ++ info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); ++ info.mtimeset = 1; ++ info.mtime = grub_le_to_cpu32 (node->ino.mtime); ++ return hook (filename, &info); ++ } ++ ++ struct grub_squash_data *data = 0; ++ struct grub_fshelp_node *fdiro = 0; ++ struct grub_fshelp_node root; ++ grub_err_t err; ++ ++ data = squash_mount (device->disk); ++ if (! data) ++ return grub_errno; ++ ++ err = make_root_node (data, &root); ++ if (err) ++ return err; ++ ++ grub_fshelp_find_file (path, &root, &fdiro, grub_squash_iterate_dir, ++ grub_squash_read_symlink, GRUB_FSHELP_DIR); ++ if (!grub_errno) ++ grub_squash_iterate_dir (fdiro, iterate); ++ ++ grub_free (data); ++ ++ return grub_errno; ++} ++ ++static grub_err_t ++grub_squash_open (struct grub_file *file, const char *name) ++{ ++ struct grub_squash_data *data = 0; ++ struct grub_fshelp_node *fdiro = 0; ++ struct grub_fshelp_node root; ++ grub_err_t err; ++ ++ data = squash_mount (file->device->disk); ++ if (! data) ++ return grub_errno; ++ ++ err = make_root_node (data, &root); ++ if (err) ++ return err; ++ ++ grub_fshelp_find_file (name, &root, &fdiro, grub_squash_iterate_dir, ++ grub_squash_read_symlink, GRUB_FSHELP_REG); ++ if (grub_errno) ++ { ++ grub_free (data); ++ return grub_errno; ++ } ++ ++ file->data = data; ++ data->ino = fdiro->ino; ++ file->size = grub_le_to_cpu32 (fdiro->ino.file.size); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_ssize_t ++grub_squash_read_data (struct grub_squash_data *data, ++ grub_disk_t disk, const struct grub_squash_inode *ino, ++ grub_off_t off, char *buf, grub_size_t len) ++{ ++ grub_err_t err; ++ grub_uint64_t a, b; ++ int compressed = 0; ++ ++ if (grub_le_to_cpu16 (ino->file.fragment) == 0xffff) ++ { ++ if (grub_le_to_cpu32 (ino->file.chunk)) ++ a = grub_le_to_cpu32 (ino->file.chunk); ++ else ++ a = sizeof (struct grub_squash_super); ++ compressed = !(data->sb.flags & SQUASH_FLAG_UNCOMPRESSED_DATA); ++ } ++ else ++ { ++ struct grub_squash_frag_desc frag; ++ err = read_chunk (disk, &frag, sizeof (frag), ++ data->fragments, sizeof (frag) ++ * grub_le_to_cpu16 (ino->file.fragment)); ++ if (err) ++ return -1; ++ a = grub_le_to_cpu64 (frag.offset) + grub_le_to_cpu32 (ino->file.chunk); ++ compressed = !(data->sb.flags & SQUASH_FLAG_UNCOMPRESSED_FRAGMENTS); ++ } ++ ++ b = grub_le_to_cpu32 (data->ino.file.offset) + off; ++ ++ /* FIXME: cache uncompressed chunks. */ ++ if (compressed) ++ err = grub_zlib_disk_read (disk, a, b, buf, len); ++ else ++ err = grub_disk_read (disk, (a + b) >> GRUB_DISK_SECTOR_BITS, ++ (a + b) & (GRUB_DISK_SECTOR_SIZE - 1), len, buf); ++ if (err) ++ return -1; ++ return len; ++} ++ ++static grub_ssize_t ++grub_squash_read (grub_file_t file, char *buf, grub_size_t len) ++{ ++ struct grub_squash_data *data = file->data; ++ ++ return grub_squash_read_data (data, file->device->disk, &data->ino, ++ file->offset, buf, len); ++} ++ ++static grub_err_t ++grub_squash_close (grub_file_t file) ++{ ++ grub_free (file->data); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_squash_mtime (grub_device_t dev, grub_int32_t *tm) ++{ ++ struct grub_squash_data *data = 0; ++ ++ data = squash_mount (dev->disk); ++ if (! data) ++ return grub_errno; ++ *tm = grub_le_to_cpu32 (data->sb.creation_time); ++ grub_free (data); ++ return GRUB_ERR_NONE; ++} ++ ++static struct grub_fs grub_squash_fs = ++ { ++ .name = "squash4", ++ .dir = grub_squash_dir, ++ .open = grub_squash_open, ++ .read = grub_squash_read, ++ .close = grub_squash_close, ++ .mtime = grub_squash_mtime, ++#ifdef GRUB_UTIL ++ .reserved_first_sector = 0, ++#endif ++ .next = 0 ++ }; ++ ++GRUB_MOD_INIT(squash4) ++{ ++ grub_fs_register (&grub_squash_fs); ++} ++ ++GRUB_MOD_FINI(squash4) ++{ ++ grub_fs_unregister (&grub_squash_fs); ++} ++ +Index: b/grub-core/io/gzio.c +=================================================================== +--- a/grub-core/io/gzio.c ++++ b/grub-core/io/gzio.c +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + #include + + GRUB_MOD_LICENSE ("GPLv3+"); +@@ -64,6 +65,9 @@ + /* If input is in memory following fields are used instead of file. */ + grub_size_t mem_input_size, mem_input_off; + grub_uint8_t *mem_input; ++ grub_disk_addr_t disk_input_off; ++ grub_disk_addr_t disk_input_start; ++ grub_disk_t disk_input; + /* The offset at which the data starts in the underlying file. */ + grub_off_t data_offset; + /* The type of current block. */ +@@ -384,8 +388,21 @@ + return 0; + } + +- if (grub_file_tell (gzio->file) == (grub_off_t) gzio->data_offset +- || gzio->inbuf_d == INBUFSIZ) ++ if (gzio->disk_input && (gzio->disk_input_off == gzio->data_offset ++ || gzio->inbuf_d == INBUFSIZ)) ++ { ++ grub_disk_addr_t d = gzio->disk_input_start + gzio->disk_input_off; ++ gzio->inbuf_d = 0; ++ grub_disk_read (gzio->disk_input, ++ d >> GRUB_DISK_SECTOR_BITS, ++ d & (GRUB_DISK_SECTOR_SIZE - 1), ++ INBUFSIZ, gzio->inbuf); ++ gzio->disk_input_off += INBUFSIZ; ++ } ++ ++ if (gzio->file && (grub_file_tell (gzio->file) ++ == (grub_off_t) gzio->data_offset ++ || gzio->inbuf_d == INBUFSIZ)) + { + gzio->inbuf_d = 0; + grub_file_read (gzio->file, gzio->inbuf, INBUFSIZ); +@@ -403,8 +420,10 @@ + grub_error (GRUB_ERR_OUT_OF_RANGE, + "attempt to seek outside of the file"); + else +- gzio->mem_input_off = gzio->data_offset; ++ gzio->mem_input_off = off; + } ++ else if (gzio->disk_input) ++ gzio->disk_input_off = off; + else + grub_file_seek (gzio->file, off); + } +@@ -1298,6 +1317,34 @@ + return ret; + } + ++grub_err_t ++grub_zlib_disk_read (grub_disk_t disk, grub_disk_addr_t zlibstart, ++ grub_off_t off, char *outbuf, grub_size_t outsize) ++{ ++ grub_gzio_t gzio = 0; ++ grub_ssize_t ret; ++ ++ gzio = grub_zalloc (sizeof (*gzio)); ++ if (! gzio) ++ return -1; ++ ++ gzio->disk_input_off = 0; ++ gzio->disk_input_start = zlibstart; ++ gzio->disk_input = disk; ++ ++ if (!test_zlib_header (gzio)) ++ { ++ grub_free (gzio); ++ return -1; ++ } ++ ++ ret = grub_gzio_read_real (gzio, off, outbuf, outsize); ++ grub_free (gzio); ++ ++ /* FIXME: Check Adler. */ ++ return ret < 0 ? grub_errno : GRUB_ERR_NONE; ++} ++ + + + static struct grub_fs grub_gzio_fs = +Index: b/include/grub/deflate.h +=================================================================== +--- a/include/grub/deflate.h ++++ b/include/grub/deflate.h +@@ -23,4 +23,8 @@ + grub_zlib_decompress (char *inbuf, grub_size_t insize, grub_off_t off, + char *outbuf, grub_size_t outsize); + ++grub_err_t ++grub_zlib_disk_read (grub_disk_t disk, grub_disk_addr_t zlibstart, ++ grub_off_t off, char *outbuf, grub_size_t outsize); ++ + #endif --- grub2-1.99.orig/debian/patches/ubuntu_lvm_raid_probe.patch +++ grub2-1.99/debian/patches/ubuntu_lvm_raid_probe.patch @@ -0,0 +1,228 @@ +Description: Fix LVM/RAID probing without device.map + When probing LVM or RAID without a device.map, probe all devices in order + that we will know about the underlying physical volumes. +Bug-Ubuntu: https://bugs.launchpad.net/bugs/525085 +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2010-03/msg00084.html +Last-Update: 2010-11-26 + +Index: b/ChangeLog.lvm-raid-probe +=================================================================== +--- /dev/null ++++ b/ChangeLog.lvm-raid-probe +@@ -0,0 +1,11 @@ ++2010-11-26 Colin Watson ++ ++ * grub-core/kern/emu/hostdisk.c (store_grub_dev): New function. ++ (grub_util_biosdisk_probe_device): New function. ++ * include/grub/emu/hostdisk.h (grub_util_biosdisk_probe_device): ++ Add prototype. ++ * util/grub-probe.c (main): If we don't have a device map, probe all ++ devices. ++ * util/grub-setup.c (main): Likewise. ++ * Makefile.util.def (grub-probe): Add util/deviceiter.c. ++ (grub-setup): Likewise. +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -273,6 +273,7 @@ + installdir = sbin; + mansection = 8; + common = util/grub-probe.c; ++ common = util/deviceiter.c; + + ldadd = libgrubmods.a; + ldadd = libgrubkern.a; +@@ -287,6 +288,7 @@ + common = util/grub-setup.c; + common = util/raid.c; + common = util/lvm.c; ++ common = util/deviceiter.c; + common = grub-core/lib/reed_solomon.c; + + sparc64_ieee1275 = util/ieee1275/ofpath.c; +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -1027,6 +1027,24 @@ + .next = 0 + }; + ++static char * ++canonicalize_device_name (const char *path) ++{ ++ char *ret; ++ ++#ifdef __linux__ ++ /* Leave /dev/mapper/ alone on Linux; such devices are the canonical form ++ despite sometimes being symlinks. */ ++ if (strncmp (path, "/dev/mapper/", 12) == 0) ++ return xstrdup (path); ++#endif ++ ++ ret = canonicalize_file_name (path); ++ if (! ret) ++ grub_util_error ("cannot get the real path of `%s'", path); ++ return ret; ++} ++ + static void + read_device_map (const char *dev_map) + { +@@ -1121,19 +1139,7 @@ + } + } + +-#ifdef __linux__ +- /* On Linux, the devfs uses symbolic links horribly, and that +- confuses the interface very much, so use realpath to expand +- symbolic links. Leave /dev/mapper/ alone, though. */ +- if (strncmp (p, "/dev/mapper/", 12) != 0) +- { +- map[drive].device = xmalloc (PATH_MAX); +- if (! realpath (p, map[drive].device)) +- grub_util_error ("cannot get the real path of `%s'", p); +- } +- else +-#endif +- map[drive].device = xstrdup (p); ++ map[drive].device = canonicalize_device_name (p); + } + + fclose (fp); +@@ -1642,7 +1648,7 @@ + if (convert) + os_disk = convert_system_partition_to_system_disk (os_dev, st); + else +- os_disk = xstrdup (os_dev); ++ os_disk = canonicalize_device_name (os_dev); + if (! os_disk) + return -1; + +@@ -1678,6 +1684,51 @@ + return find_system_device (os_dev, &st, 1, 0) != -1; + } + ++static void ++store_grub_dev (const char *grub_disk, const char *os_disk) ++{ ++ unsigned int i; ++ char *canonical_os_disk; ++ ++ canonical_os_disk = canonicalize_device_name (os_disk); ++ ++ for (i = 0; i < ARRAY_SIZE (map); i++) ++ if (! map[i].device) ++ break; ++ else if (strcmp (map[i].drive, grub_disk) == 0) ++ { ++ if (strcmp (map[i].device, canonical_os_disk) == 0) ++ return; ++ grub_util_error (_("drive `%s' already mapped to `%s'"), ++ map[i].drive, map[i].device); ++ } ++ ++ if (i == ARRAY_SIZE (map)) ++ grub_util_error (_("device count exceeds limit")); ++ ++ map[i].drive = xstrdup (grub_disk); ++ map[i].device = canonical_os_disk; /* steal memory */ ++} ++ ++static int num_hd = 0; ++static int num_fd = 0; ++ ++int ++grub_util_biosdisk_probe_device (const char *name, int is_floppy) ++{ ++ char *grub_disk; ++ ++ if (is_floppy) ++ grub_disk = xasprintf ("fd%d", num_fd++); ++ else ++ grub_disk = xasprintf ("hd%d", num_hd++); ++ ++ store_grub_dev (grub_disk, name); ++ free (grub_disk); ++ ++ return 0; ++} ++ + char * + grub_util_biosdisk_get_grub_dev (const char *os_dev) + { +Index: b/include/grub/emu/hostdisk.h +=================================================================== +--- a/include/grub/emu/hostdisk.h ++++ b/include/grub/emu/hostdisk.h +@@ -24,6 +24,7 @@ + + void grub_util_biosdisk_init (const char *dev_map); + void grub_util_biosdisk_fini (void); ++int grub_util_biosdisk_probe_device (const char *name, int is_floppy); + char *grub_util_biosdisk_get_grub_dev (const char *os_dev); + const char *grub_util_biosdisk_get_osdev (grub_disk_t disk); + int grub_util_biosdisk_is_present (const char *name); +Index: b/util/grub-probe.c +=================================================================== +--- a/util/grub-probe.c ++++ b/util/grub-probe.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -310,6 +311,7 @@ + { + char *dev_map = 0; + char *argument; ++ struct stat dev_map_stat; + + set_program_name (argv[0]); + +@@ -394,6 +396,11 @@ + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (dev_map ? : DEFAULT_DEVICE_MAP); + ++ if (stat (dev_map ? : DEFAULT_DEVICE_MAP, &dev_map_stat) == -1) ++ /* If we don't have a device map, then we won't yet know about the ++ physical volumes underlying this device, so probe all devices. */ ++ grub_util_iterate_devices (grub_util_biosdisk_probe_device, 0); ++ + /* Initialize all modules. */ + grub_init_all (); + +Index: b/util/grub-setup.c +=================================================================== +--- a/util/grub-setup.c ++++ b/util/grub-setup.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + #ifdef GRUB_MACHINE_IEEE1275 + #include + #endif +@@ -867,6 +868,7 @@ + int + main (int argc, char *argv[]) + { ++ struct stat dev_map_stat; + char *root_dev = NULL; + char *dest_dev = NULL; + int must_embed = 0; +@@ -897,6 +899,9 @@ + /* Initialize the emulated biosdisk driver. */ + grub_util_biosdisk_init (arguments.dev_map ? : DEFAULT_DEVICE_MAP); + ++ if (stat (arguments.dev_map ? : DEFAULT_DEVICE_MAP, &dev_map_stat) == -1) ++ grub_util_iterate_devices (grub_util_biosdisk_probe_device, 0); ++ + /* Initialize all modules. */ + grub_init_all (); + --- grub2-1.99.orig/debian/patches/ubuntu_efifwsetup.patch +++ grub2-1.99/debian/patches/ubuntu_efifwsetup.patch @@ -0,0 +1,241 @@ +Description: Add efifwsetup module to reboot into firmware setup menu +Author: Peter Jones +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4575 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4579 +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4575 +Last-Update: 2012-11-05 + +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -488,6 +488,12 @@ + }; + + module = { ++ name = efifwsetup; ++ x86_efi = commands/efi/efifwsetup.c; ++ enable = x86_efi; ++}; ++ ++module = { + name = blocklist; + common = commands/blocklist.c; + }; +Index: b/grub-core/commands/efi/efifwsetup.c +=================================================================== +--- /dev/null ++++ b/grub-core/commands/efi/efifwsetup.c +@@ -0,0 +1,90 @@ ++/* fwsetup.c - Reboot into firmware setup menu. */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2012 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++static grub_err_t ++grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ grub_efi_uint64_t *old_os_indications; ++ grub_efi_uint64_t os_indications = GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI; ++ grub_err_t status; ++ grub_size_t oi_size; ++ grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; ++ ++ old_os_indications = grub_efi_get_variable ("OsIndications", &global, ++ &oi_size); ++ ++ if (old_os_indications != NULL && oi_size == sizeof (os_indications)) ++ os_indications |= *old_os_indications; ++ ++ status = grub_efi_set_variable ("OsIndications", &global, &os_indications, ++ sizeof (os_indications)); ++ if (status != GRUB_ERR_NONE) ++ return status; ++ ++ grub_reboot (); ++ ++ return GRUB_ERR_BUG; ++} ++ ++static grub_command_t cmd = NULL; ++ ++static grub_efi_boolean_t ++efifwsetup_is_supported (void) ++{ ++ grub_efi_uint64_t *os_indications_supported = NULL; ++ grub_size_t oi_size = 0; ++ grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID; ++ ++ os_indications_supported = grub_efi_get_variable ("OsIndicationsSupported", ++ &global, &oi_size); ++ ++ if (!os_indications_supported) ++ return 0; ++ ++ if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI) ++ return 1; ++ ++ return 0; ++} ++ ++GRUB_MOD_INIT (efifwsetup) ++{ ++ if (efifwsetup_is_supported ()) ++ cmd = grub_register_command ("fwsetup", grub_cmd_fwsetup, NULL, ++ N_("Reboot into firmware setup menu.")); ++ ++} ++ ++GRUB_MOD_FINI (efifwsetup) ++{ ++ if (cmd) ++ grub_unregister_command (cmd); ++} +Index: b/grub-core/efiemu/runtime/efiemu.c +=================================================================== +--- a/grub-core/efiemu/runtime/efiemu.c ++++ b/grub-core/efiemu/runtime/efiemu.c +@@ -78,7 +78,7 @@ + + grub_efi_status_t + efiemu_set_variable (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, ++ const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t attributes, + grub_efi_uintn_t data_size, + void *data); +@@ -131,11 +131,11 @@ + + /* Some standard functions because we need to be standalone */ + static void +-efiemu_memcpy (void *to, void *from, int count) ++efiemu_memcpy (void *to, const void *from, int count) + { + int i; + for (i = 0; i < count; i++) +- ((grub_uint8_t *) to)[i] = ((grub_uint8_t *) from)[i]; ++ ((grub_uint8_t *) to)[i] = ((const grub_uint8_t *) from)[i]; + } + + static int +@@ -503,10 +503,10 @@ + + grub_efi_status_t + EFI_FUNC (efiemu_set_variable) (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, +- grub_efi_uint32_t attributes, +- grub_efi_uintn_t data_size, +- void *data) ++ const grub_efi_guid_t *vendor_guid, ++ grub_efi_uint32_t attributes, ++ grub_efi_uintn_t data_size, ++ void *data) + { + struct efi_variable *efivar; + grub_uint8_t *ptr; +Index: b/grub-core/kern/efi/efi.c +=================================================================== +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -193,6 +193,36 @@ + return grub_error (GRUB_ERR_IO, "set_virtual_address_map failed"); + } + ++grub_err_t ++grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid, ++ void *data, grub_size_t datasize) ++{ ++ grub_efi_status_t status; ++ grub_efi_runtime_services_t *r; ++ grub_efi_char16_t *var16; ++ grub_size_t len, len16; ++ ++ len = grub_strlen (var); ++ len16 = len * GRUB_MAX_UTF16_PER_UTF8; ++ var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); ++ if (!var16) ++ return grub_errno; ++ len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); ++ var16[len16] = 0; ++ ++ r = grub_efi_system_table->runtime_services; ++ ++ status = efi_call_5 (r->set_variable, var16, guid, ++ (GRUB_EFI_VARIABLE_NON_VOLATILE ++ | GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS ++ | GRUB_EFI_VARIABLE_RUNTIME_ACCESS), ++ datasize, data); ++ if (status == GRUB_EFI_SUCCESS) ++ return GRUB_ERR_NONE; ++ ++ return grub_error (GRUB_ERR_IO, "could not set EFI variable `%s'", var); ++} ++ + void * + grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + grub_size_t *datasize_out) +Index: b/include/grub/efi/api.h +=================================================================== +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -58,6 +58,8 @@ + #define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 + #define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE 0x00000020 + ++#define GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001ULL ++ + #define GRUB_EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 + #define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 + #define GRUB_EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 +@@ -1033,7 +1035,7 @@ + + grub_efi_status_t + (*set_variable) (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, ++ const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t attributes, + grub_efi_uintn_t data_size, + void *data); +Index: b/include/grub/efi/efi.h +=================================================================== +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -64,6 +64,11 @@ + void *EXPORT_FUNC (grub_efi_get_variable) (const char *variable, + const grub_efi_guid_t *guid, + grub_size_t *datasize_out); ++grub_err_t ++EXPORT_FUNC (grub_efi_set_variable) (const char *var, ++ const grub_efi_guid_t *guid, ++ void *data, ++ grub_size_t datasize); + int + EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, + const grub_efi_device_path_t *dp2); --- grub2-1.99.orig/debian/patches/kfreebsd-9_ada_devices.patch +++ grub2-1.99/debian/patches/kfreebsd-9_ada_devices.patch @@ -0,0 +1,71 @@ +2011-06-16 Robert Millan + + Detect `ataraid' devices on GNU/kFreeBSD. Fix for ATA devices using + `ata' driver on kernel of FreeBSD 9. + + * util/deviceiter.c [__FreeBSD_kernel__] (get_ada_disk_name) + (get_ataraid_disk_name): New functions. + [__FreeBSD_kernel__] (grub_util_iterate_devices): Scan for ataraid + (/dev/ar[0-9]+) and ada (/dev/ada[0-9]+) devices using + get_ataraid_disk_name() and get_ada_disk_name(). + +=== modified file 'util/deviceiter.c' +--- a/util/deviceiter.c ++++ b/util/deviceiter.c +@@ -286,6 +286,20 @@ + #endif + } + ++#ifdef __FreeBSD_kernel__ ++static void ++get_ada_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/ada%d", unit); ++} ++ ++static void ++get_ataraid_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/ar%d", unit); ++} ++#endif ++ + #ifdef __linux__ + static void + get_virtio_disk_name (char *name, int unit) +@@ -620,6 +634,35 @@ + } + } + ++#ifdef __FreeBSD_kernel__ ++ /* IDE disks using ATA Direct Access driver. */ ++ if (get_kfreebsd_version () >= 800000) ++ for (i = 0; i < 96; i++) ++ { ++ char name[16]; ++ ++ get_ada_disk_name (name, i); ++ if (check_device_readable_unique (name)) ++ { ++ if (hook (name, 0)) ++ goto out; ++ } ++ } ++ ++ /* ATARAID disks. */ ++ for (i = 0; i < 8; i++) ++ { ++ char name[20]; ++ ++ get_ataraid_disk_name (name, i); ++ if (check_device_readable_unique (name)) ++ { ++ if (hook (name, 0)) ++ goto out; ++ } ++ } ++#endif ++ + #ifdef __linux__ + /* Virtio disks. */ + for (i = 0; i < 26; i++) --- grub2-1.99.orig/debian/patches/gfxterm_background.patch +++ grub2-1.99/debian/patches/gfxterm_background.patch @@ -0,0 +1,69 @@ +Description: Fix gfxterm background_color regression +Author: Colin Watson +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-06/msg00085.html +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3368 +Last-Update: 2011-06-28 + +Index: b/grub-core/term/gfxterm.c +=================================================================== +--- a/grub-core/term/gfxterm.c ++++ b/grub-core/term/gfxterm.c +@@ -131,6 +131,7 @@ + static unsigned int bitmap_height; + static struct grub_video_bitmap *bitmap; + static int blend_text_bg; ++static grub_video_rgba_color_t default_bg_color = { 0, 0, 0, 0 }; + + static struct grub_dirty_region dirty_region; + +@@ -266,7 +267,8 @@ + + grub_video_set_active_render_target (render_target); + +- virtual_screen.bg_color_display = grub_video_map_rgba(0, 0, 0, 0); ++ virtual_screen.bg_color_display = ++ grub_video_map_rgba_color (default_bg_color); + + /* Clear out text buffer. */ + for (i = 0; i < virtual_screen.columns * virtual_screen.rows; i++) +@@ -338,8 +340,8 @@ + double_redraw = mode_info.mode_type & GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED + && !(mode_info.mode_type & GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP); + +- /* Make sure screen is black. */ +- color = grub_video_map_rgb (0, 0, 0); ++ /* Make sure screen is set to the default background color. */ ++ color = grub_video_map_rgba_color (default_bg_color); + grub_video_fill_rect (color, 0, 0, mode_info.width, mode_info.height); + if (double_redraw) + { +@@ -1189,7 +1191,6 @@ + grub_gfxterm_background_color_cmd (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) + { +- grub_video_rgba_color_t color; + struct grub_video_render_target *old_target; + + if (argc != 1) +@@ -1199,7 +1200,7 @@ + if (grub_video_get_info (NULL) != GRUB_ERR_NONE) + return grub_errno; + +- if (grub_video_parse_color (args[0], &color) != GRUB_ERR_NONE) ++ if (grub_video_parse_color (args[0], &default_bg_color) != GRUB_ERR_NONE) + return grub_errno; + + /* Destroy existing background bitmap if loaded. */ +@@ -1216,9 +1217,10 @@ + compatible with the text layer. */ + grub_video_get_active_render_target (&old_target); + grub_video_set_active_render_target (text_layer); +- virtual_screen.bg_color = grub_video_map_rgba_color (color); ++ virtual_screen.bg_color = grub_video_map_rgba_color (default_bg_color); + grub_video_set_active_render_target (old_target); +- virtual_screen.bg_color_display = grub_video_map_rgba_color (color); ++ virtual_screen.bg_color_display = ++ grub_video_map_rgba_color (default_bg_color); + blend_text_bg = 1; + + /* Mark whole screen as dirty. */ --- grub2-1.99.orig/debian/patches/grub.cfg_400.patch +++ grub2-1.99/debian/patches/grub.cfg_400.patch @@ -0,0 +1,15 @@ +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -293,6 +293,10 @@ + esac + done + ++if [ "x${grub_cfg}" != "x" ] && ! grep "^password " ${grub_cfg}.new >/dev/null; then ++ chmod 444 ${grub_cfg}.new || true ++fi ++ + if test "x${grub_cfg}" != "x" ; then + if ! ${grub_script_check} ${grub_cfg}.new; then + echo "Syntax errors are detected in generated GRUB config file." >&2 --- grub2-1.99.orig/debian/patches/kfreebsd_lvm.patch +++ grub2-1.99/debian/patches/kfreebsd_lvm.patch @@ -0,0 +1,187 @@ +2011-10-09 Robert Millan + + LVM support for FreeBSD and GNU/kFreeBSD. + + * util/lvm.c (grub_util_lvm_isvolume): Enable on FreeBSD and + GNU/kFreeBSD. + (LVM_DEV_MAPPER_STRING): Move from here ... + * include/grub/util/lvm.h (LVM_DEV_MAPPER_STRING): ... to here. + * util/getroot.c: Include `'. + (grub_util_get_dev_abstraction): Enable + grub_util_biosdisk_is_present() on FreeBSD and GNU/kFreeBSD. + Check for LVM abstraction on FreeBSD and GNU/kFreeBSD. + (grub_util_get_grub_dev): Replace "/dev/mapper/" with + `LVM_DEV_MAPPER_STRING'. Enable LVM and mdRAID only on platforms that + support it. + * util/grub-setup.c (main): Check for LVM also on FreeBSD and + GNU/kFreeBSD. + * util/grub.d/10_kfreebsd.in: Load `geom_linux_lvm' kernel module + when LVM abstraction is required for ${GRUB_DEVICE}. + +--- a/grub-core/kern/emu/getroot.c ++++ b/grub-core/kern/emu/getroot.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #ifdef HAVE_DEVICE_MAPPER + # include +@@ -709,11 +710,13 @@ + int + grub_util_get_dev_abstraction (const char *os_dev __attribute__((unused))) + { +-#ifdef __linux__ ++#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + /* User explicitly claims that this drive is visible by BIOS. */ + if (grub_util_biosdisk_is_present (os_dev)) + return GRUB_DEV_ABSTRACTION_NONE; ++#endif + ++#if defined(__linux__) + /* Check for LVM. */ + if (grub_util_is_lvm (os_dev)) + return GRUB_DEV_ABSTRACTION_LVM; +@@ -723,6 +726,12 @@ + return GRUB_DEV_ABSTRACTION_RAID; + #endif + ++#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ++ /* Check for LVM. */ ++ if (!strncmp (os_dev, LVM_DEV_MAPPER_STRING, sizeof(LVM_DEV_MAPPER_STRING)-1)) ++ return GRUB_DEV_ABSTRACTION_LVM; ++#endif ++ + /* No abstraction found. */ + return GRUB_DEV_ABSTRACTION_NONE; + } +@@ -815,11 +824,12 @@ + + switch (grub_util_get_dev_abstraction (os_dev)) + { ++#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + case GRUB_DEV_ABSTRACTION_LVM: + + { + unsigned short i, len; +- grub_size_t offset = sizeof ("/dev/mapper/") - 1; ++ grub_size_t offset = sizeof (LVM_DEV_MAPPER_STRING) - 1; + + len = strlen (os_dev) - offset + 1; + grub_dev = xmalloc (len); +@@ -833,7 +843,9 @@ + } + + break; ++#endif + ++#ifdef __linux__ + case GRUB_DEV_ABSTRACTION_RAID: + + if (os_dev[7] == '_' && os_dev[8] == 'd') +@@ -909,7 +921,6 @@ + else + grub_util_error ("unknown kind of RAID device `%s'", os_dev); + +-#ifdef __linux__ + { + char *mdadm_name = get_mdadm_uuid (os_dev); + struct stat st; +@@ -934,9 +945,8 @@ + free (mdadm_name); + } + } +-#endif /* __linux__ */ +- + break; ++#endif /* __linux__ */ + + default: /* GRUB_DEV_ABSTRACTION_NONE */ + grub_dev = grub_util_biosdisk_get_grub_dev (os_dev); +--- a/include/grub/util/lvm.h ++++ b/include/grub/util/lvm.h +@@ -20,7 +20,14 @@ + #ifndef GRUB_LVM_UTIL_HEADER + #define GRUB_LVM_UTIL_HEADER 1 + ++#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) ++ + #ifdef __linux__ ++#define LVM_DEV_MAPPER_STRING "/dev/mapper/" ++#else ++#define LVM_DEV_MAPPER_STRING "/dev/linux_lvm/" ++#endif ++ + int grub_util_lvm_isvolume (char *name); + #endif + +--- a/util/grub-setup.c ++++ b/util/grub-setup.c +@@ -959,10 +959,12 @@ + arguments.dir ? : DEFAULT_DIRECTORY); + } + +-#ifdef __linux__ ++#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + if (grub_util_lvm_isvolume (root_dev)) + must_embed = 1; ++#endif + ++#ifdef __linux__ + if (root_dev[0] == 'm' && root_dev[1] == 'd' + && ((root_dev[2] >= '0' && root_dev[2] <= '9') || root_dev[2] == '/')) + { +--- a/util/grub.d/10_kfreebsd.in ++++ b/util/grub.d/10_kfreebsd.in +@@ -98,6 +98,23 @@ + + load_kfreebsd_module acpi true + ++ for abstraction in dummy $(grub-probe -t abstraction --device ${GRUB_DEVICE}) ; do ++ case $abstraction in ++ lvm) load_kfreebsd_module geom_linux_lvm false ;; ++ esac ++ done ++ ++ case "$(grub-probe -t abstraction --device ${GRUB_DEVICE})" in ++ lvm) ++ test -e "${module_dir}/geom_linux_lvm.ko" ++ ++ printf '%s\n' "${prepare_module_dir_cache}" ++ cat << EOF ++ kfreebsd_module_elf ${module_dir_rel}/geom_linux_lvm.ko ++EOF ++ ;; ++ esac ++ + case "${kfreebsd_fs}" in + zfs) + load_kfreebsd_module opensolaris false +--- a/util/lvm.c ++++ b/util/lvm.c +@@ -17,8 +17,7 @@ + * along with GRUB. If not, see . + */ + +-/* We only support LVM on Linux. */ +-#ifdef __linux__ ++#if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + #include + #include + #include +@@ -26,8 +25,6 @@ + #include + #include + +-#define LVM_DEV_MAPPER_STRING "/dev/mapper/" +- + int + grub_util_lvm_isvolume (char *name) + { +@@ -49,4 +46,4 @@ + return 1; + } + +-#endif /* ! __linux__ */ ++#endif --- grub2-1.99.orig/debian/patches/mkrescue_efi_modules.patch +++ grub2-1.99/debian/patches/mkrescue_efi_modules.patch @@ -0,0 +1,22 @@ +Description: Build part_msdos and vfat into EFI boot images +Author: Mario Limonciello +Bug-Ubuntu: https://bugs.launchpad.net/bugs/677758 +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-01/msg00028.html +Last-Update: 2011-04-11 + +Index: b/util/grub-mkrescue.in +=================================================================== +--- a/util/grub-mkrescue.in ++++ b/util/grub-mkrescue.in +@@ -288,9 +288,9 @@ + mkdir -p "${efi_dir}/efi/boot" + + # build bootx64.efi +- make_image "${efi64_dir}" x86_64-efi "${efi_dir}"/efi/boot/bootx64.efi "" ++ make_image "${efi64_dir}" x86_64-efi "${efi_dir}"/efi/boot/bootx64.efi "part_msdos fat" + # build bootia32.efi +- make_image "${efi32_dir}" i386-efi "${efi_dir}"/efi/boot/bootia32.efi "" ++ make_image "${efi32_dir}" i386-efi "${efi_dir}"/efi/boot/bootia32.efi "part_msdos fat" + if [ -e "${efi_dir}"/efi/boot/bootia32.efi ]; then + # For old macs. Suggested by Peter Jones. + cp "${efi_dir}"/efi/boot/bootia32.efi "${efi_dir}"/efi/boot/boot.efi --- grub2-1.99.orig/debian/patches/ubuntu_recovery_nomodeset.patch +++ grub2-1.99/debian/patches/ubuntu_recovery_nomodeset.patch @@ -0,0 +1,35 @@ +Description: Set nomodeset for recovery mode + Also disable 'set gfxpayload=keep' even if the system normally supports it. + . + https://launchpad.net/ubuntu/+spec/desktop-o-xorg-tools-and-processes +Author: Colin Watson +Forwarded: no +Last-Update: 2011-05-23 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -93,11 +93,11 @@ + EOF + if ! ${recovery} ; then + save_default_entry | sed -e "s/^/\t/" +- fi + +- cat << EOF ++ cat << EOF + gfxmode \$linux_gfx_mode + EOF ++ fi + + cat << EOF + insmod gzio +@@ -244,7 +244,7 @@ + quiet + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then + linux_entry "${OS}" "${version}" true \ +- "single ${GRUB_CMDLINE_LINUX}" ++ "single nomodeset ${GRUB_CMDLINE_LINUX}" + fi + + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` --- grub2-1.99.orig/debian/patches/core_in_fs.patch +++ grub2-1.99/debian/patches/core_in_fs.patch @@ -0,0 +1,31 @@ +Index: b/util/grub-setup.c +=================================================================== +--- a/util/grub-setup.c ++++ b/util/grub-setup.c +@@ -76,6 +76,7 @@ + + #define DEFAULT_BOOT_FILE "boot.img" + #define DEFAULT_CORE_FILE "core.img" ++#define CORE_IMG_IN_FS "setup_left_core_image_in_filesystem" + + #ifdef GRUB_MACHINE_SPARC64 + #define grub_target_to_host16(x) grub_be_to_cpu16(x) +@@ -489,6 +490,8 @@ + + grub_free (sectors); + ++ unlink (DEFAULT_DIRECTORY "/" CORE_IMG_IN_FS); ++ + goto finish; + } + #endif +@@ -514,6 +517,9 @@ + /* The core image must be put on a filesystem unfortunately. */ + grub_util_info ("will leave the core image on the filesystem"); + ++ fp = fopen (DEFAULT_DIRECTORY "/" CORE_IMG_IN_FS, "w"); ++ fclose (fp); ++ + /* Make sure that GRUB reads the identical image as the OS. */ + tmp_img = xmalloc (core_size); + core_path_dev_full = grub_util_get_path (dir, core_file); --- grub2-1.99.orig/debian/patches/xfs_invalid_bmap.patch +++ grub2-1.99/debian/patches/xfs_invalid_bmap.patch @@ -0,0 +1,188 @@ +Description: Rewrite XFS btree parsing; fixes invalid BMAP +Author: Vladimir Serbinenko +Bug: http://savannah.gnu.org/bugs/?34213 +Bug-Debian: http://bugs.debian.org/657776 +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3443 +Last-Update: 2012-01-29 + +Index: b/grub-core/fs/xfs.c +=================================================================== +--- a/grub-core/fs/xfs.c ++++ b/grub-core/fs/xfs.c +@@ -111,7 +111,9 @@ + grub_uint64_t nblocks; + grub_uint32_t extsize; + grub_uint32_t nextents; +- grub_uint8_t unused3[20]; ++ grub_uint16_t unused3; ++ grub_uint8_t fork_offset; ++ grub_uint8_t unused4[17]; + union + { + char raw[156]; +@@ -145,7 +147,7 @@ + grub_disk_t disk; + int pos; + int bsize; +- int agsize; ++ grub_uint32_t agsize; + struct grub_fshelp_node diropen; + }; + +@@ -159,33 +161,67 @@ + #define FILETYPE_INO_DIRECTORY 0040000 + #define FILETYPE_INO_SYMLINK 0120000 + +-#define GRUB_XFS_INO_AGBITS(data) \ +- ((data)->sblock.log2_agblk + (data)->sblock.log2_inop) +-#define GRUB_XFS_INO_INOINAG(data, ino) \ +- (grub_be_to_cpu64 (ino) & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1)) +-#define GRUB_XFS_INO_AG(data,ino) \ +- (grub_be_to_cpu64 (ino) >> GRUB_XFS_INO_AGBITS (data)) +- +-#define GRUB_XFS_FSB_TO_BLOCK(data, fsb) \ +- (((fsb) >> (data)->sblock.log2_agblk) * (data)->agsize \ +- + ((fsb) & ((1LL << (data)->sblock.log2_agblk) - 1))) +- +-#define GRUB_XFS_EXTENT_OFFSET(exts,ex) \ +- ((grub_be_to_cpu32 (exts[ex][0]) & ~(1 << 31)) << 23 \ +- | grub_be_to_cpu32 (exts[ex][1]) >> 9) +- +-#define GRUB_XFS_EXTENT_BLOCK(exts,ex) \ +- ((grub_uint64_t) (grub_be_to_cpu32 (exts[ex][1]) \ +- & (0x1ff)) << 43 \ +- | (grub_uint64_t) grub_be_to_cpu32 (exts[ex][2]) << 11 \ +- | grub_be_to_cpu32 (exts[ex][3]) >> 21) +- +-#define GRUB_XFS_EXTENT_SIZE(exts,ex) \ +- (grub_be_to_cpu32 (exts[ex][3]) & ((1 << 20) - 1)) +- +-#define GRUB_XFS_ROUND_TO_DIRENT(pos) ((((pos) + 8 - 1) / 8) * 8) +-#define GRUB_XFS_NEXT_DIRENT(pos,len) \ +- (pos) + GRUB_XFS_ROUND_TO_DIRENT (8 + 1 + len + 2) ++static inline int ++GRUB_XFS_INO_AGBITS(struct grub_xfs_data *data) ++{ ++ return ((data)->sblock.log2_agblk + (data)->sblock.log2_inop); ++} ++ ++static inline grub_uint64_t ++GRUB_XFS_INO_INOINAG (struct grub_xfs_data *data, ++ grub_uint64_t ino) ++{ ++ return (grub_be_to_cpu64 (ino) & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1)); ++} ++ ++static inline grub_uint64_t ++GRUB_XFS_INO_AG (struct grub_xfs_data *data, ++ grub_uint64_t ino) ++{ ++ return (grub_be_to_cpu64 (ino) >> GRUB_XFS_INO_AGBITS (data)); ++} ++ ++static inline grub_disk_addr_t ++GRUB_XFS_FSB_TO_BLOCK (struct grub_xfs_data *data, grub_disk_addr_t fsb) ++{ ++ return ((fsb >> data->sblock.log2_agblk) * data->agsize ++ + (fsb & ((1LL << data->sblock.log2_agblk) - 1))); ++} ++ ++static inline grub_uint64_t ++GRUB_XFS_EXTENT_OFFSET (grub_xfs_extent *exts, int ex) ++{ ++ return ((grub_be_to_cpu32 (exts[ex][0]) & ~(1 << 31)) << 23 ++ | grub_be_to_cpu32 (exts[ex][1]) >> 9); ++} ++ ++static inline grub_uint64_t ++GRUB_XFS_EXTENT_BLOCK (grub_xfs_extent *exts, int ex) ++{ ++ return ((grub_uint64_t) (grub_be_to_cpu32 (exts[ex][1]) ++ & (0x1ff)) << 43 ++ | (grub_uint64_t) grub_be_to_cpu32 (exts[ex][2]) << 11 ++ | grub_be_to_cpu32 (exts[ex][3]) >> 21); ++} ++ ++static inline grub_uint64_t ++GRUB_XFS_EXTENT_SIZE (grub_xfs_extent *exts, int ex) ++{ ++ return (grub_be_to_cpu32 (exts[ex][3]) & ((1 << 20) - 1)); ++} ++ ++static inline int ++GRUB_XFS_ROUND_TO_DIRENT (int pos) ++{ ++ return ((((pos) + 8 - 1) / 8) * 8); ++} ++ ++static inline int ++GRUB_XFS_NEXT_DIRENT (int pos, int len) ++{ ++ return (pos) + GRUB_XFS_ROUND_TO_DIRENT (8 + 1 + len + 2); ++} ++ + + static inline grub_uint64_t + grub_xfs_inode_block (struct grub_xfs_data *data, +@@ -241,13 +277,23 @@ + if (node->inode.format == XFS_INODE_FORMAT_BTREE) + { + grub_uint64_t *keys; ++ int recoffset; + +- leaf = grub_malloc (node->data->sblock.bsize); ++ leaf = grub_malloc (node->data->bsize); + if (leaf == 0) + return 0; + + nrec = grub_be_to_cpu16 (node->inode.data.btree.numrecs); + keys = &node->inode.data.btree.keys[0]; ++ if (node->inode.fork_offset) ++ recoffset = (node->inode.fork_offset ++ - ((char *) &node->inode.data.btree.keys - (char *) &node->inode)) ++ / (2 * sizeof (grub_uint64_t)); ++ else ++ recoffset = ((1 << node->data->sblock.log2_inode) ++ - ((char *) &node->inode.data.btree.keys ++ - (char *) &node->inode)) ++ / (2 * sizeof (grub_uint64_t)); + do + { + int i; +@@ -264,12 +310,9 @@ + grub_free (leaf); + return 0; + } +- + if (grub_disk_read (node->data->disk, +- grub_be_to_cpu64 (keys[i - 1 + nrec]) +- << (node->data->sblock.log2_bsize +- - GRUB_DISK_SECTOR_BITS), +- 0, node->data->sblock.bsize, leaf)) ++ GRUB_XFS_FSB_TO_BLOCK (node->data, grub_be_to_cpu64 (keys[i - 1 + recoffset])) << (node->data->sblock.log2_bsize - GRUB_DISK_SECTOR_BITS), ++ 0, node->data->bsize, leaf)) + return 0; + + if (grub_strncmp ((char *) leaf->magic, "BMAP", 4)) +@@ -281,7 +324,11 @@ + + nrec = grub_be_to_cpu16 (leaf->numrecs); + keys = &leaf->keys[0]; +- } while (leaf->level); ++ recoffset = ((node->data->bsize - ((char *) &leaf->keys ++ - (char *) leaf)) ++ / (2 * sizeof (grub_uint64_t))); ++ } ++ while (leaf->level); + exts = (grub_xfs_extent *) keys; + } + else if (node->inode.format == XFS_INODE_FORMAT_EXT) +@@ -328,7 +375,7 @@ + grub_xfs_read_file (grub_fshelp_node_t node, + void NESTED_FUNC_ATTR (*read_hook) (grub_disk_addr_t sector, + unsigned offset, unsigned length), +- int pos, grub_size_t len, char *buf) ++ grub_off_t pos, grub_size_t len, char *buf) + { + return grub_fshelp_read_file (node->data->disk, node, read_hook, + pos, len, buf, grub_xfs_read_block, --- grub2-1.99.orig/debian/patches/mkconfig_skip_readme.patch +++ grub2-1.99/debian/patches/mkconfig_skip_readme.patch @@ -0,0 +1,20 @@ +Description: Skip */README* as well as README* +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/537123 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3422 +Last-Update: 2011-09-05 + +Index: b/util/grub-mkconfig_lib.in +=================================================================== +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -171,7 +171,7 @@ + if test -f "$1" ; then + case "$1" in + *.dpkg-*) return 1 ;; # debian dpkg +- README*) return 1 ;; # documentation ++ README*|*/README*) return 1 ;; # documentation + esac + else + return 1 --- grub2-1.99.orig/debian/patches/ubuntu_normal_quiet.patch +++ grub2-1.99/debian/patches/ubuntu_normal_quiet.patch @@ -0,0 +1,62 @@ +Description: Reduce visual clutter in normal mode + Don't display introductory message about line editing unless we're actually + offering a shell prompt. (This is believed to be a workaround for a + different bug. We'll go with this for now, but will drop this in favour of + a better fix upstream if somebody figures out what that is.) + . + Don't clear the screen just before booting if we never drew the menu in the + first place. +Author: Colin Watson +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2009-09/msg00056.html +Last-Update: 2011-01-05 + +Index: b/grub-core/normal/main.c +=================================================================== +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -384,6 +384,13 @@ + grub_normal_read_line_real (char **line, int cont, int nested) + { + const char *prompt; ++ static int displayed_intro; ++ ++ if (! displayed_intro) ++ { ++ grub_normal_reader_init (nested); ++ displayed_intro = 1; ++ } + + if (cont) + prompt = ">"; +@@ -430,8 +437,6 @@ + return; + } + +- grub_normal_reader_init (nested); +- + while (1) + { + char *line; +Index: b/grub-core/normal/menu.c +=================================================================== +--- a/grub-core/normal/menu.c ++++ b/grub-core/normal/menu.c +@@ -721,6 +721,7 @@ + int boot_entry; + grub_menu_entry_t e; + int auto_boot; ++ int initial_timeout = grub_menu_get_timeout (); + + boot_entry = run_menu (menu, nested, &auto_boot); + if (boot_entry < 0) +@@ -730,7 +731,9 @@ + if (! e) + continue; /* Menu is empty. */ + +- grub_cls (); ++ /* Only clear the screen if we drew the menu in the first place. */ ++ if (initial_timeout != 0) ++ grub_cls (); + + if (auto_boot) + grub_menu_execute_with_fallback (menu, e, autobooted, --- grub2-1.99.orig/debian/patches/lazy_stat.patch +++ grub2-1.99/debian/patches/lazy_stat.patch @@ -0,0 +1,73 @@ +Description: Don't stat devices unless we have to +Author: Vladimir Serbinenko +Author: Colin Watson +Bug-Debian: http://bugs.debian.org/627587 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3318 +Last-Update: 2011-05-31 + +Index: b/grub-core/kern/emu/getroot.c +=================================================================== +--- a/grub-core/kern/emu/getroot.c ++++ b/grub-core/kern/emu/getroot.c +@@ -358,7 +358,7 @@ + + if (S_ISLNK (st.st_mode)) { + #ifdef __linux__ +- if (strcmp (dir, "mapper") == 0) { ++ if (strcmp (dir, "mapper") == 0 || strcmp (dir, "/dev/mapper") == 0) { + /* Follow symbolic links under /dev/mapper/; the canonical name + may be something like /dev/dm-0, but the names under + /dev/mapper/ are more human-readable and so we prefer them if +@@ -609,20 +609,27 @@ + + if (os_dev) + { +- if (stat (os_dev, &st) >= 0) +- dev = st.st_rdev; +- else +- grub_util_error ("cannot stat `%s'", os_dev); +- free (os_dev); ++ char *tmp = os_dev; ++ os_dev = canonicalize_file_name (os_dev); ++ free (tmp); + } +- else ++ ++ if (os_dev) + { +- if (stat (dir, &st) >= 0) +- dev = st.st_dev; +- else +- grub_util_error ("cannot stat `%s'", dir); ++ if (strncmp (os_dev, "/dev/dm-", sizeof ("/dev/dm-") - 1) != 0) ++ return os_dev; ++ if (stat (os_dev, &st) < 0) ++ grub_util_error ("cannot stat `%s'", os_dev); ++ free (os_dev); ++ dev = st.st_rdev; ++ return grub_find_device ("/dev/mapper", dev); + } + ++ if (stat (dir, &st) < 0) ++ grub_util_error ("cannot stat `%s'", dir); ++ ++ dev = st.st_dev; ++ + #ifdef __CYGWIN__ + /* Cygwin specific function. */ + os_dev = grub_find_device (dir, dev); +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -1420,7 +1420,8 @@ + if (tree) + dm_tree_free (tree); + free (path); +- char *ret = grub_find_device (NULL, (major << 8) | minor); ++ char *ret = grub_find_device ("/dev/mapper", ++ (major << 8) | minor); + return ret; + } + --- grub2-1.99.orig/debian/patches/ubuntu_efi_supporting_backports.patch +++ grub2-1.99/debian/patches/ubuntu_efi_supporting_backports.patch @@ -0,0 +1,730 @@ +Description: Backport several changes to support Secure Boot patches + Improve Unicode compliance and unify some UTF-8 code paths. + . + Add grub_efi_get_variable function. + . + Update Linux boot protocol headers to 2.10. + . + Define ALIGN_UP_OVERHEAD. +Author: Vladimir Serbinenko +Author: Matthew Garrett +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3620 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3720 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3722 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3736 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3858 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4017 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4019 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4020 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4104 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4105 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4107 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4115 +Forwarded: not-needed +Last-Update: 2012-11-05 + +Index: b/grub-core/efiemu/runtime/efiemu.c +=================================================================== +--- a/grub-core/efiemu/runtime/efiemu.c ++++ b/grub-core/efiemu/runtime/efiemu.c +@@ -66,7 +66,7 @@ + + grub_efi_status_t + efiemu_get_variable (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, ++ const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t *attributes, + grub_efi_uintn_t *data_size, + void *data); +@@ -155,7 +155,7 @@ + } + + static int +-efiemu_memequal (void *a, void *b, grub_size_t n) ++efiemu_memequal (const void *a, const void *b, grub_size_t n) + { + grub_uint8_t *ptr1, *ptr2; + for (ptr1 = (grub_uint8_t *) a, ptr2 = (grub_uint8_t *)b; +@@ -416,7 +416,7 @@ + + /* Find variable by name and GUID. */ + static struct efi_variable * +-find_variable (grub_efi_guid_t *vendor_guid, ++find_variable (const grub_efi_guid_t *vendor_guid, + grub_efi_char16_t *variable_name) + { + grub_uint8_t *ptr; +@@ -438,10 +438,10 @@ + + grub_efi_status_t + EFI_FUNC (efiemu_get_variable) (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, +- grub_efi_uint32_t *attributes, +- grub_efi_uintn_t *data_size, +- void *data) ++ const grub_efi_guid_t *vendor_guid, ++ grub_efi_uint32_t *attributes, ++ grub_efi_uintn_t *data_size, ++ void *data) + { + struct efi_variable *efivar; + LOG ('g'); +Index: b/grub-core/kern/efi/efi.c +=================================================================== +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -193,6 +193,54 @@ + return grub_error (GRUB_ERR_IO, "set_virtual_address_map failed"); + } + ++void * ++grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out) ++{ ++ grub_efi_status_t status; ++ grub_efi_uintn_t datasize = 0; ++ grub_efi_runtime_services_t *r; ++ grub_efi_char16_t *var16; ++ void *data; ++ grub_size_t len, len16; ++ ++ *datasize_out = 0; ++ ++ len = grub_strlen (var); ++ len16 = len * GRUB_MAX_UTF16_PER_UTF8; ++ var16 = grub_malloc ((len16 + 1) * sizeof (var16[0])); ++ if (!var16) ++ return NULL; ++ len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL); ++ var16[len16] = 0; ++ ++ r = grub_efi_system_table->runtime_services; ++ ++ status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, NULL); ++ ++ if (!datasize) ++ return NULL; ++ ++ data = grub_malloc (datasize); ++ if (!data) ++ { ++ grub_free (var16); ++ return NULL; ++ } ++ ++ status = efi_call_5 (r->get_variable, var16, guid, NULL, &datasize, data); ++ grub_free (var16); ++ ++ if (status == GRUB_EFI_SUCCESS) ++ { ++ *datasize_out = datasize; ++ return data; ++ } ++ ++ grub_free (data); ++ return NULL; ++} ++ + grub_uint32_t + grub_get_rtc (void) + { +Index: b/grub-core/normal/charset.c +=================================================================== +--- a/grub-core/normal/charset.c ++++ b/grub-core/normal/charset.c +@@ -42,13 +42,6 @@ + Most underline diacritics aren't displayed in gfxterm + */ + +-/* Convert a (possibly null-terminated) UTF-8 string of at most SRCSIZE +- bytes (if SRCSIZE is -1, it is ignored) in length to a UTF-16 string. +- Return the number of characters converted. DEST must be able to hold +- at least DESTSIZE characters. If an invalid sequence is found, return -1. +- If SRCEND is not NULL, then *SRCEND is set to the next byte after the +- last byte used in SRC. */ +- + #include + #include + #include +@@ -60,84 +53,51 @@ + #include "widthspec.h" + #endif + ++/* Returns -2 if not enough space, -1 on invalid character. */ + grub_ssize_t +-grub_utf8_to_utf16 (grub_uint16_t *dest, grub_size_t destsize, +- const grub_uint8_t *src, grub_size_t srcsize, +- const grub_uint8_t **srcend) ++grub_encode_utf8_character (grub_uint8_t *dest, grub_uint8_t *destend, ++ grub_uint32_t code) + { +- grub_uint16_t *p = dest; +- int count = 0; +- grub_uint32_t code = 0; +- +- if (srcend) +- *srcend = src; +- +- while (srcsize && destsize) ++ if (dest >= destend) ++ return -2; ++ if (code <= 0x007F) + { +- grub_uint32_t c = *src++; +- if (srcsize != (grub_size_t)-1) +- srcsize--; +- if (count) +- { +- if ((c & GRUB_UINT8_2_LEADINGBITS) != GRUB_UINT8_1_LEADINGBIT) +- { +- /* invalid */ +- return -1; +- } +- else +- { +- code <<= 6; +- code |= (c & GRUB_UINT8_6_TRAILINGBITS); +- count--; +- } +- } +- else +- { +- if (c == 0) +- break; +- +- if ((c & GRUB_UINT8_1_LEADINGBIT) == 0) +- code = c; +- else if ((c & GRUB_UINT8_3_LEADINGBITS) == GRUB_UINT8_2_LEADINGBITS) +- { +- count = 1; +- code = c & GRUB_UINT8_5_TRAILINGBITS; +- } +- else if ((c & GRUB_UINT8_4_LEADINGBITS) == GRUB_UINT8_3_LEADINGBITS) +- { +- count = 2; +- code = c & GRUB_UINT8_4_TRAILINGBITS; +- } +- else if ((c & GRUB_UINT8_5_LEADINGBITS) == GRUB_UINT8_4_LEADINGBITS) +- { +- count = 3; +- code = c & GRUB_UINT8_3_TRAILINGBITS; +- } +- else +- return -1; +- } +- +- if (count == 0) +- { +- if (destsize < 2 && code >= GRUB_UCS2_LIMIT) +- break; +- if (code >= GRUB_UCS2_LIMIT) +- { +- *p++ = GRUB_UTF16_UPPER_SURROGATE (code); +- *p++ = GRUB_UTF16_LOWER_SURROGATE (code); +- destsize -= 2; +- } +- else +- { +- *p++ = code; +- destsize--; +- } +- } ++ *dest++ = code; ++ return 1; + } ++ if (code <= 0x07FF) ++ { ++ if (dest + 1 >= destend) ++ return -2; ++ *dest++ = (code >> 6) | 0xC0; ++ *dest++ = (code & 0x3F) | 0x80; ++ return 2; ++ } ++ if ((code >= 0xDC00 && code <= 0xDFFF) ++ || (code >= 0xD800 && code <= 0xDBFF)) ++ { ++ /* No surrogates in UCS-4... */ ++ return -1; ++ } ++ if (code < 0x10000) ++ { ++ if (dest + 2 >= destend) ++ return -2; ++ *dest++ = (code >> 12) | 0xE0; ++ *dest++ = ((code >> 6) & 0x3F) | 0x80; ++ *dest++ = (code & 0x3F) | 0x80; ++ return 3; ++ } ++ { ++ if (dest + 3 >= destend) ++ return -2; ++ *dest++ = (code >> 18) | 0xF0; ++ *dest++ = ((code >> 12) & 0x3F) | 0x80; ++ *dest++ = ((code >> 6) & 0x3F) | 0x80; ++ *dest++ = (code & 0x3F) | 0x80; ++ return 4; ++ } + +- if (srcend) +- *srcend = src; +- return p - dest; + } + + /* Convert UCS-4 to UTF-8. */ +@@ -151,39 +111,16 @@ + while (size-- && dest < destend) + { + grub_uint32_t code = *src++; +- +- if (code <= 0x007F) +- *dest++ = code; +- else if (code <= 0x07FF) +- { +- if (dest + 1 >= destend) +- break; +- *dest++ = (code >> 6) | 0xC0; +- *dest++ = (code & 0x3F) | 0x80; +- } +- else if ((code >= 0xDC00 && code <= 0xDFFF) +- || (code >= 0xD800 && code <= 0xDBFF)) ++ grub_ssize_t s; ++ s = grub_encode_utf8_character (dest, destend, code); ++ if (s == -2) ++ break; ++ if (s == -1) + { +- /* No surrogates in UCS-4... */ + *dest++ = '?'; ++ continue; + } +- else if (code < 0x10000) +- { +- if (dest + 2 >= destend) +- break; +- *dest++ = (code >> 12) | 0xE0; +- *dest++ = ((code >> 6) & 0x3F) | 0x80; +- *dest++ = (code & 0x3F) | 0x80; +- } +- else +- { +- if (dest + 3 >= destend) +- break; +- *dest++ = (code >> 18) | 0xF0; +- *dest++ = ((code >> 12) & 0x3F) | 0x80; +- *dest++ = ((code >> 6) & 0x3F) | 0x80; +- *dest++ = (code & 0x3F) | 0x80; +- } ++ dest += s; + } + *dest = 0; + } +@@ -230,53 +167,21 @@ + int + grub_is_valid_utf8 (const grub_uint8_t *src, grub_size_t srcsize) + { +- grub_uint32_t code = 0; + int count = 0; ++ grub_uint32_t code = 0; + + while (srcsize) + { +- grub_uint32_t c = *src++; + if (srcsize != (grub_size_t)-1) + srcsize--; +- if (count) +- { +- if ((c & 0xc0) != 0x80) +- { +- /* invalid */ +- return 0; +- } +- else +- { +- code <<= 6; +- code |= (c & 0x3f); +- count--; +- } +- } +- else +- { +- if (c == 0) +- break; +- +- if ((c & 0x80) == 0x00) +- code = c; +- else if ((c & 0xe0) == 0xc0) +- { +- count = 1; +- code = c & 0x1f; +- } +- else if ((c & 0xf0) == 0xe0) +- { +- count = 2; +- code = c & 0x0f; +- } +- else if ((c & 0xf8) == 0xf0) +- { +- count = 3; +- code = c & 0x07; +- } +- else +- return 0; +- } ++ if (!grub_utf8_process (*src++, &code, &count)) ++ return 0; ++ if (count != 0) ++ continue; ++ if (code == 0) ++ return 1; ++ if (code > GRUB_UNICODE_LAST_VALID) ++ return 0; + } + + return 1; +@@ -322,63 +227,23 @@ + + while (srcsize && destsize) + { +- grub_uint32_t c = *src++; ++ int was_count = count; + if (srcsize != (grub_size_t)-1) + srcsize--; +- if (count) ++ if (!grub_utf8_process (*src++, &code, &count)) + { +- if ((c & 0xc0) != 0x80) +- { +- /* invalid */ +- code = '?'; +- /* Character c may be valid, don't eat it. */ +- src--; +- if (srcsize != (grub_size_t)-1) +- srcsize++; +- count = 0; +- } +- else +- { +- code <<= 6; +- code |= (c & 0x3f); +- count--; +- } +- } +- else +- { +- if (c == 0) +- break; +- +- if ((c & 0x80) == 0x00) +- code = c; +- else if ((c & 0xe0) == 0xc0) +- { +- count = 1; +- code = c & 0x1f; +- } +- else if ((c & 0xf0) == 0xe0) +- { +- count = 2; +- code = c & 0x0f; +- } +- else if ((c & 0xf8) == 0xf0) +- { +- count = 3; +- code = c & 0x07; +- } +- else +- { +- /* invalid */ +- code = '?'; +- count = 0; +- } +- } +- +- if (count == 0) +- { +- *p++ = code; +- destsize--; +- } ++ code = '?'; ++ count = 0; ++ /* Character c may be valid, don't eat it. */ ++ if (was_count) ++ src--; ++ } ++ if (count != 0) ++ continue; ++ if (code == 0) ++ break; ++ *p++ = code; ++ destsize--; + } + + if (srcend) +Index: b/include/grub/charset.h +=================================================================== +--- a/include/grub/charset.h ++++ b/include/grub/charset.h +@@ -36,16 +36,121 @@ + #define GRUB_UINT8_5_TRAILINGBITS 0x1f + #define GRUB_UINT8_6_TRAILINGBITS 0x3f + ++/* You need at least one UTF-8 byte to have one UTF-16 word. ++ You need at least three UTF-8 bytes to have 2 UTF-16 words (surrogate pairs). ++ */ ++#define GRUB_MAX_UTF16_PER_UTF8 1 ++ + #define GRUB_UCS2_LIMIT 0x10000 + #define GRUB_UTF16_UPPER_SURROGATE(code) \ + (0xD800 + ((((code) - GRUB_UCS2_LIMIT) >> 12) & 0xfff)) + #define GRUB_UTF16_LOWER_SURROGATE(code) \ + (0xDC00 + (((code) - GRUB_UCS2_LIMIT) & 0xfff)) + +-grub_ssize_t ++/* Process one character from UTF8 sequence. ++ At beginning set *code = 0, *count = 0. Returns 0 on failure and ++ 1 on success. *count holds the number of trailing bytes. */ ++static inline int ++grub_utf8_process (grub_uint8_t c, grub_uint32_t *code, int *count) ++{ ++ if (*count) ++ { ++ if ((c & GRUB_UINT8_2_LEADINGBITS) != GRUB_UINT8_1_LEADINGBIT) ++ { ++ *count = 0; ++ /* invalid */ ++ return 0; ++ } ++ else ++ { ++ *code <<= 6; ++ *code |= (c & GRUB_UINT8_6_TRAILINGBITS); ++ (*count)--; ++ return 1; ++ } ++ } ++ ++ if ((c & GRUB_UINT8_1_LEADINGBIT) == 0) ++ { ++ *code = c; ++ return 1; ++ } ++ if ((c & GRUB_UINT8_3_LEADINGBITS) == GRUB_UINT8_2_LEADINGBITS) ++ { ++ *count = 1; ++ *code = c & GRUB_UINT8_5_TRAILINGBITS; ++ return 1; ++ } ++ if ((c & GRUB_UINT8_4_LEADINGBITS) == GRUB_UINT8_3_LEADINGBITS) ++ { ++ *count = 2; ++ *code = c & GRUB_UINT8_4_TRAILINGBITS; ++ return 1; ++ } ++ if ((c & GRUB_UINT8_5_LEADINGBITS) == GRUB_UINT8_4_LEADINGBITS) ++ { ++ *count = 3; ++ *code = c & GRUB_UINT8_3_TRAILINGBITS; ++ return 1; ++ } ++ return 0; ++} ++ ++ ++/* Convert a (possibly null-terminated) UTF-8 string of at most SRCSIZE ++ bytes (if SRCSIZE is -1, it is ignored) in length to a UTF-16 string. ++ Return the number of characters converted. DEST must be able to hold ++ at least DESTSIZE characters. If an invalid sequence is found, return -1. ++ If SRCEND is not NULL, then *SRCEND is set to the next byte after the ++ last byte used in SRC. */ ++static inline grub_size_t + grub_utf8_to_utf16 (grub_uint16_t *dest, grub_size_t destsize, + const grub_uint8_t *src, grub_size_t srcsize, +- const grub_uint8_t **srcend); ++ const grub_uint8_t **srcend) ++{ ++ grub_uint16_t *p = dest; ++ int count = 0; ++ grub_uint32_t code = 0; ++ ++ if (srcend) ++ *srcend = src; ++ ++ while (srcsize && destsize) ++ { ++ int was_count = count; ++ if (srcsize != (grub_size_t)-1) ++ srcsize--; ++ if (!grub_utf8_process (*src++, &code, &count)) ++ { ++ code = '?'; ++ count = 0; ++ /* Character c may be valid, don't eat it. */ ++ if (was_count) ++ src--; ++ } ++ if (count != 0) ++ continue; ++ if (code == 0) ++ break; ++ if (destsize < 2 && code >= GRUB_UCS2_LIMIT) ++ break; ++ if (code >= GRUB_UCS2_LIMIT) ++ { ++ *p++ = GRUB_UTF16_UPPER_SURROGATE (code); ++ *p++ = GRUB_UTF16_LOWER_SURROGATE (code); ++ destsize -= 2; ++ } ++ else ++ { ++ *p++ = code; ++ destsize--; ++ } ++ } ++ ++ if (srcend) ++ *srcend = src; ++ return p - dest; ++} + + /* Convert UTF-16 to UTF-8. */ + static inline grub_uint8_t * +@@ -74,6 +179,8 @@ + { + /* Error... */ + *dest++ = '?'; ++ /* *src may be valid. Don't eat it. */ ++ src--; + } + + code_high = 0; +@@ -124,11 +231,16 @@ + + int grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg, + grub_uint32_t **last_position); ++ + void + grub_ucs4_to_utf8 (grub_uint32_t *src, grub_size_t size, + grub_uint8_t *dest, grub_size_t destsize); + grub_size_t grub_utf8_to_ucs4 (grub_uint32_t *dest, grub_size_t destsize, + const grub_uint8_t *src, grub_size_t srcsize, + const grub_uint8_t **srcend); ++/* Returns -2 if not enough space, -1 on invalid character. */ ++grub_ssize_t ++grub_encode_utf8_character (grub_uint8_t *dest, grub_uint8_t *destend, ++ grub_uint32_t code); + + #endif +Index: b/include/grub/efi/api.h +=================================================================== +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -1015,9 +1015,13 @@ + grub_efi_status_t + (*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address); + ++#define GRUB_EFI_GLOBAL_VARIABLE_GUID \ ++ { 0x8BE4DF61, 0x93CA, 0x11d2, { 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B,0x8C }} ++ ++ + grub_efi_status_t + (*get_variable) (grub_efi_char16_t *variable_name, +- grub_efi_guid_t *vendor_guid, ++ const grub_efi_guid_t *vendor_guid, + grub_efi_uint32_t *attributes, + grub_efi_uintn_t *data_size, + void *data); +Index: b/include/grub/efi/efi.h +=================================================================== +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -61,7 +61,9 @@ + grub_efi_uintn_t descriptor_size, + grub_efi_uint32_t descriptor_version, + grub_efi_memory_descriptor_t *virtual_map); +- ++void *EXPORT_FUNC (grub_efi_get_variable) (const char *variable, ++ const grub_efi_guid_t *guid, ++ grub_size_t *datasize_out); + int + EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, + const grub_efi_device_path_t *dp2); +Index: b/include/grub/i386/linux.h +=================================================================== +--- a/include/grub/i386/linux.h ++++ b/include/grub/i386/linux.h +@@ -86,7 +86,7 @@ + GRUB_VIDEO_LINUX_TYPE_SIMPLE = 0x70 /* Linear framebuffer without any additional functions. */ + }; + +-/* For the Linux/i386 boot protocol version 2.03. */ ++/* For the Linux/i386 boot protocol version 2.10. */ + struct linux_kernel_header + { + grub_uint8_t code1[0x0020]; +@@ -131,8 +131,16 @@ + grub_uint32_t initrd_addr_max; /* Highest address for initrd */ + grub_uint32_t kernel_alignment; + grub_uint8_t relocatable; +- grub_uint8_t pad[3]; ++ grub_uint8_t min_alignment; ++ grub_uint8_t pad[2]; + grub_uint32_t cmdline_size; ++ grub_uint32_t hardware_subarch; ++ grub_uint64_t hardware_subarch_data; ++ grub_uint32_t payload_offset; ++ grub_uint32_t payload_length; ++ grub_uint64_t setup_data; ++ grub_uint64_t pref_address; ++ grub_uint32_t init_size; + } __attribute__ ((packed)); + + /* Boot parameters for Linux based on 2.6.12. This is used by the setup +@@ -276,10 +284,20 @@ + grub_uint32_t ramdisk_size; /* initrd size */ + grub_uint32_t bootsect_kludge; /* obsolete */ + grub_uint16_t heap_end_ptr; /* Free memory after setup end */ +- grub_uint16_t pad1; /* Unused */ ++ grub_uint8_t ext_loader_ver; /* Extended loader version */ ++ grub_uint8_t ext_loader_type; /* Extended loader type */ + grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ +- +- grub_uint8_t pad2[164]; /* 22c */ ++ grub_uint32_t initrd_addr_max; /* Maximum initrd address */ ++ grub_uint32_t kernel_alignment; /* Alignment of the kernel */ ++ grub_uint8_t relocatable_kernel; /* Is the kernel relocatable */ ++ grub_uint8_t pad1[3]; ++ grub_uint32_t cmdline_size; /* Size of the kernel command line */ ++ grub_uint32_t hardware_subarch; ++ grub_uint64_t hardware_subarch_data; ++ grub_uint32_t payload_offset; ++ grub_uint32_t payload_length; ++ grub_uint64_t setup_data; ++ grub_uint8_t pad2[120]; /* 258 */ + struct grub_e820_mmap e820_map[GRUB_E820_MAX_ENTRY]; /* 2d0 */ + + } __attribute__ ((packed)); +Index: b/include/grub/misc.h +=================================================================== +--- a/include/grub/misc.h ++++ b/include/grub/misc.h +@@ -43,6 +43,7 @@ + + #define ALIGN_UP(addr, align) \ + ((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1)) ++#define ALIGN_UP_OVERHEAD(addr, align) ((-(addr)) & ((typeof (addr)) (align) - 1)) + #define ALIGN_DOWN(addr, align) \ + ((addr) & ~((typeof (addr)) align - 1)) + #define ARRAY_SIZE(array) (sizeof (array) / sizeof (array[0])) +Index: b/include/grub/unicode.h +=================================================================== +--- a/include/grub/unicode.h ++++ b/include/grub/unicode.h +@@ -207,7 +207,8 @@ + GRUB_UNICODE_VARIATION_SELECTOR_1 = 0xfe00, + GRUB_UNICODE_VARIATION_SELECTOR_16 = 0xfe0f, + GRUB_UNICODE_VARIATION_SELECTOR_17 = 0xe0100, +- GRUB_UNICODE_VARIATION_SELECTOR_256 = 0xe01ef ++ GRUB_UNICODE_VARIATION_SELECTOR_256 = 0xe01ef, ++ GRUB_UNICODE_LAST_VALID = 0x10ffff + }; + + extern struct grub_unicode_compact_range grub_unicode_compact[]; --- grub2-1.99.orig/debian/patches/ubuntu_langpacks.patch +++ grub2-1.99/debian/patches/ubuntu_langpacks.patch @@ -0,0 +1,19 @@ +Description: Prefer translations from language packs +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/537998 +Forwarded: not-needed +Last-Update: 2010-03-22 + +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -436,7 +436,7 @@ + + # Copy gettext files + mkdir -p "${grubdir}"/locale/ +-for dir in "${localedir}"/*; do ++for dir in "${localedir}"/* "${localedir}-langpack"/*; do + if test -f "$dir/LC_MESSAGES/grub.mo"; then + cp -f "$dir/LC_MESSAGES/grub.mo" "${grubdir}/locale/${dir##*/}.mo" + fi --- grub2-1.99.orig/debian/patches/branch_parse-color.patch +++ grub2-1.99/debian/patches/branch_parse-color.patch @@ -0,0 +1,1310 @@ +Description: Add a background_color command + Move gfxmenu color handling to video, so that gfxterm can use it too; add a + background_color command. +Author: Colin Watson +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/parse-color/ +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2010-12/msg00045.html +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3308 +Last-Update: 2011-05-19 + +Index: b/ChangeLog.parse-color +=================================================================== +--- /dev/null ++++ b/ChangeLog.parse-color +@@ -0,0 +1,44 @@ ++2010-12-23 Colin Watson ++ ++ Move gfxmenu color handling to video, so that gfxterm can use it ++ too. ++ ++ * grub-core/gfxmenu/named_colors.c: Move to ... ++ * grub-core/video/colors.c: ... here. Rename ++ grub_gui_get_named_color to grub_video_get_named_color. ++ * grub-core/gfxmenu/gui_string_util.c (my_isxdigit): Move to ... ++ * grub-core/video/colors.c (my_isxdigit): ... here. ++ * grub-core/gfxmenu/gui_string_util.c (parse_hex_color_component): ++ Move to ... ++ * grub-core/video/colors.c (parse_hex_color_component): ... here. ++ * grub-core/gfxmenu/gui_string_util.c (grub_gui_parse_color): Move ++ to ... ++ * grub-core/video/colors.c (grub_video_parse_color): ... here. ++ ++ * include/grub/gui.h (grub_gui_color_t): Move to ... ++ * include/grub/video.h (grub_video_rgba_color_t): ... here. ++ * include/grub/gui.h (grub_gui_color_rgb): Move to ... ++ * include/grub/video.h (grub_video_rgba_color_rgb): ... here. ++ * include/grub/gui.h (grub_gui_map_color): Move to ... ++ * include/grub/video.h (grub_video_map_rgba_color): ... here. ++ * include/grub/gui_string_util.h (grub_gui_get_named_color): Move ++ to ... ++ * include/grub/video.h (grub_video_get_named_color): ... here. ++ * include/grub/gui_string_util.h (grub_gui_parse_color): Move to ... ++ * include/grub/video.h (grub_video_parse_color): ... here. ++ ++ * grub-core/Makefile.core.def (kernel) [videoinkernel]: Add ++ video/colors.c. ++ (gfxmenu): Remove gfxmenu/named_colors.c. ++ (video) [videomodules]: Add video/colors.c. ++ ++ Add a background_color command. ++ ++ * grub-core/term/gfxterm.c (grub_gfxterm_background_color_cmd): New ++ function. ++ (GRUB_MOD_INIT): Register background_color command. ++ (GRUB_MOD_FINI): Unregister background_color command. ++ (redraw_screen_rect): Allow blend/replace of text layer to be ++ controlled independently from whether there is a background bitmap. ++ (grub_gfxterm_background_image_cmd): Change blend_text_bg when ++ changing bitmap. +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -178,6 +178,7 @@ + videoinkernel = io/bufio.c; + videoinkernel = video/bitmap.c; + videoinkernel = video/bitmap_scale.c; ++ videoinkernel = video/colors.c; + videoinkernel = video/fb/fbblit.c; + videoinkernel = video/fb/fbfill.c; + videoinkernel = video/fb/fbutil.c; +@@ -1056,7 +1057,6 @@ + common = gfxmenu/gui_progress_bar.c; + common = gfxmenu/gui_util.c; + common = gfxmenu/gui_string_util.c; +- common = gfxmenu/named_colors.c; + }; + + module = { +@@ -1463,6 +1463,7 @@ + module = { + name = video; + common = video/video.c; ++ common = video/colors.c; + enable = videomodules; + }; + +Index: b/grub-core/gfxmenu/gui_label.c +=================================================================== +--- a/grub-core/gfxmenu/gui_label.c ++++ b/grub-core/gfxmenu/gui_label.c +@@ -48,7 +48,7 @@ + char *text; + char *template; + grub_font_t font; +- grub_gui_color_t color; ++ grub_video_rgba_color_t color; + int value; + enum align_mode align; + }; +@@ -107,7 +107,7 @@ + grub_gui_set_viewport (&self->bounds, &vpsave); + grub_font_draw_string (self->text, + self->font, +- grub_gui_map_color (self->color), ++ grub_video_map_rgba_color (self->color), + left_x, + grub_font_get_ascent (self->font)); + grub_gui_restore_viewport (&vpsave); +@@ -186,7 +186,7 @@ + } + else if (grub_strcmp (name, "color") == 0) + { +- grub_gui_parse_color (value, &self->color); ++ grub_video_parse_color (value, &self->color); + } + else if (grub_strcmp (name, "align") == 0) + { +Index: b/grub-core/gfxmenu/gui_list.c +=================================================================== +--- a/grub-core/gfxmenu/gui_list.c ++++ b/grub-core/gfxmenu/gui_list.c +@@ -41,9 +41,9 @@ + int item_spacing; + grub_font_t item_font; + grub_font_t selected_item_font; +- grub_gui_color_t item_color; ++ grub_video_rgba_color_t item_color; + int selected_item_color_set; +- grub_gui_color_t selected_item_color; ++ grub_video_rgba_color_t selected_item_color; + + int draw_scrollbar; + int need_to_recreate_scrollbar; +@@ -269,13 +269,13 @@ + (is_selected && self->selected_item_font + ? self->selected_item_font + : self->item_font); +- grub_gui_color_t text_color = ++ grub_video_rgba_color_t text_color = + ((is_selected && self->selected_item_color_set) + ? self->selected_item_color + : self->item_color); + grub_font_draw_string (item_title, + font, +- grub_gui_map_color (text_color), ++ grub_video_map_rgba_color (text_color), + sel_leftpad + self->icon_width + icon_text_space, + (item_top + (item_height - (ascent + descent)) + / 2 + ascent)); +@@ -431,7 +431,7 @@ + } + else if (grub_strcmp (name, "item_color") == 0) + { +- grub_gui_parse_color (value, &self->item_color); ++ grub_video_parse_color (value, &self->item_color); + } + else if (grub_strcmp (name, "selected_item_color") == 0) + { +@@ -441,7 +441,7 @@ + } + else + { +- if (grub_gui_parse_color (value, &self->selected_item_color) ++ if (grub_video_parse_color (value, &self->selected_item_color) + == GRUB_ERR_NONE) + self->selected_item_color_set = 1; + } +@@ -564,7 +564,7 @@ + { + list_impl_t self; + grub_font_t default_font; +- grub_gui_color_t default_fg_color; ++ grub_video_rgba_color_t default_fg_color; + + self = grub_zalloc (sizeof (*self)); + if (! self) +@@ -576,7 +576,7 @@ + self->visible = 1; + + default_font = grub_font_get ("Unknown Regular 16"); +- default_fg_color = grub_gui_color_rgb (0, 0, 0); ++ default_fg_color = grub_video_rgba_color_rgb (0, 0, 0); + + self->icon_width = 32; + self->icon_height = 32; +Index: b/grub-core/gfxmenu/gui_progress_bar.c +=================================================================== +--- a/grub-core/gfxmenu/gui_progress_bar.c ++++ b/grub-core/gfxmenu/gui_progress_bar.c +@@ -40,10 +40,10 @@ + int show_text; + char *template; + grub_font_t font; +- grub_gui_color_t text_color; +- grub_gui_color_t border_color; +- grub_gui_color_t bg_color; +- grub_gui_color_t fg_color; ++ grub_video_rgba_color_t text_color; ++ grub_video_rgba_color_t border_color; ++ grub_video_rgba_color_t bg_color; ++ grub_video_rgba_color_t fg_color; + + char *theme_dir; + int need_to_recreate_pixmaps; +@@ -109,7 +109,7 @@ + f.height = self->bounds.height - 2; + + /* Border. */ +- grub_video_fill_rect (grub_gui_map_color (self->border_color), ++ grub_video_fill_rect (grub_video_map_rgba_color (self->border_color), + f.x - 1, f.y - 1, + f.width + 2, f.height + 2); + +@@ -117,12 +117,12 @@ + int barwidth = (f.width + * (self->value - self->start) + / (self->end - self->start)); +- grub_video_fill_rect (grub_gui_map_color (self->bg_color), ++ grub_video_fill_rect (grub_video_map_rgba_color (self->bg_color), + f.x + barwidth, f.y, + f.width - barwidth, f.height); + + /* Bar foreground. */ +- grub_video_fill_rect (grub_gui_map_color (self->fg_color), ++ grub_video_fill_rect (grub_video_map_rgba_color (self->fg_color), + f.x, f.y, + barwidth, f.height); + } +@@ -161,7 +161,8 @@ + if (self->template) + { + grub_font_t font = self->font; +- grub_video_color_t text_color = grub_gui_map_color (self->text_color); ++ grub_video_color_t text_color = ++ grub_video_map_rgba_color (self->text_color); + int width = self->bounds.width; + int height = self->bounds.height; + char *text; +@@ -298,19 +299,19 @@ + } + else if (grub_strcmp (name, "text_color") == 0) + { +- grub_gui_parse_color (value, &self->text_color); ++ grub_video_parse_color (value, &self->text_color); + } + else if (grub_strcmp (name, "border_color") == 0) + { +- grub_gui_parse_color (value, &self->border_color); ++ grub_video_parse_color (value, &self->border_color); + } + else if (grub_strcmp (name, "bg_color") == 0) + { +- grub_gui_parse_color (value, &self->bg_color); ++ grub_video_parse_color (value, &self->bg_color); + } + else if (grub_strcmp (name, "fg_color") == 0) + { +- grub_gui_parse_color (value, &self->fg_color); ++ grub_video_parse_color (value, &self->fg_color); + } + else if (grub_strcmp (name, "bar_style") == 0) + { +@@ -379,9 +380,9 @@ + self->progress.component.ops = &progress_bar_ops; + self->visible = 1; + self->font = grub_font_get ("Unknown Regular 16"); +- grub_gui_color_t black = { .red = 0, .green = 0, .blue = 0, .alpha = 255 }; +- grub_gui_color_t gray = { .red = 128, .green = 128, .blue = 128, .alpha = 255 }; +- grub_gui_color_t lightgray = { .red = 200, .green = 200, .blue = 200, .alpha = 255 }; ++ grub_video_rgba_color_t black = { .red = 0, .green = 0, .blue = 0, .alpha = 255 }; ++ grub_video_rgba_color_t gray = { .red = 128, .green = 128, .blue = 128, .alpha = 255 }; ++ grub_video_rgba_color_t lightgray = { .red = 200, .green = 200, .blue = 200, .alpha = 255 }; + self->text_color = black; + self->border_color = black; + self->bg_color = gray; +Index: b/grub-core/gfxmenu/gui_string_util.c +=================================================================== +--- a/grub-core/gfxmenu/gui_string_util.c ++++ b/grub-core/gfxmenu/gui_string_util.c +@@ -204,124 +204,3 @@ + + return grub_new_substring (file_path, 0, last_slash + 1); + } +- +-static __inline int +-my_isxdigit (char c) +-{ +- return ((c >= '0' && c <= '9') +- || (c >= 'a' && c <= 'f') +- || (c >= 'A' && c <= 'F')); +-} +- +-static int +-parse_hex_color_component (const char *s, unsigned start, unsigned end) +-{ +- unsigned len; +- char buf[3]; +- +- len = end - start; +- /* Check the limits so we don't overrun the buffer. */ +- if (len < 1 || len > 2) +- return 0; +- +- if (len == 1) +- { +- buf[0] = s[start]; /* Get the first and only hex digit. */ +- buf[1] = buf[0]; /* Duplicate the hex digit. */ +- } +- else if (len == 2) +- { +- buf[0] = s[start]; +- buf[1] = s[start + 1]; +- } +- +- buf[2] = '\0'; +- +- return grub_strtoul (buf, 0, 16); +-} +- +-/* Parse a color string of the form "r, g, b", "#RGB", "#RGBA", +- "#RRGGBB", or "#RRGGBBAA". */ +-grub_err_t +-grub_gui_parse_color (const char *s, grub_gui_color_t *color) +-{ +- grub_gui_color_t c; +- +- /* Skip whitespace. */ +- while (*s && grub_isspace (*s)) +- s++; +- +- if (*s == '#') +- { +- /* HTML-style. Number if hex digits: +- [6] #RRGGBB [3] #RGB +- [8] #RRGGBBAA [4] #RGBA */ +- +- s++; /* Skip the '#'. */ +- /* Count the hexits to determine the format. */ +- int hexits = 0; +- const char *end = s; +- while (my_isxdigit (*end)) +- { +- end++; +- hexits++; +- } +- +- /* Parse the color components based on the format. */ +- if (hexits == 3 || hexits == 4) +- { +- c.red = parse_hex_color_component (s, 0, 1); +- c.green = parse_hex_color_component (s, 1, 2); +- c.blue = parse_hex_color_component (s, 2, 3); +- if (hexits == 4) +- c.alpha = parse_hex_color_component (s, 3, 4); +- else +- c.alpha = 255; +- } +- else if (hexits == 6 || hexits == 8) +- { +- c.red = parse_hex_color_component (s, 0, 2); +- c.green = parse_hex_color_component (s, 2, 4); +- c.blue = parse_hex_color_component (s, 4, 6); +- if (hexits == 8) +- c.alpha = parse_hex_color_component (s, 6, 8); +- else +- c.alpha = 255; +- } +- else +- return grub_error (GRUB_ERR_BAD_ARGUMENT, +- "invalid HTML-type color string `%s'", s); +- } +- else if (grub_isdigit (*s)) +- { +- /* Comma separated decimal values. */ +- c.red = grub_strtoul (s, 0, 0); +- if ((s = grub_strchr (s, ',')) == 0) +- return grub_error (GRUB_ERR_BAD_ARGUMENT, +- "missing 1st comma separator in color `%s'", s); +- s++; +- c.green = grub_strtoul (s, 0, 0); +- if ((s = grub_strchr (s, ',')) == 0) +- return grub_error (GRUB_ERR_BAD_ARGUMENT, +- "missing 2nd comma separator in color `%s'", s); +- s++; +- c.blue = grub_strtoul (s, 0, 0); +- if ((s = grub_strchr (s, ',')) == 0) +- c.alpha = 255; +- else +- { +- s++; +- c.alpha = grub_strtoul (s, 0, 0); +- } +- } +- else +- { +- if (! grub_gui_get_named_color (s, &c)) +- return grub_error (GRUB_ERR_BAD_ARGUMENT, +- "invalid named color `%s'", s); +- } +- +- if (grub_errno == GRUB_ERR_NONE) +- *color = c; +- return grub_errno; +-} +Index: b/grub-core/gfxmenu/named_colors.c +=================================================================== +--- a/grub-core/gfxmenu/named_colors.c ++++ /dev/null +@@ -1,209 +0,0 @@ +-/* named_colors.c - Named color values. */ +-/* +- * GRUB -- GRand Unified Bootloader +- * Copyright (C) 2008 Free Software Foundation, Inc. +- * +- * GRUB 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 3 of the License, or +- * (at your option) any later version. +- * +- * GRUB 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 GRUB. If not, see . +- */ +- +-#include +-#include +-#include +-#include +- +-struct named_color +-{ +- const char *name; +- grub_gui_color_t color; +-}; +- +-/* +- Named color list generated from the list of SVG color keywords from +- , +- processed through the following Perl command: +- perl -ne 'chomp;split;print "{ \"$_[0]\", RGB_COLOR($_[2]) },\n"' +- */ +- +-#define RGB_COLOR(r,g,b) {.red = r, .green = g, .blue = b, .alpha = 255} +- +-static struct named_color named_colors[] = +-{ +- { "aliceblue", RGB_COLOR(240,248,255) }, +- { "antiquewhite", RGB_COLOR(250,235,215) }, +- { "aqua", RGB_COLOR(0,255,255) }, +- { "aquamarine", RGB_COLOR(127,255,212) }, +- { "azure", RGB_COLOR(240,255,255) }, +- { "beige", RGB_COLOR(245,245,220) }, +- { "bisque", RGB_COLOR(255,228,196) }, +- { "black", RGB_COLOR(0,0,0) }, +- { "blanchedalmond", RGB_COLOR(255,235,205) }, +- { "blue", RGB_COLOR(0,0,255) }, +- { "blueviolet", RGB_COLOR(138,43,226) }, +- { "brown", RGB_COLOR(165,42,42) }, +- { "burlywood", RGB_COLOR(222,184,135) }, +- { "cadetblue", RGB_COLOR(95,158,160) }, +- { "chartreuse", RGB_COLOR(127,255,0) }, +- { "chocolate", RGB_COLOR(210,105,30) }, +- { "coral", RGB_COLOR(255,127,80) }, +- { "cornflowerblue", RGB_COLOR(100,149,237) }, +- { "cornsilk", RGB_COLOR(255,248,220) }, +- { "crimson", RGB_COLOR(220,20,60) }, +- { "cyan", RGB_COLOR(0,255,255) }, +- { "darkblue", RGB_COLOR(0,0,139) }, +- { "darkcyan", RGB_COLOR(0,139,139) }, +- { "darkgoldenrod", RGB_COLOR(184,134,11) }, +- { "darkgray", RGB_COLOR(169,169,169) }, +- { "darkgreen", RGB_COLOR(0,100,0) }, +- { "darkgrey", RGB_COLOR(169,169,169) }, +- { "darkkhaki", RGB_COLOR(189,183,107) }, +- { "darkmagenta", RGB_COLOR(139,0,139) }, +- { "darkolivegreen", RGB_COLOR(85,107,47) }, +- { "darkorange", RGB_COLOR(255,140,0) }, +- { "darkorchid", RGB_COLOR(153,50,204) }, +- { "darkred", RGB_COLOR(139,0,0) }, +- { "darksalmon", RGB_COLOR(233,150,122) }, +- { "darkseagreen", RGB_COLOR(143,188,143) }, +- { "darkslateblue", RGB_COLOR(72,61,139) }, +- { "darkslategray", RGB_COLOR(47,79,79) }, +- { "darkslategrey", RGB_COLOR(47,79,79) }, +- { "darkturquoise", RGB_COLOR(0,206,209) }, +- { "darkviolet", RGB_COLOR(148,0,211) }, +- { "deeppink", RGB_COLOR(255,20,147) }, +- { "deepskyblue", RGB_COLOR(0,191,255) }, +- { "dimgray", RGB_COLOR(105,105,105) }, +- { "dimgrey", RGB_COLOR(105,105,105) }, +- { "dodgerblue", RGB_COLOR(30,144,255) }, +- { "firebrick", RGB_COLOR(178,34,34) }, +- { "floralwhite", RGB_COLOR(255,250,240) }, +- { "forestgreen", RGB_COLOR(34,139,34) }, +- { "fuchsia", RGB_COLOR(255,0,255) }, +- { "gainsboro", RGB_COLOR(220,220,220) }, +- { "ghostwhite", RGB_COLOR(248,248,255) }, +- { "gold", RGB_COLOR(255,215,0) }, +- { "goldenrod", RGB_COLOR(218,165,32) }, +- { "gray", RGB_COLOR(128,128,128) }, +- { "green", RGB_COLOR(0,128,0) }, +- { "greenyellow", RGB_COLOR(173,255,47) }, +- { "grey", RGB_COLOR(128,128,128) }, +- { "honeydew", RGB_COLOR(240,255,240) }, +- { "hotpink", RGB_COLOR(255,105,180) }, +- { "indianred", RGB_COLOR(205,92,92) }, +- { "indigo", RGB_COLOR(75,0,130) }, +- { "ivory", RGB_COLOR(255,255,240) }, +- { "khaki", RGB_COLOR(240,230,140) }, +- { "lavender", RGB_COLOR(230,230,250) }, +- { "lavenderblush", RGB_COLOR(255,240,245) }, +- { "lawngreen", RGB_COLOR(124,252,0) }, +- { "lemonchiffon", RGB_COLOR(255,250,205) }, +- { "lightblue", RGB_COLOR(173,216,230) }, +- { "lightcoral", RGB_COLOR(240,128,128) }, +- { "lightcyan", RGB_COLOR(224,255,255) }, +- { "lightgoldenrodyellow", RGB_COLOR(250,250,210) }, +- { "lightgray", RGB_COLOR(211,211,211) }, +- { "lightgreen", RGB_COLOR(144,238,144) }, +- { "lightgrey", RGB_COLOR(211,211,211) }, +- { "lightpink", RGB_COLOR(255,182,193) }, +- { "lightsalmon", RGB_COLOR(255,160,122) }, +- { "lightseagreen", RGB_COLOR(32,178,170) }, +- { "lightskyblue", RGB_COLOR(135,206,250) }, +- { "lightslategray", RGB_COLOR(119,136,153) }, +- { "lightslategrey", RGB_COLOR(119,136,153) }, +- { "lightsteelblue", RGB_COLOR(176,196,222) }, +- { "lightyellow", RGB_COLOR(255,255,224) }, +- { "lime", RGB_COLOR(0,255,0) }, +- { "limegreen", RGB_COLOR(50,205,50) }, +- { "linen", RGB_COLOR(250,240,230) }, +- { "magenta", RGB_COLOR(255,0,255) }, +- { "maroon", RGB_COLOR(128,0,0) }, +- { "mediumaquamarine", RGB_COLOR(102,205,170) }, +- { "mediumblue", RGB_COLOR(0,0,205) }, +- { "mediumorchid", RGB_COLOR(186,85,211) }, +- { "mediumpurple", RGB_COLOR(147,112,219) }, +- { "mediumseagreen", RGB_COLOR(60,179,113) }, +- { "mediumslateblue", RGB_COLOR(123,104,238) }, +- { "mediumspringgreen", RGB_COLOR(0,250,154) }, +- { "mediumturquoise", RGB_COLOR(72,209,204) }, +- { "mediumvioletred", RGB_COLOR(199,21,133) }, +- { "midnightblue", RGB_COLOR(25,25,112) }, +- { "mintcream", RGB_COLOR(245,255,250) }, +- { "mistyrose", RGB_COLOR(255,228,225) }, +- { "moccasin", RGB_COLOR(255,228,181) }, +- { "navajowhite", RGB_COLOR(255,222,173) }, +- { "navy", RGB_COLOR(0,0,128) }, +- { "oldlace", RGB_COLOR(253,245,230) }, +- { "olive", RGB_COLOR(128,128,0) }, +- { "olivedrab", RGB_COLOR(107,142,35) }, +- { "orange", RGB_COLOR(255,165,0) }, +- { "orangered", RGB_COLOR(255,69,0) }, +- { "orchid", RGB_COLOR(218,112,214) }, +- { "palegoldenrod", RGB_COLOR(238,232,170) }, +- { "palegreen", RGB_COLOR(152,251,152) }, +- { "paleturquoise", RGB_COLOR(175,238,238) }, +- { "palevioletred", RGB_COLOR(219,112,147) }, +- { "papayawhip", RGB_COLOR(255,239,213) }, +- { "peachpuff", RGB_COLOR(255,218,185) }, +- { "peru", RGB_COLOR(205,133,63) }, +- { "pink", RGB_COLOR(255,192,203) }, +- { "plum", RGB_COLOR(221,160,221) }, +- { "powderblue", RGB_COLOR(176,224,230) }, +- { "purple", RGB_COLOR(128,0,128) }, +- { "red", RGB_COLOR(255,0,0) }, +- { "rosybrown", RGB_COLOR(188,143,143) }, +- { "royalblue", RGB_COLOR(65,105,225) }, +- { "saddlebrown", RGB_COLOR(139,69,19) }, +- { "salmon", RGB_COLOR(250,128,114) }, +- { "sandybrown", RGB_COLOR(244,164,96) }, +- { "seagreen", RGB_COLOR(46,139,87) }, +- { "seashell", RGB_COLOR(255,245,238) }, +- { "sienna", RGB_COLOR(160,82,45) }, +- { "silver", RGB_COLOR(192,192,192) }, +- { "skyblue", RGB_COLOR(135,206,235) }, +- { "slateblue", RGB_COLOR(106,90,205) }, +- { "slategray", RGB_COLOR(112,128,144) }, +- { "slategrey", RGB_COLOR(112,128,144) }, +- { "snow", RGB_COLOR(255,250,250) }, +- { "springgreen", RGB_COLOR(0,255,127) }, +- { "steelblue", RGB_COLOR(70,130,180) }, +- { "tan", RGB_COLOR(210,180,140) }, +- { "teal", RGB_COLOR(0,128,128) }, +- { "thistle", RGB_COLOR(216,191,216) }, +- { "tomato", RGB_COLOR(255,99,71) }, +- { "turquoise", RGB_COLOR(64,224,208) }, +- { "violet", RGB_COLOR(238,130,238) }, +- { "wheat", RGB_COLOR(245,222,179) }, +- { "white", RGB_COLOR(255,255,255) }, +- { "whitesmoke", RGB_COLOR(245,245,245) }, +- { "yellow", RGB_COLOR(255,255,0) }, +- { "yellowgreen", RGB_COLOR(154,205,50) }, +- { 0, { 0, 0, 0, 0 } } /* Terminator. */ +-}; +- +-/* Get the color named NAME. If the color was found, returns 1 and +- stores the color into *COLOR. If the color was not found, returns 0 and +- does not modify *COLOR. */ +-int +-grub_gui_get_named_color (const char *name, +- grub_gui_color_t *color) +-{ +- int i; +- for (i = 0; named_colors[i].name; i++) +- { +- if (grub_strcmp (named_colors[i].name, name) == 0) +- { +- *color = named_colors[i].color; +- return 1; +- } +- } +- return 0; +-} +Index: b/grub-core/gfxmenu/theme_loader.c +=================================================================== +--- a/grub-core/gfxmenu/theme_loader.c ++++ b/grub-core/gfxmenu/theme_loader.c +@@ -135,11 +135,11 @@ + return grub_errno; + } + else if (! grub_strcmp ("title-color", name)) +- grub_gui_parse_color (value, &view->title_color); ++ grub_video_parse_color (value, &view->title_color); + else if (! grub_strcmp ("message-color", name)) +- grub_gui_parse_color (value, &view->message_color); ++ grub_video_parse_color (value, &view->message_color); + else if (! grub_strcmp ("message-bg-color", name)) +- grub_gui_parse_color (value, &view->message_bg_color); ++ grub_video_parse_color (value, &view->message_bg_color); + else if (! grub_strcmp ("desktop-image", name)) + { + struct grub_video_bitmap *raw_bitmap; +@@ -170,7 +170,7 @@ + view->desktop_image = scaled_bitmap; + } + else if (! grub_strcmp ("desktop-color", name)) +- grub_gui_parse_color (value, &view->desktop_color); ++ grub_video_parse_color (value, &view->desktop_color); + else if (! grub_strcmp ("terminal-box", name)) + { + grub_err_t err; +Index: b/grub-core/gfxmenu/view.c +=================================================================== +--- a/grub-core/gfxmenu/view.c ++++ b/grub-core/gfxmenu/view.c +@@ -50,8 +50,8 @@ + { + grub_gfxmenu_view_t view; + grub_font_t default_font; +- grub_gui_color_t default_fg_color; +- grub_gui_color_t default_bg_color; ++ grub_video_rgba_color_t default_fg_color; ++ grub_video_rgba_color_t default_bg_color; + + view = grub_malloc (sizeof (*view)); + if (! view) +@@ -63,8 +63,8 @@ + view->screen.height = height; + + default_font = grub_font_get ("Unknown Regular 16"); +- default_fg_color = grub_gui_color_rgb (0, 0, 0); +- default_bg_color = grub_gui_color_rgb (255, 255, 255); ++ default_fg_color = grub_video_rgba_color_rgb (0, 0, 0); ++ default_bg_color = grub_video_rgba_color_rgb (255, 255, 255); + + view->canvas = 0; + +@@ -131,7 +131,7 @@ + } + else + { +- grub_video_fill_rect (grub_gui_map_color (view->desktop_color), ++ grub_video_fill_rect (grub_video_map_rgba_color (view->desktop_color), + bounds->x, bounds->y, + bounds->width, bounds->height); + } +@@ -150,7 +150,7 @@ + int y = 40 + grub_font_get_ascent (view->title_font); + grub_font_draw_string (view->title_text, + view->title_font, +- grub_gui_map_color (view->title_color), ++ grub_video_map_rgba_color (view->title_color), + x, y); + } + +@@ -244,13 +244,13 @@ + return; + + grub_font_t font = view->message_font; +- grub_video_color_t color = grub_gui_map_color (view->message_color); ++ grub_video_color_t color = grub_video_map_rgba_color (view->message_color); + + /* Border. */ + grub_video_fill_rect (color, + f.x-1, f.y-1, f.width+2, f.height+2); + /* Fill. */ +- grub_video_fill_rect (grub_gui_map_color (view->message_bg_color), ++ grub_video_fill_rect (grub_video_map_rgba_color (view->message_bg_color), + f.x, f.y, f.width, f.height); + + /* Center the text. */ +Index: b/grub-core/term/gfxterm.c +=================================================================== +--- a/grub-core/term/gfxterm.c ++++ b/grub-core/term/gfxterm.c +@@ -130,6 +130,7 @@ + static unsigned int bitmap_width; + static unsigned int bitmap_height; + static struct grub_video_bitmap *bitmap; ++static int blend_text_bg; + + static struct grub_dirty_region dirty_region; + +@@ -476,26 +477,27 @@ + /* Render background layer. */ + grub_video_fill_rect (color, x, ty, width, h); + } +- +- /* Render text layer as blended. */ +- grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, x, y, +- x - virtual_screen.offset_x, +- y - virtual_screen.offset_y, +- width, height); + } + else + { + /* Render background layer. */ + color = virtual_screen.bg_color_display; + grub_video_fill_rect (color, x, y, width, height); +- +- /* Render text layer as replaced (to get texts background color). */ +- grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_REPLACE, x, y, +- x - virtual_screen.offset_x, +- y - virtual_screen.offset_y, +- width, height); + } + ++ if (blend_text_bg) ++ /* Render text layer as blended. */ ++ grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, x, y, ++ x - virtual_screen.offset_x, ++ y - virtual_screen.offset_y, ++ width, height); ++ else ++ /* Render text layer as replaced (to get texts background color). */ ++ grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_REPLACE, x, y, ++ x - virtual_screen.offset_x, ++ y - virtual_screen.offset_y, ++ width, height); ++ + /* Restore saved viewport. */ + grub_video_set_viewport (saved_view.x, saved_view.y, + saved_view.width, saved_view.height); +@@ -1127,6 +1129,7 @@ + { + grub_video_bitmap_destroy (bitmap); + bitmap = 0; ++ blend_text_bg = 0; + + /* Mark whole screen as dirty. */ + dirty_region_add (0, 0, window.width, window.height); +@@ -1166,6 +1169,8 @@ + /* If bitmap was loaded correctly, display it. */ + if (bitmap) + { ++ blend_text_bg = 1; ++ + /* Determine bitmap dimensions. */ + bitmap_width = grub_video_bitmap_get_width (bitmap); + bitmap_height = grub_video_bitmap_get_height (bitmap); +@@ -1180,6 +1185,48 @@ + return grub_errno; + } + ++static grub_err_t ++grub_gfxterm_background_color_cmd (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char **args) ++{ ++ grub_video_rgba_color_t color; ++ struct grub_video_render_target *old_target; ++ ++ if (argc != 1) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing operand"); ++ ++ /* Check that we have video adapter active. */ ++ if (grub_video_get_info (NULL) != GRUB_ERR_NONE) ++ return grub_errno; ++ ++ if (grub_video_parse_color (args[0], &color) != GRUB_ERR_NONE) ++ return grub_errno; ++ ++ /* Destroy existing background bitmap if loaded. */ ++ if (bitmap) ++ { ++ grub_video_bitmap_destroy (bitmap); ++ bitmap = 0; ++ ++ /* Mark whole screen as dirty. */ ++ dirty_region_add (0, 0, window.width, window.height); ++ } ++ ++ /* Set the background and border colors. The background color needs to be ++ compatible with the text layer. */ ++ grub_video_get_active_render_target (&old_target); ++ grub_video_set_active_render_target (text_layer); ++ virtual_screen.bg_color = grub_video_map_rgba_color (color); ++ grub_video_set_active_render_target (old_target); ++ virtual_screen.bg_color_display = grub_video_map_rgba_color (color); ++ blend_text_bg = 1; ++ ++ /* Mark whole screen as dirty. */ ++ dirty_region_add (0, 0, window.width, window.height); ++ ++ return GRUB_ERR_NONE; ++} ++ + static struct grub_term_output grub_video_term = + { + .name = "gfxterm", +@@ -1201,6 +1248,7 @@ + }; + + static grub_extcmd_t background_image_cmd_handle; ++static grub_command_t background_color_cmd_handle; + + GRUB_MOD_INIT(gfxterm) + { +@@ -1211,10 +1259,16 @@ + N_("[-m (stretch|normal)] FILE"), + N_("Load background image for active terminal."), + background_image_cmd_options); ++ background_color_cmd_handle = ++ grub_register_command ("background_color", ++ grub_gfxterm_background_color_cmd, ++ N_("COLOR"), ++ N_("Set background color for active terminal.")); + } + + GRUB_MOD_FINI(gfxterm) + { ++ grub_unregister_command (background_color_cmd_handle); + grub_unregister_extcmd (background_image_cmd_handle); + grub_term_unregister_output (&grub_video_term); + } +Index: b/include/grub/gfxmenu_view.h +=================================================================== +--- a/include/grub/gfxmenu_view.h ++++ b/include/grub/gfxmenu_view.h +@@ -87,11 +87,11 @@ + grub_font_t title_font; + grub_font_t message_font; + char *terminal_font_name; +- grub_gui_color_t title_color; +- grub_gui_color_t message_color; +- grub_gui_color_t message_bg_color; ++ grub_video_rgba_color_t title_color; ++ grub_video_rgba_color_t message_color; ++ grub_video_rgba_color_t message_bg_color; + struct grub_video_bitmap *desktop_image; +- grub_gui_color_t desktop_color; ++ grub_video_rgba_color_t desktop_color; + grub_gfxmenu_box_t terminal_box; + char *title_text; + char *progress_message_text; +Index: b/include/grub/gui.h +=================================================================== +--- a/include/grub/gui.h ++++ b/include/grub/gui.h +@@ -31,16 +31,6 @@ + status changes. */ + #define GRUB_GFXMENU_TIMEOUT_COMPONENT_ID "__timeout__" + +-/* A representation of a color. Unlike grub_video_color_t, this +- representation is independent of any video mode specifics. */ +-typedef struct grub_gui_color +-{ +- grub_uint8_t red; +- grub_uint8_t green; +- grub_uint8_t blue; +- grub_uint8_t alpha; +-} grub_gui_color_t; +- + typedef struct grub_gui_component *grub_gui_component_t; + typedef struct grub_gui_container *grub_gui_container_t; + typedef struct grub_gui_list *grub_gui_list_t; +@@ -242,23 +232,6 @@ + r->height); + } + +-static __inline grub_gui_color_t +-grub_gui_color_rgb (int r, int g, int b) +-{ +- grub_gui_color_t c; +- c.red = r; +- c.green = g; +- c.blue = b; +- c.alpha = 255; +- return c; +-} +- +-static __inline grub_video_color_t +-grub_gui_map_color (grub_gui_color_t c) +-{ +- return grub_video_map_rgba (c.red, c.green, c.blue, c.alpha); +-} +- + static inline int + grub_video_have_common_points (const grub_video_rect_t *a, + const grub_video_rect_t *b) +Index: b/include/grub/gui_string_util.h +=================================================================== +--- a/include/grub/gui_string_util.h ++++ b/include/grub/gui_string_util.h +@@ -30,8 +30,4 @@ + + char *grub_get_dirname (const char *file_path); + +-int grub_gui_get_named_color (const char *name, grub_gui_color_t *color); +- +-grub_err_t grub_gui_parse_color (const char *s, grub_gui_color_t *color); +- + #endif /* GRUB_GUI_STRING_UTIL_HEADER */ +Index: b/include/grub/video.h +=================================================================== +--- a/include/grub/video.h ++++ b/include/grub/video.h +@@ -27,6 +27,15 @@ + specific coding format. */ + typedef grub_uint32_t grub_video_color_t; + ++/* Video color in hardware independent format. */ ++typedef struct grub_video_rgba_color ++{ ++ grub_uint8_t red; ++ grub_uint8_t green; ++ grub_uint8_t blue; ++ grub_uint8_t alpha; ++} grub_video_rgba_color_t; ++ + /* This structure is driver specific and should not be accessed directly by + outside code. */ + struct grub_video_render_target; +@@ -428,4 +437,27 @@ + + grub_video_driver_id_t EXPORT_FUNC (grub_video_get_driver_id) (void); + ++static __inline grub_video_rgba_color_t ++grub_video_rgba_color_rgb (int r, int g, int b) ++{ ++ grub_video_rgba_color_t c; ++ c.red = r; ++ c.green = g; ++ c.blue = b; ++ c.alpha = 255; ++ return c; ++} ++ ++static __inline grub_video_color_t ++grub_video_map_rgba_color (grub_video_rgba_color_t c) ++{ ++ return grub_video_map_rgba (c.red, c.green, c.blue, c.alpha); ++} ++ ++int EXPORT_FUNC (grub_video_get_named_color) (const char *name, ++ grub_video_rgba_color_t *color); ++ ++grub_err_t EXPORT_FUNC (grub_video_parse_color) (const char *s, ++ grub_video_rgba_color_t *color); ++ + #endif /* ! GRUB_VIDEO_HEADER */ +Index: b/grub-core/video/colors.c +=================================================================== +--- /dev/null ++++ b/grub-core/video/colors.c +@@ -0,0 +1,330 @@ ++/* named_colors.c - Named color values. */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2008 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++ ++struct named_color ++{ ++ const char *name; ++ grub_video_rgba_color_t color; ++}; ++ ++/* ++ Named color list generated from the list of SVG color keywords from ++ , ++ processed through the following Perl command: ++ perl -ne 'chomp;split;print "{ \"$_[0]\", RGB_COLOR($_[2]) },\n"' ++ */ ++ ++#define RGB_COLOR(r,g,b) {.red = r, .green = g, .blue = b, .alpha = 255} ++ ++static struct named_color named_colors[] = ++{ ++ { "aliceblue", RGB_COLOR(240,248,255) }, ++ { "antiquewhite", RGB_COLOR(250,235,215) }, ++ { "aqua", RGB_COLOR(0,255,255) }, ++ { "aquamarine", RGB_COLOR(127,255,212) }, ++ { "azure", RGB_COLOR(240,255,255) }, ++ { "beige", RGB_COLOR(245,245,220) }, ++ { "bisque", RGB_COLOR(255,228,196) }, ++ { "black", RGB_COLOR(0,0,0) }, ++ { "blanchedalmond", RGB_COLOR(255,235,205) }, ++ { "blue", RGB_COLOR(0,0,255) }, ++ { "blueviolet", RGB_COLOR(138,43,226) }, ++ { "brown", RGB_COLOR(165,42,42) }, ++ { "burlywood", RGB_COLOR(222,184,135) }, ++ { "cadetblue", RGB_COLOR(95,158,160) }, ++ { "chartreuse", RGB_COLOR(127,255,0) }, ++ { "chocolate", RGB_COLOR(210,105,30) }, ++ { "coral", RGB_COLOR(255,127,80) }, ++ { "cornflowerblue", RGB_COLOR(100,149,237) }, ++ { "cornsilk", RGB_COLOR(255,248,220) }, ++ { "crimson", RGB_COLOR(220,20,60) }, ++ { "cyan", RGB_COLOR(0,255,255) }, ++ { "darkblue", RGB_COLOR(0,0,139) }, ++ { "darkcyan", RGB_COLOR(0,139,139) }, ++ { "darkgoldenrod", RGB_COLOR(184,134,11) }, ++ { "darkgray", RGB_COLOR(169,169,169) }, ++ { "darkgreen", RGB_COLOR(0,100,0) }, ++ { "darkgrey", RGB_COLOR(169,169,169) }, ++ { "darkkhaki", RGB_COLOR(189,183,107) }, ++ { "darkmagenta", RGB_COLOR(139,0,139) }, ++ { "darkolivegreen", RGB_COLOR(85,107,47) }, ++ { "darkorange", RGB_COLOR(255,140,0) }, ++ { "darkorchid", RGB_COLOR(153,50,204) }, ++ { "darkred", RGB_COLOR(139,0,0) }, ++ { "darksalmon", RGB_COLOR(233,150,122) }, ++ { "darkseagreen", RGB_COLOR(143,188,143) }, ++ { "darkslateblue", RGB_COLOR(72,61,139) }, ++ { "darkslategray", RGB_COLOR(47,79,79) }, ++ { "darkslategrey", RGB_COLOR(47,79,79) }, ++ { "darkturquoise", RGB_COLOR(0,206,209) }, ++ { "darkviolet", RGB_COLOR(148,0,211) }, ++ { "deeppink", RGB_COLOR(255,20,147) }, ++ { "deepskyblue", RGB_COLOR(0,191,255) }, ++ { "dimgray", RGB_COLOR(105,105,105) }, ++ { "dimgrey", RGB_COLOR(105,105,105) }, ++ { "dodgerblue", RGB_COLOR(30,144,255) }, ++ { "firebrick", RGB_COLOR(178,34,34) }, ++ { "floralwhite", RGB_COLOR(255,250,240) }, ++ { "forestgreen", RGB_COLOR(34,139,34) }, ++ { "fuchsia", RGB_COLOR(255,0,255) }, ++ { "gainsboro", RGB_COLOR(220,220,220) }, ++ { "ghostwhite", RGB_COLOR(248,248,255) }, ++ { "gold", RGB_COLOR(255,215,0) }, ++ { "goldenrod", RGB_COLOR(218,165,32) }, ++ { "gray", RGB_COLOR(128,128,128) }, ++ { "green", RGB_COLOR(0,128,0) }, ++ { "greenyellow", RGB_COLOR(173,255,47) }, ++ { "grey", RGB_COLOR(128,128,128) }, ++ { "honeydew", RGB_COLOR(240,255,240) }, ++ { "hotpink", RGB_COLOR(255,105,180) }, ++ { "indianred", RGB_COLOR(205,92,92) }, ++ { "indigo", RGB_COLOR(75,0,130) }, ++ { "ivory", RGB_COLOR(255,255,240) }, ++ { "khaki", RGB_COLOR(240,230,140) }, ++ { "lavender", RGB_COLOR(230,230,250) }, ++ { "lavenderblush", RGB_COLOR(255,240,245) }, ++ { "lawngreen", RGB_COLOR(124,252,0) }, ++ { "lemonchiffon", RGB_COLOR(255,250,205) }, ++ { "lightblue", RGB_COLOR(173,216,230) }, ++ { "lightcoral", RGB_COLOR(240,128,128) }, ++ { "lightcyan", RGB_COLOR(224,255,255) }, ++ { "lightgoldenrodyellow", RGB_COLOR(250,250,210) }, ++ { "lightgray", RGB_COLOR(211,211,211) }, ++ { "lightgreen", RGB_COLOR(144,238,144) }, ++ { "lightgrey", RGB_COLOR(211,211,211) }, ++ { "lightpink", RGB_COLOR(255,182,193) }, ++ { "lightsalmon", RGB_COLOR(255,160,122) }, ++ { "lightseagreen", RGB_COLOR(32,178,170) }, ++ { "lightskyblue", RGB_COLOR(135,206,250) }, ++ { "lightslategray", RGB_COLOR(119,136,153) }, ++ { "lightslategrey", RGB_COLOR(119,136,153) }, ++ { "lightsteelblue", RGB_COLOR(176,196,222) }, ++ { "lightyellow", RGB_COLOR(255,255,224) }, ++ { "lime", RGB_COLOR(0,255,0) }, ++ { "limegreen", RGB_COLOR(50,205,50) }, ++ { "linen", RGB_COLOR(250,240,230) }, ++ { "magenta", RGB_COLOR(255,0,255) }, ++ { "maroon", RGB_COLOR(128,0,0) }, ++ { "mediumaquamarine", RGB_COLOR(102,205,170) }, ++ { "mediumblue", RGB_COLOR(0,0,205) }, ++ { "mediumorchid", RGB_COLOR(186,85,211) }, ++ { "mediumpurple", RGB_COLOR(147,112,219) }, ++ { "mediumseagreen", RGB_COLOR(60,179,113) }, ++ { "mediumslateblue", RGB_COLOR(123,104,238) }, ++ { "mediumspringgreen", RGB_COLOR(0,250,154) }, ++ { "mediumturquoise", RGB_COLOR(72,209,204) }, ++ { "mediumvioletred", RGB_COLOR(199,21,133) }, ++ { "midnightblue", RGB_COLOR(25,25,112) }, ++ { "mintcream", RGB_COLOR(245,255,250) }, ++ { "mistyrose", RGB_COLOR(255,228,225) }, ++ { "moccasin", RGB_COLOR(255,228,181) }, ++ { "navajowhite", RGB_COLOR(255,222,173) }, ++ { "navy", RGB_COLOR(0,0,128) }, ++ { "oldlace", RGB_COLOR(253,245,230) }, ++ { "olive", RGB_COLOR(128,128,0) }, ++ { "olivedrab", RGB_COLOR(107,142,35) }, ++ { "orange", RGB_COLOR(255,165,0) }, ++ { "orangered", RGB_COLOR(255,69,0) }, ++ { "orchid", RGB_COLOR(218,112,214) }, ++ { "palegoldenrod", RGB_COLOR(238,232,170) }, ++ { "palegreen", RGB_COLOR(152,251,152) }, ++ { "paleturquoise", RGB_COLOR(175,238,238) }, ++ { "palevioletred", RGB_COLOR(219,112,147) }, ++ { "papayawhip", RGB_COLOR(255,239,213) }, ++ { "peachpuff", RGB_COLOR(255,218,185) }, ++ { "peru", RGB_COLOR(205,133,63) }, ++ { "pink", RGB_COLOR(255,192,203) }, ++ { "plum", RGB_COLOR(221,160,221) }, ++ { "powderblue", RGB_COLOR(176,224,230) }, ++ { "purple", RGB_COLOR(128,0,128) }, ++ { "red", RGB_COLOR(255,0,0) }, ++ { "rosybrown", RGB_COLOR(188,143,143) }, ++ { "royalblue", RGB_COLOR(65,105,225) }, ++ { "saddlebrown", RGB_COLOR(139,69,19) }, ++ { "salmon", RGB_COLOR(250,128,114) }, ++ { "sandybrown", RGB_COLOR(244,164,96) }, ++ { "seagreen", RGB_COLOR(46,139,87) }, ++ { "seashell", RGB_COLOR(255,245,238) }, ++ { "sienna", RGB_COLOR(160,82,45) }, ++ { "silver", RGB_COLOR(192,192,192) }, ++ { "skyblue", RGB_COLOR(135,206,235) }, ++ { "slateblue", RGB_COLOR(106,90,205) }, ++ { "slategray", RGB_COLOR(112,128,144) }, ++ { "slategrey", RGB_COLOR(112,128,144) }, ++ { "snow", RGB_COLOR(255,250,250) }, ++ { "springgreen", RGB_COLOR(0,255,127) }, ++ { "steelblue", RGB_COLOR(70,130,180) }, ++ { "tan", RGB_COLOR(210,180,140) }, ++ { "teal", RGB_COLOR(0,128,128) }, ++ { "thistle", RGB_COLOR(216,191,216) }, ++ { "tomato", RGB_COLOR(255,99,71) }, ++ { "turquoise", RGB_COLOR(64,224,208) }, ++ { "violet", RGB_COLOR(238,130,238) }, ++ { "wheat", RGB_COLOR(245,222,179) }, ++ { "white", RGB_COLOR(255,255,255) }, ++ { "whitesmoke", RGB_COLOR(245,245,245) }, ++ { "yellow", RGB_COLOR(255,255,0) }, ++ { "yellowgreen", RGB_COLOR(154,205,50) }, ++ { 0, { 0, 0, 0, 0 } } /* Terminator. */ ++}; ++ ++/* Get the color named NAME. If the color was found, returns 1 and ++ stores the color into *COLOR. If the color was not found, returns 0 and ++ does not modify *COLOR. */ ++int ++grub_video_get_named_color (const char *name, ++ grub_video_rgba_color_t *color) ++{ ++ int i; ++ for (i = 0; named_colors[i].name; i++) ++ { ++ if (grub_strcmp (named_colors[i].name, name) == 0) ++ { ++ *color = named_colors[i].color; ++ return 1; ++ } ++ } ++ return 0; ++} ++ ++static __inline int ++my_isxdigit (char c) ++{ ++ return ((c >= '0' && c <= '9') ++ || (c >= 'a' && c <= 'f') ++ || (c >= 'A' && c <= 'F')); ++} ++ ++static int ++parse_hex_color_component (const char *s, unsigned start, unsigned end) ++{ ++ unsigned len; ++ char buf[3]; ++ ++ len = end - start; ++ /* Check the limits so we don't overrun the buffer. */ ++ if (len < 1 || len > 2) ++ return 0; ++ ++ if (len == 1) ++ { ++ buf[0] = s[start]; /* Get the first and only hex digit. */ ++ buf[1] = buf[0]; /* Duplicate the hex digit. */ ++ } ++ else if (len == 2) ++ { ++ buf[0] = s[start]; ++ buf[1] = s[start + 1]; ++ } ++ ++ buf[2] = '\0'; ++ ++ return grub_strtoul (buf, 0, 16); ++} ++ ++/* Parse a color string of the form "r, g, b", "#RGB", "#RGBA", ++ "#RRGGBB", or "#RRGGBBAA". */ ++grub_err_t ++grub_video_parse_color (const char *s, grub_video_rgba_color_t *color) ++{ ++ grub_video_rgba_color_t c; ++ ++ /* Skip whitespace. */ ++ while (*s && grub_isspace (*s)) ++ s++; ++ ++ if (*s == '#') ++ { ++ /* HTML-style. Number if hex digits: ++ [6] #RRGGBB [3] #RGB ++ [8] #RRGGBBAA [4] #RGBA */ ++ ++ s++; /* Skip the '#'. */ ++ /* Count the hexits to determine the format. */ ++ int hexits = 0; ++ const char *end = s; ++ while (my_isxdigit (*end)) ++ { ++ end++; ++ hexits++; ++ } ++ ++ /* Parse the color components based on the format. */ ++ if (hexits == 3 || hexits == 4) ++ { ++ c.red = parse_hex_color_component (s, 0, 1); ++ c.green = parse_hex_color_component (s, 1, 2); ++ c.blue = parse_hex_color_component (s, 2, 3); ++ if (hexits == 4) ++ c.alpha = parse_hex_color_component (s, 3, 4); ++ else ++ c.alpha = 255; ++ } ++ else if (hexits == 6 || hexits == 8) ++ { ++ c.red = parse_hex_color_component (s, 0, 2); ++ c.green = parse_hex_color_component (s, 2, 4); ++ c.blue = parse_hex_color_component (s, 4, 6); ++ if (hexits == 8) ++ c.alpha = parse_hex_color_component (s, 6, 8); ++ else ++ c.alpha = 255; ++ } ++ else ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, ++ "invalid HTML-type color string `%s'", s); ++ } ++ else if (grub_isdigit (*s)) ++ { ++ /* Comma separated decimal values. */ ++ c.red = grub_strtoul (s, 0, 0); ++ if ((s = grub_strchr (s, ',')) == 0) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, ++ "missing 1st comma separator in color `%s'", s); ++ s++; ++ c.green = grub_strtoul (s, 0, 0); ++ if ((s = grub_strchr (s, ',')) == 0) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, ++ "missing 2nd comma separator in color `%s'", s); ++ s++; ++ c.blue = grub_strtoul (s, 0, 0); ++ if ((s = grub_strchr (s, ',')) == 0) ++ c.alpha = 255; ++ else ++ { ++ s++; ++ c.alpha = grub_strtoul (s, 0, 0); ++ } ++ } ++ else ++ { ++ if (! grub_video_get_named_color (s, &c)) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, ++ "invalid named color `%s'", s); ++ } ++ ++ if (grub_errno == GRUB_ERR_NONE) ++ *color = c; ++ return grub_errno; ++} --- grub2-1.99.orig/debian/patches/kfreebsd_mfi_devices.patch +++ grub2-1.99/debian/patches/kfreebsd_mfi_devices.patch @@ -0,0 +1,35 @@ +--- a/util/deviceiter.c ++++ b/util/deviceiter.c +@@ -298,6 +298,12 @@ + { + sprintf (name, "/dev/ar%d", unit); + } ++ ++static void ++get_mfi_disk_name (char *name, int unit) ++{ ++ sprintf (name, "/dev/mfid%d", unit); ++} + #endif + + #ifdef __linux__ +@@ -658,6 +664,19 @@ + if (check_device_readable_unique (name)) + { + if (hook (name, 0)) ++ goto out; ++ } ++ } ++ ++ /* LSI MegaRAID SAS. */ ++ for (i = 0; i < 32; i++) ++ { ++ char name[20]; ++ ++ get_mfi_disk_name (name, i); ++ if (check_device_readable_unique (name)) ++ { ++ if (hook (name, 0)) + goto out; + } + } --- grub2-1.99.orig/debian/patches/lzo.patch +++ grub2-1.99/debian/patches/lzo.patch @@ -0,0 +1,8643 @@ +Description: Add support for LZO compression in btrfs +Author: Szymon Janc +Author: Vladimir Serbinenko +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3436 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3446 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3459 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3551 +Origin: backport, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3804 +Bug-Ubuntu: https://bugs.launchpad.net/bugs/727535 +Forwarded: not-needed +Last-Update: 2012-03-12 + +Index: b/Makefile.util.def +=================================================================== +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -24,8 +24,8 @@ + + library = { + name = libgrubmods.a; +- cflags = '$(CFLAGS_GCRY)'; +- cppflags = '$(CPPFLAGS_GCRY)'; ++ cflags = '$(CFLAGS_GCRY) $(CFLAGS_POSIX) -Wno-undef'; ++ cppflags = '$(CPPFLAGS_GCRY) -I$(srcdir)/lib/posix_wrap -I$(top_srcdir)/grub-core/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; + + common_nodist = grub_script.tab.c; + common_nodist = grub_script.yy.c; +@@ -85,6 +85,7 @@ + common = grub-core/lib/LzmaEnc.c; + common = grub-core/lib/pbkdf2.c; + common = grub-core/lib/crc.c; ++ common = grub-core/lib/adler32.c; + common = grub-core/normal/datetime.c; + common = grub-core/normal/misc.c; + common = grub-core/partmap/acorn.c; +@@ -101,6 +102,8 @@ + common = grub-core/script/script.c; + common = grub-core/script/argv.c; + common = grub-core/io/gzio.c; ++ common = grub-core/io/lzopio.c; ++ common = grub-core/lib/minilzo/minilzo.c; + }; + + program = { +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -483,6 +483,7 @@ + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32" ++ TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m32" + TARGET_MODULE_FORMAT="elf32" + fi +@@ -491,6 +492,7 @@ + # Force 64-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m64" + TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64" ++ TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64" + TARGET_LDFLAGS="$TARGET_LDFLAGS -m64" + TARGET_MODULE_FORMAT="elf64" + fi +@@ -607,7 +609,7 @@ + fi + + # Check for libgcc symbols +-AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x) ++AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x __ctzdi2 __ctzsi2) + + if test "x$TARGET_APPLE_CC" = x1 ; then + CFLAGS="$TARGET_CFLAGS -nostdlib" +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -908,6 +908,8 @@ + name = btrfs; + common = fs/btrfs.c; + common = lib/crc.c; ++ cflags = '$(CFLAGS_POSIX) -Wno-undef'; ++ cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; + }; + + module = { +@@ -1509,6 +1511,14 @@ + }; + + module = { ++ name = lzopio; ++ common = io/lzopio.c; ++ common = lib/minilzo/minilzo.c; ++ cflags = '$(CFLAGS_POSIX) -Wno-undef'; ++ cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H'; ++}; ++ ++module = { + name = testload; + common = commands/testload.c; + }; +@@ -1524,3 +1534,8 @@ + common = commands/keylayouts.c; + enable = videomodules; + }; ++ ++module = { ++ name = adler32; ++ common = lib/adler32.c; ++}; +Index: b/grub-core/fs/btrfs.c +=================================================================== +--- a/grub-core/fs/btrfs.c ++++ b/grub-core/fs/btrfs.c +@@ -26,11 +26,23 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + + #define GRUB_BTRFS_SIGNATURE "_BHRfS_M" + ++/* From http://www.oberhumer.com/opensource/lzo/lzofaq.php ++ * LZO will expand incompressible data by a little amount. I still haven't ++ * computed the exact values, but I suggest using these formulas for ++ * a worst-case expansion calculation: ++ * ++ * output_block_size = input_block_size + (input_block_size / 16) + 64 + 3 ++ * */ ++#define GRUB_BTRFS_LZO_BLOCK_SIZE 4096 ++#define GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE (GRUB_BTRFS_LZO_BLOCK_SIZE + \ ++ (GRUB_BTRFS_LZO_BLOCK_SIZE / 16) + 64 + 3) ++ + typedef grub_uint8_t grub_btrfs_checksum_t[0x20]; + typedef grub_uint16_t grub_btrfs_uuid_t[8]; + +@@ -41,7 +53,7 @@ + } __attribute__ ((packed)); + + struct grub_btrfs_superblock +-{ ++{ + grub_btrfs_checksum_t checksum; + grub_btrfs_uuid_t uuid; + grub_uint8_t dummy[0x10]; +@@ -160,7 +172,8 @@ + { + unsigned depth; + unsigned allocated; +- struct { ++ struct ++ { + grub_disk_addr_t addr; + unsigned iter; + unsigned maxiter; +@@ -179,7 +192,7 @@ + { + grub_int64_t sec; + grub_uint32_t nanosec; +-} __attribute__ ((aligned(4))); ++} __attribute__ ((aligned (4))); + + struct grub_btrfs_inode + { +@@ -215,12 +228,13 @@ + + #define GRUB_BTRFS_COMPRESSION_NONE 0 + #define GRUB_BTRFS_COMPRESSION_ZLIB 1 ++#define GRUB_BTRFS_COMPRESSION_LZO 2 + + #define GRUB_BTRFS_OBJECT_ID_CHUNK 0x100 + + static grub_disk_addr_t superblock_sectors[] = { 64 * 2, 64 * 1024 * 2, +- 256 * 1048576 * 2, +- 1048576ULL * 1048576ULL * 2 }; ++ 256 * 1048576 * 2, 1048576ULL * 1048576ULL * 2 ++}; + + static grub_err_t + grub_btrfs_read_logical (struct grub_btrfs_data *data, +@@ -283,7 +297,7 @@ + } + + static grub_err_t +-save_ref (struct grub_btrfs_leaf_descriptor *desc, ++save_ref (struct grub_btrfs_leaf_descriptor *desc, + grub_disk_addr_t addr, unsigned i, unsigned m, int l) + { + desc->depth++; +@@ -307,7 +321,7 @@ + static int + next (struct grub_btrfs_data *data, + struct grub_btrfs_leaf_descriptor *desc, +- grub_disk_addr_t *outaddr, grub_size_t *outsize, ++ grub_disk_addr_t * outaddr, grub_size_t * outsize, + struct grub_btrfs_key *key_out) + { + grub_err_t err; +@@ -330,17 +344,17 @@ + err = grub_btrfs_read_logical (data, desc->data[desc->depth - 1].iter + * sizeof (node) + + sizeof (struct btrfs_header) +- + desc->data[desc->depth - 1].addr, &node, +- sizeof (node)); ++ + desc->data[desc->depth - 1].addr, ++ &node, sizeof (node)); + if (err) + return -err; + +- err = grub_btrfs_read_logical (data, grub_le_to_cpu64 (node.addr), &head, +- sizeof (head)); ++ err = grub_btrfs_read_logical (data, grub_le_to_cpu64 (node.addr), ++ &head, sizeof (head)); + if (err) + return -err; + +- save_ref (desc, grub_le_to_cpu64 (node.addr), 0, ++ save_ref (desc, grub_le_to_cpu64 (node.addr), 0, + grub_le_to_cpu32 (head.nitems), !head.level); + } + err = grub_btrfs_read_logical (data, desc->data[desc->depth - 1].iter +@@ -354,12 +368,12 @@ + *outaddr = desc->data[desc->depth - 1].addr + sizeof (struct btrfs_header) + + grub_le_to_cpu32 (leaf.offset); + *key_out = leaf.key; +- return 1; ++ return 1; + } + + static grub_err_t + lower_bound (struct grub_btrfs_data *data, +- const struct grub_btrfs_key *key_in, ++ const struct grub_btrfs_key *key_in, + struct grub_btrfs_key *key_out, + grub_disk_addr_t root, + grub_disk_addr_t *outaddr, grub_size_t *outsize, +@@ -410,8 +424,9 @@ + grub_dprintf ("btrfs", + "internal node (depth %d) %" PRIxGRUB_UINT64_T + " %x %" PRIxGRUB_UINT64_T "\n", depth, +- node.key.object_id, node.key.type, node.key.offset); +- ++ node.key.object_id, node.key.type, ++ node.key.offset); ++ + if (key_cmp (&node.key, key_in) == 0) + { + err = GRUB_ERR_NONE; +@@ -433,7 +448,7 @@ + err = GRUB_ERR_NONE; + if (desc) + err = save_ref (desc, addr - sizeof (head), i - 1, +- grub_le_to_cpu32 (head.nitems), 0); ++ grub_le_to_cpu32 (head.nitems), 0); + if (err) + return err; + addr = grub_le_to_cpu64 (node_last.addr); +@@ -457,7 +472,7 @@ + &leaf, sizeof (leaf)); + if (err) + return err; +- ++ + grub_dprintf ("btrfs", + "leaf (depth %d) %" PRIxGRUB_UINT64_T + " %x %" PRIxGRUB_UINT64_T "\n", depth, +@@ -465,31 +480,31 @@ + + if (key_cmp (&leaf.key, key_in) == 0) + { +- grub_memcpy (key_out, &leaf.key, sizeof(*key_out)); ++ grub_memcpy (key_out, &leaf.key, sizeof (*key_out)); + *outsize = grub_le_to_cpu32 (leaf.size); + *outaddr = addr + grub_le_to_cpu32 (leaf.offset); + if (desc) + return save_ref (desc, addr - sizeof (head), i, + grub_le_to_cpu32 (head.nitems), 1); +- return GRUB_ERR_NONE; ++ return GRUB_ERR_NONE; + } +- ++ + if (key_cmp (&leaf.key, key_in) > 0) + break; +- ++ + have_last = 1; + leaf_last = leaf; + } + + if (have_last) + { +- grub_memcpy (key_out, &leaf_last.key, sizeof(*key_out)); ++ grub_memcpy (key_out, &leaf_last.key, sizeof (*key_out)); + *outsize = grub_le_to_cpu32 (leaf_last.size); + *outaddr = addr + grub_le_to_cpu32 (leaf_last.offset); + if (desc) + return save_ref (desc, addr - sizeof (head), i - 1, + grub_le_to_cpu32 (head.nitems), 1); +- return GRUB_ERR_NONE; ++ return GRUB_ERR_NONE; + } + *outsize = 0; + *outaddr = 0; +@@ -503,8 +518,7 @@ + } + + static grub_device_t +-find_device (struct grub_btrfs_data *data, grub_uint64_t id, +- int do_rescan) ++find_device (struct grub_btrfs_data *data, grub_uint64_t id, int do_rescan) + { + grub_device_t dev_found = NULL; + auto int hook (const char *name); +@@ -540,7 +554,7 @@ + grub_device_close (dev); + return 0; + } +- ++ + dev_found = dev; + return 1; + } +@@ -579,17 +593,16 @@ + } + + static grub_err_t +-grub_btrfs_read_logical (struct grub_btrfs_data *data, +- grub_disk_addr_t addr, ++grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr, + void *buf, grub_size_t size) + { + while (size > 0) + { + grub_uint8_t *ptr; + struct grub_btrfs_key *key; +- struct grub_btrfs_chunk_item *chunk; ++ struct grub_btrfs_chunk_item *chunk; + grub_uint64_t csize; +- grub_err_t err; ++ grub_err_t err = 0; + struct grub_btrfs_key key_out; + int challoc = 0; + grub_device_t dev; +@@ -597,15 +610,15 @@ + addr); + for (ptr = data->sblock.bootstrap_mapping; + ptr < data->sblock.bootstrap_mapping +- + sizeof (data->sblock.bootstrap_mapping) +- - sizeof (struct grub_btrfs_key); +- ) ++ + sizeof (data->sblock.bootstrap_mapping) ++ - sizeof (struct grub_btrfs_key);) + { + key = (struct grub_btrfs_key *) ptr; + if (key->type != GRUB_BTRFS_ITEM_TYPE_CHUNK) + break; + chunk = (struct grub_btrfs_chunk_item *) (key + 1); +- grub_dprintf ("btrfs", "%" PRIxGRUB_UINT64_T " %" PRIxGRUB_UINT64_T " \n", ++ grub_dprintf ("btrfs", ++ "%" PRIxGRUB_UINT64_T " %" PRIxGRUB_UINT64_T " \n", + grub_le_to_cpu64 (key->offset), + grub_le_to_cpu64 (chunk->size)); + if (grub_le_to_cpu64 (key->offset) <= addr +@@ -702,11 +715,11 @@ + middle = grub_divmod64 (off, + grub_le_to_cpu64 (chunk->stripe_length), + &low); +- ++ + high = grub_divmod64 (middle, grub_le_to_cpu16 (chunk->nstripes), + &stripen); +- stripe_offset = low + grub_le_to_cpu64 (chunk->stripe_length) +- * high; ++ stripe_offset = ++ low + grub_le_to_cpu64 (chunk->stripe_length) * high; + csize = grub_le_to_cpu64 (chunk->stripe_length) - low; + break; + } +@@ -717,7 +730,7 @@ + middle = grub_divmod64 (off, + grub_le_to_cpu64 (chunk->stripe_length), + &low); +- ++ + high = grub_divmod64 (middle, + grub_le_to_cpu16 (chunk->nsubstripes), + &stripen); +@@ -757,7 +770,8 @@ + paddr = stripe->offset + stripe_offset; + + grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T +- "+0x%" PRIxGRUB_UINT64_T " (%d stripes (%d substripes) of %" ++ "+0x%" PRIxGRUB_UINT64_T ++ " (%d stripes (%d substripes) of %" + PRIxGRUB_UINT64_T ") stripe %" PRIxGRUB_UINT32_T + " maps to 0x%" PRIxGRUB_UINT64_T "\n", + grub_le_to_cpu64 (key->offset), +@@ -767,7 +781,7 @@ + grub_le_to_cpu64 (chunk->stripe_length), + stripen, stripe->offset); + grub_dprintf ("btrfs", "reading paddr 0x%" PRIxGRUB_UINT64_T +- " for laddr 0x%" PRIxGRUB_UINT64_T"\n", paddr, ++ " for laddr 0x%" PRIxGRUB_UINT64_T "\n", paddr, + addr); + + dev = find_device (data, stripe->device_id, j); +@@ -813,7 +827,7 @@ + } + + data = grub_zalloc (sizeof (*data)); +- if (! data) ++ if (!data) + return NULL; + + err = read_sblock (dev->disk, &data->sblock); +@@ -864,8 +878,7 @@ + key_in.type = GRUB_BTRFS_ITEM_TYPE_INODE_ITEM; + key_in.offset = 0; + +- err = lower_bound (data, &key_in, &key_out, tree, +- &elemaddr, &elemsize, NULL); ++ err = lower_bound (data, &key_in, &key_out, tree, &elemaddr, &elemsize, NULL); + if (err) + return err; + if (num != key_out.object_id +@@ -876,6 +889,76 @@ + } + + static grub_ssize_t ++grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off, ++ char *obuf, grub_size_t osize) ++{ ++ grub_uint32_t total_size, cblock_size, ret = 0; ++ unsigned char buf[GRUB_BTRFS_LZO_BLOCK_SIZE]; ++ ++ total_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); ++ ibuf += sizeof (total_size); ++ ++ if (isize < total_size) ++ return -1; ++ ++ /* Jump forward to first block with requested data. */ ++ while (off >= GRUB_BTRFS_LZO_BLOCK_SIZE) ++ { ++ cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); ++ ibuf += sizeof (cblock_size); ++ ++ if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE) ++ return -1; ++ ++ off -= GRUB_BTRFS_LZO_BLOCK_SIZE; ++ ibuf += cblock_size; ++ } ++ ++ while (osize > 0) ++ { ++ lzo_uint usize = GRUB_BTRFS_LZO_BLOCK_SIZE; ++ ++ cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); ++ ibuf += sizeof (cblock_size); ++ ++ if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE) ++ return -1; ++ ++ /* Block partially filled with requested data. */ ++ if (off > 0 || osize < GRUB_BTRFS_LZO_BLOCK_SIZE) ++ { ++ grub_size_t to_copy = grub_min(osize, GRUB_BTRFS_LZO_BLOCK_SIZE - off); ++ ++ if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, buf, &usize, ++ NULL) != LZO_E_OK) ++ return -1; ++ ++ to_copy = grub_min(to_copy, usize); ++ grub_memcpy(obuf, buf + off, to_copy); ++ ++ osize -= to_copy; ++ ret += to_copy; ++ obuf += to_copy; ++ ibuf += cblock_size; ++ off = 0; ++ continue; ++ } ++ ++ /* Decompress whole block directly to output buffer. */ ++ if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, (lzo_bytep)obuf, ++ &usize, NULL) != LZO_E_OK) ++ return -1; ++ ++ osize -= usize; ++ ret += usize; ++ obuf += usize; ++ ibuf += cblock_size; ++ } ++ ++ return ret; ++} ++ ++static grub_ssize_t + grub_btrfs_extent_read (struct grub_btrfs_data *data, + grub_uint64_t ino, grub_uint64_t tree, + grub_off_t pos0, char *buf, grub_size_t len) +@@ -915,19 +998,17 @@ + if (!data->extent) + return grub_errno; + +- err = grub_btrfs_read_logical (data, elemaddr, +- data->extent, elemsize); ++ err = grub_btrfs_read_logical (data, elemaddr, data->extent, ++ elemsize); + if (err) + return err; + +- data->extend = data->extstart +- + grub_le_to_cpu64 (data->extent->size); ++ data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size); + if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR + && (char *) &data->extent + elemsize +- >= (char *) &data->extent->filled +- + sizeof (data->extent->filled)) +- data->extend = data->extstart +- + grub_le_to_cpu64 (data->extent->filled); ++ >= (char *) &data->extent->filled + sizeof (data->extent->filled)) ++ data->extend = ++ data->extstart + grub_le_to_cpu64 (data->extent->filled); + + grub_dprintf ("btrfs", "extent 0x%" PRIxGRUB_UINT64_T "+0x%" + PRIxGRUB_UINT64_T " (0x%" +@@ -954,7 +1035,8 @@ + } + + if (data->extent->compression != GRUB_BTRFS_COMPRESSION_NONE +- && data->extent->compression != GRUB_BTRFS_COMPRESSION_ZLIB) ++ && data->extent->compression != GRUB_BTRFS_COMPRESSION_ZLIB ++ && data->extent->compression != GRUB_BTRFS_COMPRESSION_LZO) + { + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, + "compression type 0x%x not supported", +@@ -964,8 +1046,7 @@ + + if (data->extent->encoding) + { +- grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- "encoding not supported"); ++ grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "encoding not supported"); + return -1; + } + +@@ -981,6 +1062,15 @@ + != (grub_ssize_t) csize) + return -1; + } ++ else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) ++ { ++ if (grub_btrfs_lzo_decompress(data->extent->inl, data->extsize - ++ ((grub_uint8_t *) data->extent->inl ++ - (grub_uint8_t *) data->extent), ++ extoff, buf, csize) ++ != (grub_ssize_t) csize) ++ return -1; ++ } + else + grub_memcpy (buf, data->extent->inl + extoff, csize); + break; +@@ -990,10 +1080,13 @@ + grub_memset (buf, 0, csize); + break; + } +- if (data->extent->compression == GRUB_BTRFS_COMPRESSION_ZLIB) ++ ++ if (data->extent->compression != GRUB_BTRFS_COMPRESSION_NONE) + { + char *tmp; + grub_uint64_t zsize; ++ grub_ssize_t ret; ++ + zsize = grub_le_to_cpu64 (data->extent->compressed_size); + tmp = grub_malloc (zsize); + if (!tmp) +@@ -1006,27 +1099,35 @@ + grub_free (tmp); + return -1; + } +- if (grub_zlib_decompress (tmp, zsize, extoff +- + grub_le_to_cpu64 (data->extent->offset), +- buf, csize) != (grub_ssize_t) csize) +- { +- grub_free (tmp); +- return -1; +- } ++ ++ if (data->extent->compression == GRUB_BTRFS_COMPRESSION_ZLIB) ++ ret = grub_zlib_decompress (tmp, zsize, extoff ++ + grub_le_to_cpu64 (data->extent->offset), ++ buf, csize); ++ else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) ++ ret = grub_btrfs_lzo_decompress (tmp, zsize, extoff ++ + grub_le_to_cpu64 (data->extent->offset), ++ buf, csize); ++ else ++ ret = -1; ++ + grub_free (tmp); ++ ++ if (ret != (grub_ssize_t) csize) ++ return -1; ++ + break; + } + err = grub_btrfs_read_logical (data, + grub_le_to_cpu64 (data->extent->laddr) + + grub_le_to_cpu64 (data->extent->offset) +- + extoff, +- buf, csize); ++ + extoff, buf, csize); + if (err) + return -1; + break; + default: + grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- "unsupported extent type 0x%x", data->extent->type); ++ "unsupported extent type 0x%x", data->extent->type); + return -1; + } + buf += csize; +@@ -1089,9 +1190,9 @@ + + key->type = GRUB_BTRFS_ITEM_TYPE_DIR_ITEM; + key->offset = grub_cpu_to_le64 (~grub_getcrc32c (1, ctoken, ctokenlen)); +- +- err = lower_bound (data, key, &key_out, *tree, +- &elemaddr, &elemsize, NULL); ++ ++ err = lower_bound (data, key, &key_out, *tree, &elemaddr, &elemsize, ++ NULL); + if (err) + { + grub_free (direl); +@@ -1128,7 +1229,7 @@ + + for (cdirel = direl; + (grub_uint8_t *) cdirel - (grub_uint8_t *) direl +- < (grub_ssize_t) elemsize; ++ < (grub_ssize_t) elemsize; + cdirel = (void *) ((grub_uint8_t *) (direl + 1) + + grub_le_to_cpu16 (cdirel->n) + + grub_le_to_cpu16 (cdirel->m))) +@@ -1159,7 +1260,7 @@ + return grub_error (GRUB_ERR_SYMLINK_LOOP, + "too deep nesting of symlinks"); + } +- ++ + err = grub_btrfs_read_inode (data, &inode, + cdirel->key.object_id, *tree); + if (err) +@@ -1187,7 +1288,7 @@ + grub_free (tmp); + return grub_errno; + } +- grub_memcpy (tmp + grub_le_to_cpu64 (inode.size), path, ++ grub_memcpy (tmp + grub_le_to_cpu64 (inode.size), path, + grub_strlen (path) + 1); + grub_free (path_alloc); + path = path_alloc = tmp; +@@ -1225,8 +1326,7 @@ + grub_free (path_alloc); + return grub_error (GRUB_ERR_FILE_NOT_FOUND, "file not found"); + } +- err = grub_btrfs_read_logical (data, elemaddr, +- &ri, sizeof (ri)); ++ err = grub_btrfs_read_logical (data, elemaddr, &ri, sizeof (ri)); + if (err) + { + grub_free (direl); +@@ -1253,7 +1353,7 @@ + default: + grub_free (path_alloc); + grub_free (direl); +- return grub_error (GRUB_ERR_BAD_FS, "unrecognised object type 0x%x", ++ return grub_error (GRUB_ERR_BAD_FS, "unrecognised object type 0x%x", + cdirel->key.type); + } + } +@@ -1264,8 +1364,8 @@ + + static grub_err_t + grub_btrfs_dir (grub_device_t device, const char *path, +- int (*hook) (const char *filename, +- const struct grub_dirhook_info *info)) ++ int (*hook) (const char *filename, ++ const struct grub_dirhook_info *info)) + { + struct grub_btrfs_data *data = grub_btrfs_mount (device); + struct grub_btrfs_key key_in, key_out; +@@ -1286,10 +1386,9 @@ + if (err) + return err; + if (type != GRUB_BTRFS_DIR_ITEM_TYPE_DIRECTORY) +- return grub_error (GRUB_ERR_BAD_FILE_TYPE, "not a directory"); ++ return grub_error (GRUB_ERR_BAD_FILE_TYPE, "not a directory"); + +- err = lower_bound (data, &key_in, &key_out, tree, +- &elemaddr, &elemsize, &desc); ++ err = lower_bound (data, &key_in, &key_out, tree, &elemaddr, &elemsize, &desc); + if (err) + return err; + if (key_out.type != GRUB_BTRFS_ITEM_TYPE_DIR_ITEM +@@ -1329,7 +1428,7 @@ + + for (cdirel = direl; + (grub_uint8_t *) cdirel - (grub_uint8_t *) direl +- < (grub_ssize_t) elemsize; ++ < (grub_ssize_t) elemsize; + cdirel = (void *) ((grub_uint8_t *) (direl + 1) + + grub_le_to_cpu16 (cdirel->n) + + grub_le_to_cpu16 (cdirel->m))) +@@ -1358,7 +1457,7 @@ + } + while (r > 0); + +- out: ++out: + grub_free (direl); + + free_iterator (&desc); +@@ -1430,7 +1529,7 @@ + *uuid = NULL; + + data = grub_btrfs_mount (device); +- if (! data) ++ if (!data) + return grub_errno; + + *uuid = grub_xasprintf ("%04x%04x-%04x-%04x-%04x-%04x%04x%04x", +@@ -1456,7 +1555,7 @@ + *label = NULL; + + data = grub_btrfs_mount (device); +- if (! data) ++ if (!data) + return grub_errno; + + *label = grub_strndup (data->sblock.label, sizeof (data->sblock.label)); +@@ -1466,26 +1565,25 @@ + return grub_errno; + } + +-static struct grub_fs grub_btrfs_fs = +- { +- .name = "btrfs", +- .dir = grub_btrfs_dir, +- .open = grub_btrfs_open, +- .read = grub_btrfs_read, +- .close = grub_btrfs_close, +- .uuid = grub_btrfs_uuid, +- .label = grub_btrfs_label, ++static struct grub_fs grub_btrfs_fs = { ++ .name = "btrfs", ++ .dir = grub_btrfs_dir, ++ .open = grub_btrfs_open, ++ .read = grub_btrfs_read, ++ .close = grub_btrfs_close, ++ .uuid = grub_btrfs_uuid, ++ .label = grub_btrfs_label, + #ifdef GRUB_UTIL +- .reserved_first_sector = 1, ++ .reserved_first_sector = 1, + #endif +- }; ++}; + +-GRUB_MOD_INIT(btrfs) ++GRUB_MOD_INIT (btrfs) + { + grub_fs_register (&grub_btrfs_fs); + } + +-GRUB_MOD_FINI(btrfs) ++GRUB_MOD_FINI (btrfs) + { + grub_fs_unregister (&grub_btrfs_fs); + } +Index: b/grub-core/io/lzopio.c +=================================================================== +--- /dev/null ++++ b/grub-core/io/lzopio.c +@@ -0,0 +1,564 @@ ++/* lzopio.c - decompression support for lzop */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2011 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++#define LZOP_MAGIC "\x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a" ++#define LZOP_MAGIC_SIZE 9 ++#define LZOP_CHECK_SIZE 4 ++#define LZOP_NEW_LIB 0x0940 ++ ++/* Header flags - copied from conf.h of LZOP source code. */ ++#define F_ADLER32_D 0x00000001L ++#define F_ADLER32_C 0x00000002L ++#define F_STDIN 0x00000004L ++#define F_STDOUT 0x00000008L ++#define F_NAME_DEFAULT 0x00000010L ++#define F_DOSISH 0x00000020L ++#define F_H_EXTRA_FIELD 0x00000040L ++#define F_H_GMTDIFF 0x00000080L ++#define F_CRC32_D 0x00000100L ++#define F_CRC32_C 0x00000200L ++#define F_MULTIPART 0x00000400L ++#define F_H_FILTER 0x00000800L ++#define F_H_CRC32 0x00001000L ++#define F_H_PATH 0x00002000L ++#define F_MASK 0x00003FFFL ++ ++struct block_header ++{ ++ grub_uint32_t usize; ++ grub_uint32_t csize; ++ grub_uint32_t ucheck; ++ grub_uint32_t ccheck; ++ unsigned char *cdata; ++ unsigned char *udata; ++}; ++ ++struct grub_lzopio ++{ ++ grub_file_t file; ++ int has_ccheck; ++ int has_ucheck; ++ const gcry_md_spec_t *ucheck_fun; ++ const gcry_md_spec_t *ccheck_fun; ++ grub_off_t saved_off; /* Rounded down to block boundary. */ ++ grub_off_t start_block_off; ++ struct block_header block; ++}; ++ ++typedef struct grub_lzopio *grub_lzopio_t; ++static struct grub_fs grub_lzopio_fs; ++ ++/* Some helper functions. On errors memory allocated by those function is free ++ * either on close() so no risk of leaks. This makes functions simpler. */ ++ ++/* Read block header from file, after successful exit file points to ++ * beginning of block data. */ ++static int ++read_block_header (struct grub_lzopio *lzopio) ++{ ++ lzopio->saved_off += lzopio->block.usize; ++ ++ /* Free cached block data if any. */ ++ grub_free (lzopio->block.udata); ++ grub_free (lzopio->block.cdata); ++ lzopio->block.udata = NULL; ++ lzopio->block.cdata = NULL; ++ ++ if (grub_file_read (lzopio->file, &lzopio->block.usize, ++ sizeof (lzopio->block.usize)) != ++ sizeof (lzopio->block.usize)) ++ return -1; ++ ++ lzopio->block.usize = grub_be_to_cpu32 (lzopio->block.usize); ++ ++ /* Last block has uncompressed data size == 0 and no other fields. */ ++ if (lzopio->block.usize == 0) ++ { ++ if (grub_file_tell (lzopio->file) == grub_file_size (lzopio->file)) ++ return 0; ++ else ++ return -1; ++ } ++ ++ /* Read compressed data block size. */ ++ if (grub_file_read (lzopio->file, &lzopio->block.csize, ++ sizeof (lzopio->block.csize)) != ++ sizeof (lzopio->block.csize)) ++ return -1; ++ ++ lzopio->block.csize = grub_be_to_cpu32 (lzopio->block.csize); ++ ++ /* Corrupted. */ ++ if (lzopio->block.csize > lzopio->block.usize) ++ return -1; ++ ++ /* Read checksum of uncompressed data. */ ++ if (lzopio->has_ucheck) ++ { ++ if (grub_file_read (lzopio->file, &lzopio->block.ucheck, ++ sizeof (lzopio->block.ucheck)) != ++ sizeof (lzopio->block.ucheck)) ++ return -1; ++ ++ lzopio->block.ucheck = grub_be_to_cpu32 (lzopio->block.ucheck); ++ } ++ ++ /* Read checksum of compressed data. */ ++ if (lzopio->has_ccheck) ++ { ++ /* Incompressible data block. */ ++ if (lzopio->block.csize == lzopio->block.usize) ++ { ++ lzopio->block.ccheck = lzopio->block.ucheck; ++ } ++ else ++ { ++ if (grub_file_read (lzopio->file, &lzopio->block.ccheck, ++ sizeof (lzopio->block.ccheck)) != ++ sizeof (lzopio->block.ccheck)) ++ return -1; ++ ++ lzopio->block.ccheck = grub_be_to_cpu32 (lzopio->block.ccheck); ++ } ++ } ++ ++ return 0; ++} ++ ++/* Read block data into memory. File must be set to beginning of block data. ++ * Can't be called on last block. */ ++static int ++read_block_data (struct grub_lzopio *lzopio) ++{ ++ lzopio->block.cdata = grub_malloc (lzopio->block.csize); ++ if (!lzopio->block.cdata) ++ return -1; ++ ++ if (grub_file_read (lzopio->file, lzopio->block.cdata, lzopio->block.csize) ++ != (grub_ssize_t) lzopio->block.csize) ++ return -1; ++ ++ if (lzopio->ccheck_fun) ++ { ++ grub_uint64_t context[(lzopio->ccheck_fun->contextsize + 7) / 8]; ++ ++ lzopio->ccheck_fun->init (context); ++ lzopio->ccheck_fun->write (context, lzopio->block.cdata, ++ lzopio->block.csize); ++ lzopio->ccheck_fun->final (context); ++ ++ if (grub_memcmp ++ (lzopio->ccheck_fun->read (context), &lzopio->block.ccheck, ++ sizeof (lzopio->block.ccheck)) != 0) ++ return -1; ++ } ++ ++ return 0; ++} ++ ++/* Read block data, uncompressed and also store it in memory. */ ++/* XXX Investigate possibility of in-place decompression to reduce memory ++ * footprint. Or try to uncompress directly to buf if possible. */ ++static int ++uncompress_block (struct grub_lzopio *lzopio) ++{ ++ lzo_uint usize = lzopio->block.usize; ++ ++ if (read_block_data (lzopio) < 0) ++ return -1; ++ ++ /* Incompressible data. */ ++ if (lzopio->block.csize == lzopio->block.usize) ++ { ++ lzopio->block.udata = lzopio->block.cdata; ++ lzopio->block.cdata = NULL; ++ } ++ else ++ { ++ lzopio->block.udata = grub_malloc (lzopio->block.usize); ++ if (!lzopio->block.udata) ++ return -1; ++ ++ if (lzo1x_decompress_safe (lzopio->block.cdata, lzopio->block.csize, ++ lzopio->block.udata, &usize, NULL) ++ != LZO_E_OK) ++ return -1; ++ ++ if (lzopio->ucheck_fun) ++ { ++ grub_uint64_t context[(lzopio->ucheck_fun->contextsize + 7) / 8]; ++ ++ lzopio->ucheck_fun->init (context); ++ lzopio->ucheck_fun->write (context, lzopio->block.udata, ++ lzopio->block.usize); ++ lzopio->ucheck_fun->final (context); ++ ++ if (grub_memcmp ++ (lzopio->ucheck_fun->read (context), &lzopio->block.ucheck, ++ sizeof (lzopio->block.ucheck)) != 0) ++ return -1; ++ } ++ ++ /* Compressed data can be free now. */ ++ grub_free (lzopio->block.cdata); ++ lzopio->block.cdata = NULL; ++ } ++ ++ return 0; ++} ++ ++/* Jump to next block and read its header. */ ++static int ++jump_block (struct grub_lzopio *lzopio) ++{ ++ /* only jump if block was not decompressed (and read from disk) */ ++ if (!lzopio->block.udata) ++ { ++ grub_off_t off = grub_file_tell (lzopio->file) + lzopio->block.csize; ++ ++ if (grub_file_seek (lzopio->file, off) == ((grub_off_t) - 1)) ++ return -1; ++ } ++ ++ return read_block_header (lzopio); ++} ++ ++static int ++calculate_uncompressed_size (grub_file_t file) ++{ ++ grub_lzopio_t lzopio = file->data; ++ grub_off_t usize_total = 0; ++ ++ if (read_block_header (lzopio) < 0) ++ return -1; ++ ++ /* FIXME: Don't do this for not easily seekable files. */ ++ while (lzopio->block.usize != 0) ++ { ++ usize_total += lzopio->block.usize; ++ ++ if (jump_block (lzopio) < 0) ++ return -1; ++ } ++ ++ file->size = usize_total; ++ ++ return 0; ++} ++ ++struct lzop_header ++{ ++ grub_uint8_t magic[LZOP_MAGIC_SIZE]; ++ grub_uint16_t lzop_version; ++ grub_uint16_t lib_version; ++ grub_uint16_t lib_version_ext; ++ grub_uint8_t method; ++ grub_uint8_t level; ++ grub_uint32_t flags; ++ /* grub_uint32_t filter; */ /* No filters support. Rarely used anyway. */ ++ grub_uint32_t mode; ++ grub_uint32_t mtime_lo; ++ grub_uint32_t mtime_hi; ++ grub_uint8_t name_len; ++} __attribute__ ((packed)); ++ ++static int ++test_header (grub_file_t file) ++{ ++ grub_lzopio_t lzopio = file->data; ++ struct lzop_header header; ++ grub_uint32_t flags, checksum; ++ const gcry_md_spec_t *hcheck; ++ grub_uint8_t *context = NULL; ++ grub_uint8_t *name = NULL; ++ ++ if (grub_file_read (lzopio->file, &header, sizeof (header)) != sizeof (header)) ++ { ++ grub_error (GRUB_ERR_BAD_FILE_TYPE, "no lzop magic found"); ++ return 0; ++ } ++ ++ if (grub_memcmp (header.magic, LZOP_MAGIC, LZOP_MAGIC_SIZE) != 0) ++ { ++ grub_error (GRUB_ERR_BAD_FILE_TYPE, "no lzop magic found"); ++ return 0; ++ } ++ ++ if (grub_be_to_cpu16(header.lib_version) < LZOP_NEW_LIB) ++ { ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, ++ "unsupported (too old) LZOP version"); ++ return 0; ++ } ++ ++ /* Too new version, should upgrade minilzo? */ ++ if (grub_be_to_cpu16 (header.lib_version_ext) > MINILZO_VERSION) ++ { ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, ++ "unsupported (too new) LZO version"); ++ return 0; ++ } ++ ++ flags = grub_be_to_cpu32 (header.flags); ++ ++ if (flags & F_CRC32_D) ++ { ++ lzopio->has_ucheck = 1; ++ lzopio->ucheck_fun = grub_crypto_lookup_md_by_name ("crc32"); ++ } ++ else if (flags & F_ADLER32_D) ++ { ++ lzopio->has_ucheck = 1; ++ lzopio->ucheck_fun = grub_crypto_lookup_md_by_name ("adler32"); ++ } ++ ++ if (flags & F_CRC32_C) ++ { ++ lzopio->has_ccheck = 1; ++ lzopio->ccheck_fun = grub_crypto_lookup_md_by_name ("crc32"); ++ } ++ else if (flags & F_ADLER32_C) ++ { ++ lzopio->has_ccheck = 1; ++ lzopio->ccheck_fun = grub_crypto_lookup_md_by_name ("adler32"); ++ } ++ ++ if (flags & F_H_CRC32) ++ hcheck = grub_crypto_lookup_md_by_name ("crc32"); ++ else ++ hcheck = grub_crypto_lookup_md_by_name ("adler32"); ++ ++ if (hcheck) { ++ context = grub_malloc(hcheck->contextsize); ++ if (! context) ++ return 0; ++ ++ hcheck->init(context); ++ ++ /* MAGIC is not included in check calculation. */ ++ hcheck->write(context, &header.lzop_version, sizeof(header)- LZOP_MAGIC_SIZE); ++ } ++ ++ if (header.name_len != 0) ++ { ++ name = grub_malloc (header.name_len); ++ if (! name) ++ { ++ grub_free (context); ++ return 0; ++ } ++ ++ if (grub_file_read (lzopio->file, name, header.name_len) != ++ header.name_len) ++ { ++ grub_free(name); ++ goto CORRUPTED; ++ } ++ ++ if (hcheck) ++ hcheck->write(context, name, header.name_len); ++ ++ grub_free(name); ++ } ++ ++ if (hcheck) ++ hcheck->final(context); ++ ++ if (grub_file_read (lzopio->file, &checksum, sizeof (checksum)) != ++ sizeof (checksum)) ++ goto CORRUPTED; ++ ++ if (hcheck) ++ { ++ checksum = grub_cpu_to_be32(checksum); ++ if (grub_memcmp (&checksum, hcheck->read(context), sizeof(checksum)) != 0) ++ goto CORRUPTED; ++ } ++ ++ lzopio->start_block_off = grub_file_tell (lzopio->file); ++ ++ if (calculate_uncompressed_size (file) < 0) ++ goto CORRUPTED; ++ ++ /* Get back to start block. */ ++ grub_file_seek (lzopio->file, lzopio->start_block_off); ++ ++ /* Read first block - grub_lzopio_read() expects valid block. */ ++ if (read_block_header (lzopio) < 0) ++ goto CORRUPTED; ++ ++ lzopio->saved_off = 0; ++ return 1; ++ ++CORRUPTED: ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "lzop file corrupted"); ++ ++ grub_free(name); ++ ++ return 0; ++} ++ ++static grub_file_t ++grub_lzopio_open (grub_file_t io) ++{ ++ grub_file_t file; ++ grub_lzopio_t lzopio; ++ ++ file = (grub_file_t) grub_zalloc (sizeof (*file)); ++ if (!file) ++ return 0; ++ ++ lzopio = grub_zalloc (sizeof (*lzopio)); ++ if (!lzopio) ++ { ++ grub_free (file); ++ return 0; ++ } ++ ++ lzopio->file = io; ++ ++ file->device = io->device; ++ file->offset = 0; ++ file->data = lzopio; ++ file->read_hook = 0; ++ file->fs = &grub_lzopio_fs; ++ file->size = GRUB_FILE_SIZE_UNKNOWN; ++ file->not_easily_seekable = 1; ++ ++ if (grub_file_tell (lzopio->file) != 0) ++ grub_file_seek (lzopio->file, 0); ++ ++ if (!test_header (file)) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ grub_file_seek (io, 0); ++ grub_free (lzopio); ++ grub_free (file); ++ ++ return io; ++ } ++ ++ return file; ++} ++ ++static grub_ssize_t ++grub_lzopio_read (grub_file_t file, char *buf, grub_size_t len) ++{ ++ grub_lzopio_t lzopio = file->data; ++ grub_ssize_t ret = 0; ++ grub_off_t off; ++ ++ /* Backward seek before last read block. */ ++ if (lzopio->saved_off > grub_file_tell (file)) ++ { ++ grub_file_seek (lzopio->file, lzopio->start_block_off); ++ ++ if (read_block_header (lzopio) < 0) ++ goto CORRUPTED; ++ ++ lzopio->saved_off = 0; ++ } ++ ++ /* Forward to first block with requested data. */ ++ while (lzopio->saved_off + lzopio->block.usize <= grub_file_tell (file)) ++ { ++ /* EOF, could be possible files with unknown size. */ ++ if (lzopio->block.usize == 0) ++ return 0; ++ ++ if (jump_block (lzopio) < 0) ++ goto CORRUPTED; ++ } ++ ++ off = grub_file_tell (file) - lzopio->saved_off; ++ ++ while (len != 0 && lzopio->block.usize != 0) ++ { ++ long to_copy; ++ ++ /* Block not decompressed yet. */ ++ if (!lzopio->block.udata && uncompress_block (lzopio) < 0) ++ goto CORRUPTED; ++ ++ /* Copy requested data into buffer. */ ++ to_copy = grub_min (lzopio->block.usize - off, len); ++ grub_memcpy (buf, lzopio->block.udata + off, to_copy); ++ ++ len -= to_copy; ++ buf += to_copy; ++ ret += to_copy; ++ off = 0; ++ ++ /* Read next block if needed. */ ++ if (len > 0 && read_block_header (lzopio) < 0) ++ goto CORRUPTED; ++ } ++ ++ return ret; ++ ++CORRUPTED: ++ grub_error (GRUB_ERR_BAD_COMPRESSED_DATA, "lzop file corrupted"); ++ return -1; ++} ++ ++/* Release everything, including the underlying file object. */ ++static grub_err_t ++grub_lzopio_close (grub_file_t file) ++{ ++ grub_lzopio_t lzopio = file->data; ++ ++ grub_file_close (lzopio->file); ++ grub_free (lzopio->block.cdata); ++ grub_free (lzopio->block.udata); ++ grub_free (lzopio); ++ ++ /* Device must not be closed twice. */ ++ file->device = 0; ++ return grub_errno; ++} ++ ++static struct grub_fs grub_lzopio_fs = { ++ .name = "lzopio", ++ .dir = 0, ++ .open = 0, ++ .read = grub_lzopio_read, ++ .close = grub_lzopio_close, ++ .label = 0, ++ .next = 0 ++}; ++ ++GRUB_MOD_INIT (lzopio) ++{ ++ grub_file_filter_register (GRUB_FILE_FILTER_LZOPIO, grub_lzopio_open); ++} ++ ++GRUB_MOD_FINI (lzopio) ++{ ++ grub_file_filter_unregister (GRUB_FILE_FILTER_LZOPIO); ++} +Index: b/grub-core/lib/adler32.c +=================================================================== +--- /dev/null ++++ b/grub-core/lib/adler32.c +@@ -0,0 +1,151 @@ ++/* adler32.c - adler32 check. */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2011 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++ ++/* Based on adler32() from adler32.c of zlib-1.2.5 library. */ ++ ++#define BASE 65521UL ++#define NMAX 5552 ++ ++#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} ++#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); ++#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); ++#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); ++#define DO16(buf) DO8(buf,0); DO8(buf,8); ++ ++static grub_uint32_t ++update_adler32 (grub_uint32_t adler, const grub_uint8_t *buf, grub_size_t len) ++{ ++ unsigned long sum2; ++ unsigned int n; ++ ++ sum2 = (adler >> 16) & 0xffff; ++ adler &= 0xffff; ++ ++ if (len == 1) ++ { ++ adler += buf[0]; ++ if (adler >= BASE) ++ adler -= BASE; ++ sum2 += adler; ++ if (sum2 >= BASE) ++ sum2 -= BASE; ++ return adler | (sum2 << 16); ++ } ++ ++ if (len < 16) ++ { ++ while (len--) ++ { ++ adler += *buf++; ++ sum2 += adler; ++ } ++ if (adler >= BASE) ++ adler -= BASE; ++ sum2 %= BASE; ++ return adler | (sum2 << 16); ++ } ++ ++ while (len >= NMAX) ++ { ++ len -= NMAX; ++ n = NMAX / 16; ++ do ++ { ++ DO16 (buf); ++ buf += 16; ++ } ++ while (--n); ++ adler %= BASE; ++ sum2 %= BASE; ++ } ++ ++ if (len) ++ { ++ while (len >= 16) ++ { ++ len -= 16; ++ DO16 (buf); ++ buf += 16; ++ } ++ while (len--) ++ { ++ adler += *buf++; ++ sum2 += adler; ++ } ++ adler %= BASE; ++ sum2 %= BASE; ++ } ++ ++ return adler | (sum2 << 16); ++} ++ ++typedef struct ++{ ++ grub_uint32_t adler; ++} ++adler32_context; ++ ++static void ++adler32_init (void *context) ++{ ++ adler32_context *ctx = (adler32_context *) context; ++ ctx->adler = 1; ++} ++ ++static void ++adler32_write (void *context, const void *inbuf, grub_size_t inlen) ++{ ++ adler32_context *ctx = (adler32_context *) context; ++ if (!inbuf) ++ return; ++ ctx->adler = update_adler32 (ctx->adler, inbuf, inlen); ++} ++ ++static grub_uint8_t * ++adler32_read (void *context) ++{ ++ adler32_context *ctx = (adler32_context *) context; ++ return (grub_uint8_t *) &ctx->adler; ++} ++ ++static void ++adler32_final (void *context __attribute__ ((unused))) ++{ ++} ++ ++gcry_md_spec_t _gcry_digest_spec_adler32 = { ++ "ADLER32",0 , 0, 0 , 4, ++ adler32_init, adler32_write, adler32_final, adler32_read, ++ sizeof (adler32_context), ++ .blocksize = 64 ++}; ++ ++GRUB_MOD_INIT(adler32) ++{ ++ grub_md_register (&_gcry_digest_spec_adler32); ++} ++ ++GRUB_MOD_FINI(adler32) ++{ ++ grub_md_unregister (&_gcry_digest_spec_adler32); ++} +Index: b/grub-core/lib/minilzo/lzoconf.h +=================================================================== +--- /dev/null ++++ b/grub-core/lib/minilzo/lzoconf.h +@@ -0,0 +1,446 @@ ++/* lzoconf.h -- configuration of the LZO data compression library ++ ++ This file is part of the LZO real-time data compression library. ++ ++ Copyright (C) 2011 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer ++ All Rights Reserved. ++ ++ The LZO library 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. ++ ++ The LZO library 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 the LZO library; see the file COPYING. ++ If not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ Markus F.X.J. Oberhumer ++ ++ http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++ ++#ifndef __LZOCONF_H_INCLUDED ++#define __LZOCONF_H_INCLUDED 1 ++ ++#define LZO_VERSION 0x2050 ++#define LZO_VERSION_STRING "2.05" ++#define LZO_VERSION_DATE "Apr 23 2011" ++ ++/* internal Autoconf configuration file - only used when building LZO */ ++#if defined(LZO_HAVE_CONFIG_H) ++# include ++#endif ++#include ++#include ++ ++ ++/*********************************************************************** ++// LZO requires a conforming ++************************************************************************/ ++ ++#if !defined(CHAR_BIT) || (CHAR_BIT != 8) ++# error "invalid CHAR_BIT" ++#endif ++#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX) ++# error "check your compiler installation" ++#endif ++#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1) ++# error "your limits.h macros are broken" ++#endif ++ ++/* get OS and architecture defines */ ++#ifndef __LZODEFS_H_INCLUDED ++#include "lzodefs.h" ++#endif ++ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/*********************************************************************** ++// some core defines ++************************************************************************/ ++ ++#if !defined(LZO_UINT32_C) ++# if (UINT_MAX < LZO_0xffffffffL) ++# define LZO_UINT32_C(c) c ## UL ++# else ++# define LZO_UINT32_C(c) ((c) + 0U) ++# endif ++#endif ++ ++/* memory checkers */ ++#if !defined(__LZO_CHECKER) ++# if defined(__BOUNDS_CHECKING_ON) ++# define __LZO_CHECKER 1 ++# elif defined(__CHECKER__) ++# define __LZO_CHECKER 1 ++# elif defined(__INSURE__) ++# define __LZO_CHECKER 1 ++# elif defined(__PURIFY__) ++# define __LZO_CHECKER 1 ++# endif ++#endif ++ ++ ++/*********************************************************************** ++// integral and pointer types ++************************************************************************/ ++ ++/* lzo_uint should match size_t */ ++#if !defined(LZO_UINT_MAX) ++# if defined(LZO_ABI_LLP64) /* WIN64 */ ++# if defined(LZO_OS_WIN64) ++ typedef unsigned __int64 lzo_uint; ++ typedef __int64 lzo_int; ++# else ++ typedef unsigned long long lzo_uint; ++ typedef long long lzo_int; ++# endif ++# define LZO_UINT_MAX 0xffffffffffffffffull ++# define LZO_INT_MAX 9223372036854775807LL ++# define LZO_INT_MIN (-1LL - LZO_INT_MAX) ++# elif defined(LZO_ABI_IP32L64) /* MIPS R5900 */ ++ typedef unsigned int lzo_uint; ++ typedef int lzo_int; ++# define LZO_UINT_MAX UINT_MAX ++# define LZO_INT_MAX INT_MAX ++# define LZO_INT_MIN INT_MIN ++# elif (ULONG_MAX >= LZO_0xffffffffL) ++ typedef unsigned long lzo_uint; ++ typedef long lzo_int; ++# define LZO_UINT_MAX ULONG_MAX ++# define LZO_INT_MAX LONG_MAX ++# define LZO_INT_MIN LONG_MIN ++# else ++# error "lzo_uint" ++# endif ++#endif ++ ++/* Integral types with 32 bits or more. */ ++#if !defined(LZO_UINT32_MAX) ++# if (UINT_MAX >= LZO_0xffffffffL) ++ typedef unsigned int lzo_uint32; ++ typedef int lzo_int32; ++# define LZO_UINT32_MAX UINT_MAX ++# define LZO_INT32_MAX INT_MAX ++# define LZO_INT32_MIN INT_MIN ++# elif (ULONG_MAX >= LZO_0xffffffffL) ++ typedef unsigned long lzo_uint32; ++ typedef long lzo_int32; ++# define LZO_UINT32_MAX ULONG_MAX ++# define LZO_INT32_MAX LONG_MAX ++# define LZO_INT32_MIN LONG_MIN ++# else ++# error "lzo_uint32" ++# endif ++#endif ++ ++/* Integral types with exactly 64 bits. */ ++#if !defined(LZO_UINT64_MAX) ++# if (LZO_UINT_MAX >= LZO_0xffffffffL) ++# if ((((LZO_UINT_MAX) >> 31) >> 31) == 3) ++# define lzo_uint64 lzo_uint ++# define lzo_int64 lzo_int ++# define LZO_UINT64_MAX LZO_UINT_MAX ++# define LZO_INT64_MAX LZO_INT_MAX ++# define LZO_INT64_MIN LZO_INT_MIN ++# endif ++# elif (ULONG_MAX >= LZO_0xffffffffL) ++# if ((((ULONG_MAX) >> 31) >> 31) == 3) ++ typedef unsigned long lzo_uint64; ++ typedef long lzo_int64; ++# define LZO_UINT64_MAX ULONG_MAX ++# define LZO_INT64_MAX LONG_MAX ++# define LZO_INT64_MIN LONG_MIN ++# endif ++# endif ++#endif ++ ++/* The larger type of lzo_uint and lzo_uint32. */ ++#if (LZO_UINT_MAX >= LZO_UINT32_MAX) ++# define lzo_xint lzo_uint ++#else ++# define lzo_xint lzo_uint32 ++#endif ++ ++/* Memory model that allows to access memory at offsets of lzo_uint. */ ++#if !defined(__LZO_MMODEL) ++# if (LZO_UINT_MAX <= UINT_MAX) ++# define __LZO_MMODEL /*empty*/ ++# elif defined(LZO_HAVE_MM_HUGE_PTR) ++# define __LZO_MMODEL_HUGE 1 ++# define __LZO_MMODEL __huge ++# else ++# define __LZO_MMODEL /*empty*/ ++# endif ++#endif ++ ++/* no typedef here because of const-pointer issues */ ++#define lzo_bytep unsigned char __LZO_MMODEL * ++#define lzo_charp char __LZO_MMODEL * ++#define lzo_voidp void __LZO_MMODEL * ++#define lzo_shortp short __LZO_MMODEL * ++#define lzo_ushortp unsigned short __LZO_MMODEL * ++#define lzo_uint32p lzo_uint32 __LZO_MMODEL * ++#define lzo_int32p lzo_int32 __LZO_MMODEL * ++#if defined(LZO_UINT64_MAX) ++#define lzo_uint64p lzo_uint64 __LZO_MMODEL * ++#define lzo_int64p lzo_int64 __LZO_MMODEL * ++#endif ++#define lzo_uintp lzo_uint __LZO_MMODEL * ++#define lzo_intp lzo_int __LZO_MMODEL * ++#define lzo_xintp lzo_xint __LZO_MMODEL * ++#define lzo_voidpp lzo_voidp __LZO_MMODEL * ++#define lzo_bytepp lzo_bytep __LZO_MMODEL * ++/* deprecated - use 'lzo_bytep' instead of 'lzo_byte *' */ ++#define lzo_byte unsigned char __LZO_MMODEL ++ ++typedef int lzo_bool; ++ ++ ++/*********************************************************************** ++// function types ++************************************************************************/ ++ ++/* name mangling */ ++#if !defined(__LZO_EXTERN_C) ++# ifdef __cplusplus ++# define __LZO_EXTERN_C extern "C" ++# else ++# define __LZO_EXTERN_C extern ++# endif ++#endif ++ ++/* calling convention */ ++#if !defined(__LZO_CDECL) ++# define __LZO_CDECL __lzo_cdecl ++#endif ++ ++/* DLL export information */ ++#if !defined(__LZO_EXPORT1) ++# define __LZO_EXPORT1 /*empty*/ ++#endif ++#if !defined(__LZO_EXPORT2) ++# define __LZO_EXPORT2 /*empty*/ ++#endif ++ ++/* __cdecl calling convention for public C and assembly functions */ ++#if !defined(LZO_PUBLIC) ++# define LZO_PUBLIC(_rettype) __LZO_EXPORT1 _rettype __LZO_EXPORT2 __LZO_CDECL ++#endif ++#if !defined(LZO_EXTERN) ++# define LZO_EXTERN(_rettype) __LZO_EXTERN_C LZO_PUBLIC(_rettype) ++#endif ++#if !defined(LZO_PRIVATE) ++# define LZO_PRIVATE(_rettype) static _rettype __LZO_CDECL ++#endif ++ ++/* function types */ ++typedef int ++(__LZO_CDECL *lzo_compress_t) ( const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem ); ++ ++typedef int ++(__LZO_CDECL *lzo_decompress_t) ( const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem ); ++ ++typedef int ++(__LZO_CDECL *lzo_optimize_t) ( lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem ); ++ ++typedef int ++(__LZO_CDECL *lzo_compress_dict_t)(const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem, ++ const lzo_bytep dict, lzo_uint dict_len ); ++ ++typedef int ++(__LZO_CDECL *lzo_decompress_dict_t)(const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem, ++ const lzo_bytep dict, lzo_uint dict_len ); ++ ++ ++/* Callback interface. Currently only the progress indicator ("nprogress") ++ * is used, but this may change in a future release. */ ++ ++struct lzo_callback_t; ++typedef struct lzo_callback_t lzo_callback_t; ++#define lzo_callback_p lzo_callback_t __LZO_MMODEL * ++ ++/* malloc & free function types */ ++typedef lzo_voidp (__LZO_CDECL *lzo_alloc_func_t) ++ (lzo_callback_p self, lzo_uint items, lzo_uint size); ++typedef void (__LZO_CDECL *lzo_free_func_t) ++ (lzo_callback_p self, lzo_voidp ptr); ++ ++/* a progress indicator callback function */ ++typedef void (__LZO_CDECL *lzo_progress_func_t) ++ (lzo_callback_p, lzo_uint, lzo_uint, int); ++ ++struct lzo_callback_t ++{ ++ /* custom allocators (set to 0 to disable) */ ++ lzo_alloc_func_t nalloc; /* [not used right now] */ ++ lzo_free_func_t nfree; /* [not used right now] */ ++ ++ /* a progress indicator callback function (set to 0 to disable) */ ++ lzo_progress_func_t nprogress; ++ ++ /* NOTE: the first parameter "self" of the nalloc/nfree/nprogress ++ * callbacks points back to this struct, so you are free to store ++ * some extra info in the following variables. */ ++ lzo_voidp user1; ++ lzo_xint user2; ++ lzo_xint user3; ++}; ++ ++ ++/*********************************************************************** ++// error codes and prototypes ++************************************************************************/ ++ ++/* Error codes for the compression/decompression functions. Negative ++ * values are errors, positive values will be used for special but ++ * normal events. ++ */ ++#define LZO_E_OK 0 ++#define LZO_E_ERROR (-1) ++#define LZO_E_OUT_OF_MEMORY (-2) /* [lzo_alloc_func_t failure] */ ++#define LZO_E_NOT_COMPRESSIBLE (-3) /* [not used right now] */ ++#define LZO_E_INPUT_OVERRUN (-4) ++#define LZO_E_OUTPUT_OVERRUN (-5) ++#define LZO_E_LOOKBEHIND_OVERRUN (-6) ++#define LZO_E_EOF_NOT_FOUND (-7) ++#define LZO_E_INPUT_NOT_CONSUMED (-8) ++#define LZO_E_NOT_YET_IMPLEMENTED (-9) /* [not used right now] */ ++#define LZO_E_INVALID_ARGUMENT (-10) ++ ++ ++#ifndef lzo_sizeof_dict_t ++# define lzo_sizeof_dict_t ((unsigned)sizeof(lzo_bytep)) ++#endif ++ ++/* lzo_init() should be the first function you call. ++ * Check the return code ! ++ * ++ * lzo_init() is a macro to allow checking that the library and the ++ * compiler's view of various types are consistent. ++ */ ++#define lzo_init() __lzo_init_v2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\ ++ (int)sizeof(long),(int)sizeof(lzo_uint32),(int)sizeof(lzo_uint),\ ++ (int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\ ++ (int)sizeof(lzo_callback_t)) ++LZO_EXTERN(int) __lzo_init_v2(unsigned,int,int,int,int,int,int,int,int,int); ++ ++/* version functions (useful for shared libraries) */ ++LZO_EXTERN(unsigned) lzo_version(void); ++LZO_EXTERN(const char *) lzo_version_string(void); ++LZO_EXTERN(const char *) lzo_version_date(void); ++LZO_EXTERN(const lzo_charp) _lzo_version_string(void); ++LZO_EXTERN(const lzo_charp) _lzo_version_date(void); ++ ++/* string functions */ ++LZO_EXTERN(int) ++ lzo_memcmp(const lzo_voidp a, const lzo_voidp b, lzo_uint len); ++LZO_EXTERN(lzo_voidp) ++ lzo_memcpy(lzo_voidp dst, const lzo_voidp src, lzo_uint len); ++LZO_EXTERN(lzo_voidp) ++ lzo_memmove(lzo_voidp dst, const lzo_voidp src, lzo_uint len); ++LZO_EXTERN(lzo_voidp) ++ lzo_memset(lzo_voidp buf, int c, lzo_uint len); ++ ++/* checksum functions */ ++LZO_EXTERN(lzo_uint32) ++ lzo_adler32(lzo_uint32 c, const lzo_bytep buf, lzo_uint len); ++LZO_EXTERN(lzo_uint32) ++ lzo_crc32(lzo_uint32 c, const lzo_bytep buf, lzo_uint len); ++LZO_EXTERN(const lzo_uint32p) ++ lzo_get_crc32_table(void); ++ ++/* misc. */ ++LZO_EXTERN(int) _lzo_config_check(void); ++typedef union { lzo_bytep p; lzo_uint u; } __lzo_pu_u; ++typedef union { lzo_bytep p; lzo_uint32 u32; } __lzo_pu32_u; ++typedef union { void *vp; lzo_bytep bp; lzo_uint u; lzo_uint32 u32; unsigned long l; } lzo_align_t; ++ ++/* align a char pointer on a boundary that is a multiple of 'size' */ ++LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp p, lzo_uint size); ++#define LZO_PTR_ALIGN_UP(p,size) \ ++ ((p) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(p),(lzo_uint)(size))) ++ ++ ++/*********************************************************************** ++// deprecated macros - only for backward compatibility with LZO v1.xx ++************************************************************************/ ++ ++#if defined(LZO_CFG_COMPAT) ++ ++#define __LZOCONF_H 1 ++ ++#if defined(LZO_ARCH_I086) ++# define __LZO_i386 1 ++#elif defined(LZO_ARCH_I386) ++# define __LZO_i386 1 ++#endif ++ ++#if defined(LZO_OS_DOS16) ++# define __LZO_DOS 1 ++# define __LZO_DOS16 1 ++#elif defined(LZO_OS_DOS32) ++# define __LZO_DOS 1 ++#elif defined(LZO_OS_WIN16) ++# define __LZO_WIN 1 ++# define __LZO_WIN16 1 ++#elif defined(LZO_OS_WIN32) ++# define __LZO_WIN 1 ++#endif ++ ++#define __LZO_CMODEL /*empty*/ ++#define __LZO_DMODEL /*empty*/ ++#define __LZO_ENTRY __LZO_CDECL ++#define LZO_EXTERN_CDECL LZO_EXTERN ++#define LZO_ALIGN LZO_PTR_ALIGN_UP ++ ++#define lzo_compress_asm_t lzo_compress_t ++#define lzo_decompress_asm_t lzo_decompress_t ++ ++#endif /* LZO_CFG_COMPAT */ ++ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* already included */ ++ ++ ++/* vim:set ts=4 et: */ +Index: b/grub-core/lib/minilzo/lzodefs.h +=================================================================== +--- /dev/null ++++ b/grub-core/lib/minilzo/lzodefs.h +@@ -0,0 +1,1852 @@ ++/* lzodefs.h -- architecture, OS and compiler specific defines ++ ++ This file is part of the LZO real-time data compression library. ++ ++ Copyright (C) 2011 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer ++ All Rights Reserved. ++ ++ The LZO library 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. ++ ++ The LZO library 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 the LZO library; see the file COPYING. ++ If not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ Markus F.X.J. Oberhumer ++ ++ http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++ ++#ifndef __LZODEFS_H_INCLUDED ++#define __LZODEFS_H_INCLUDED 1 ++ ++#if defined(__CYGWIN32__) && !defined(__CYGWIN__) ++# define __CYGWIN__ __CYGWIN32__ ++#endif ++#if defined(__IBMCPP__) && !defined(__IBMC__) ++# define __IBMC__ __IBMCPP__ ++#endif ++#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) ++# define __INTEL_COMPILER __ICL ++#endif ++#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) ++# define _ALL_SOURCE 1 ++#endif ++#if defined(__mips__) && defined(__R5900__) ++# if !defined(__LONG_MAX__) ++# define __LONG_MAX__ 9223372036854775807L ++# endif ++#endif ++#if defined(__INTEL_COMPILER) && defined(__linux__) ++# pragma warning(disable: 193) ++#endif ++#if defined(__KEIL__) && defined(__C166__) ++# pragma warning disable = 322 ++#elif 0 && defined(__C251__) ++# pragma warning disable = 322 ++#endif ++#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) ++# if (_MSC_VER >= 1300) ++# pragma warning(disable: 4668) ++# endif ++#endif ++#if 0 && defined(__WATCOMC__) ++# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) ++# pragma warning 203 9 ++# endif ++#endif ++#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) ++# pragma option -h ++#endif ++#if 0 ++#define LZO_0xffffL 0xfffful ++#define LZO_0xffffffffL 0xfffffffful ++#else ++#define LZO_0xffffL 65535ul ++#define LZO_0xffffffffL 4294967295ul ++#endif ++#if (LZO_0xffffL == LZO_0xffffffffL) ++# error "your preprocessor is broken 1" ++#endif ++#if (16ul * 16384ul != 262144ul) ++# error "your preprocessor is broken 2" ++#endif ++#if 0 ++#if (32767 >= 4294967295ul) ++# error "your preprocessor is broken 3" ++#endif ++#if (65535u >= 4294967295ul) ++# error "your preprocessor is broken 4" ++#endif ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) ++# if !defined(MSDOS) ++# define MSDOS 1 ++# endif ++# if !defined(_MSDOS) ++# define _MSDOS 1 ++# endif ++#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) ++# if (__VERSION == 520) && (MB_LEN_MAX == 1) ++# if !defined(__AZTEC_C__) ++# define __AZTEC_C__ __VERSION ++# endif ++# if !defined(__DOS__) ++# define __DOS__ 1 ++# endif ++# endif ++#endif ++#endif ++#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) ++# define ptrdiff_t long ++# define _PTRDIFF_T_DEFINED 1 ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++# undef __LZO_RENAME_A ++# undef __LZO_RENAME_B ++# if defined(__AZTEC_C__) && defined(__DOS__) ++# define __LZO_RENAME_A 1 ++# elif defined(_MSC_VER) && defined(MSDOS) ++# if (_MSC_VER < 600) ++# define __LZO_RENAME_A 1 ++# elif (_MSC_VER < 700) ++# define __LZO_RENAME_B 1 ++# endif ++# elif defined(__TSC__) && defined(__OS2__) ++# define __LZO_RENAME_A 1 ++# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) ++# define __LZO_RENAME_A 1 ++# elif defined(__PACIFIC__) && defined(DOS) ++# if !defined(__far) ++# define __far far ++# endif ++# if !defined(__near) ++# define __near near ++# endif ++# endif ++# if defined(__LZO_RENAME_A) ++# if !defined(__cdecl) ++# define __cdecl cdecl ++# endif ++# if !defined(__far) ++# define __far far ++# endif ++# if !defined(__huge) ++# define __huge huge ++# endif ++# if !defined(__near) ++# define __near near ++# endif ++# if !defined(__pascal) ++# define __pascal pascal ++# endif ++# if !defined(__huge) ++# define __huge huge ++# endif ++# elif defined(__LZO_RENAME_B) ++# if !defined(__cdecl) ++# define __cdecl _cdecl ++# endif ++# if !defined(__far) ++# define __far _far ++# endif ++# if !defined(__huge) ++# define __huge _huge ++# endif ++# if !defined(__near) ++# define __near _near ++# endif ++# if !defined(__pascal) ++# define __pascal _pascal ++# endif ++# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) ++# if !defined(__cdecl) ++# define __cdecl cdecl ++# endif ++# if !defined(__pascal) ++# define __pascal pascal ++# endif ++# endif ++# undef __LZO_RENAME_A ++# undef __LZO_RENAME_B ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++#if defined(__AZTEC_C__) && defined(__DOS__) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++#elif defined(_MSC_VER) && defined(MSDOS) ++# if (_MSC_VER < 600) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++# endif ++# if (_MSC_VER < 700) ++# define LZO_BROKEN_INTEGRAL_PROMOTION 1 ++# define LZO_BROKEN_SIZEOF 1 ++# endif ++#elif defined(__PACIFIC__) && defined(DOS) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++#elif defined(__TURBOC__) && defined(__MSDOS__) ++# if (__TURBOC__ < 0x0150) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++# define LZO_BROKEN_INTEGRAL_PROMOTION 1 ++# endif ++# if (__TURBOC__ < 0x0200) ++# define LZO_BROKEN_SIZEOF 1 ++# endif ++# if (__TURBOC__ < 0x0400) && defined(__cplusplus) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# endif ++#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# define LZO_BROKEN_SIZEOF 1 ++#endif ++#endif ++#if defined(__WATCOMC__) && (__WATCOMC__ < 900) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++#endif ++#if defined(_CRAY) && defined(_CRAY1) ++# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 ++#endif ++#define LZO_PP_STRINGIZE(x) #x ++#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) ++#define LZO_PP_CONCAT2(a,b) a ## b ++#define LZO_PP_CONCAT3(a,b,c) a ## b ## c ++#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d ++#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e ++#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) ++#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) ++#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) ++#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) ++#if 1 ++#define LZO_CPP_STRINGIZE(x) #x ++#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) ++#define LZO_CPP_CONCAT2(a,b) a ## b ++#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c ++#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d ++#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e ++#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) ++#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) ++#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) ++#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) ++#endif ++#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) ++#if 1 && defined(__cplusplus) ++# if !defined(__STDC_CONSTANT_MACROS) ++# define __STDC_CONSTANT_MACROS 1 ++# endif ++# if !defined(__STDC_LIMIT_MACROS) ++# define __STDC_LIMIT_MACROS 1 ++# endif ++#endif ++#if defined(__cplusplus) ++# define LZO_EXTERN_C extern "C" ++#else ++# define LZO_EXTERN_C extern ++#endif ++#if !defined(__LZO_OS_OVERRIDE) ++#if (LZO_OS_FREESTANDING) ++# define LZO_INFO_OS "freestanding" ++#elif (LZO_OS_EMBEDDED) ++# define LZO_INFO_OS "embedded" ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) ++# define LZO_OS_EMBEDDED 1 ++# define LZO_INFO_OS "embedded" ++#elif defined(__CYGWIN__) && defined(__GNUC__) ++# define LZO_OS_CYGWIN 1 ++# define LZO_INFO_OS "cygwin" ++#elif defined(__EMX__) && defined(__GNUC__) ++# define LZO_OS_EMX 1 ++# define LZO_INFO_OS "emx" ++#elif defined(__BEOS__) ++# define LZO_OS_BEOS 1 ++# define LZO_INFO_OS "beos" ++#elif defined(__Lynx__) ++# define LZO_OS_LYNXOS 1 ++# define LZO_INFO_OS "lynxos" ++#elif defined(__OS400__) ++# define LZO_OS_OS400 1 ++# define LZO_INFO_OS "os400" ++#elif defined(__QNX__) ++# define LZO_OS_QNX 1 ++# define LZO_INFO_OS "qnx" ++#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++#elif defined(__BORLANDC__) && defined(__DPMI16__) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++#elif defined(__ZTC__) && defined(DOS386) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++#elif defined(__OS2__) || defined(__OS2V2__) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_OS216 1 ++# define LZO_INFO_OS "os216" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_OS2 1 ++# define LZO_INFO_OS "os2" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) ++# define LZO_OS_WIN64 1 ++# define LZO_INFO_OS "win64" ++#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++#elif defined(__MWERKS__) && defined(__INTEL__) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_WIN16 1 ++# define LZO_INFO_OS "win16" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__WATCOMC__) ++# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++# elif defined(__NT__) && (__WATCOMC__ < 1100) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++# elif defined(__linux__) || defined(__LINUX__) ++# define LZO_OS_POSIX 1 ++# define LZO_INFO_OS "posix" ++# else ++# error "please specify a target using the -bt compiler option" ++# endif ++#elif defined(__palmos__) ++# define LZO_OS_PALMOS 1 ++# define LZO_INFO_OS "palmos" ++#elif defined(__TOS__) || defined(__atarist__) ++# define LZO_OS_TOS 1 ++# define LZO_INFO_OS "tos" ++#elif defined(macintosh) && !defined(__ppc__) ++# define LZO_OS_MACCLASSIC 1 ++# define LZO_INFO_OS "macclassic" ++#elif defined(__VMS) ++# define LZO_OS_VMS 1 ++# define LZO_INFO_OS "vms" ++#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) ++# define LZO_OS_CONSOLE 1 ++# define LZO_OS_CONSOLE_PS2 1 ++# define LZO_INFO_OS "console" ++# define LZO_INFO_OS_CONSOLE "ps2" ++#elif (defined(__mips__) && defined(__psp__)) ++# define LZO_OS_CONSOLE 1 ++# define LZO_OS_CONSOLE_PSP 1 ++# define LZO_INFO_OS "console" ++# define LZO_INFO_OS_CONSOLE "psp" ++#else ++# define LZO_OS_POSIX 1 ++# define LZO_INFO_OS "posix" ++#endif ++#if (LZO_OS_POSIX) ++# if defined(_AIX) || defined(__AIX__) || defined(__aix__) ++# define LZO_OS_POSIX_AIX 1 ++# define LZO_INFO_OS_POSIX "aix" ++# elif defined(__FreeBSD__) ++# define LZO_OS_POSIX_FREEBSD 1 ++# define LZO_INFO_OS_POSIX "freebsd" ++# elif defined(__hpux__) || defined(__hpux) ++# define LZO_OS_POSIX_HPUX 1 ++# define LZO_INFO_OS_POSIX "hpux" ++# elif defined(__INTERIX) ++# define LZO_OS_POSIX_INTERIX 1 ++# define LZO_INFO_OS_POSIX "interix" ++# elif defined(__IRIX__) || defined(__irix__) ++# define LZO_OS_POSIX_IRIX 1 ++# define LZO_INFO_OS_POSIX "irix" ++# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) ++# define LZO_OS_POSIX_LINUX 1 ++# define LZO_INFO_OS_POSIX "linux" ++# elif defined(__APPLE__) || defined(__MACOS__) ++# define LZO_OS_POSIX_MACOSX 1 ++# define LZO_INFO_OS_POSIX "macosx" ++# elif defined(__minix__) || defined(__minix) ++# define LZO_OS_POSIX_MINIX 1 ++# define LZO_INFO_OS_POSIX "minix" ++# elif defined(__NetBSD__) ++# define LZO_OS_POSIX_NETBSD 1 ++# define LZO_INFO_OS_POSIX "netbsd" ++# elif defined(__OpenBSD__) ++# define LZO_OS_POSIX_OPENBSD 1 ++# define LZO_INFO_OS_POSIX "openbsd" ++# elif defined(__osf__) ++# define LZO_OS_POSIX_OSF 1 ++# define LZO_INFO_OS_POSIX "osf" ++# elif defined(__solaris__) || defined(__sun) ++# if defined(__SVR4) || defined(__svr4__) ++# define LZO_OS_POSIX_SOLARIS 1 ++# define LZO_INFO_OS_POSIX "solaris" ++# else ++# define LZO_OS_POSIX_SUNOS 1 ++# define LZO_INFO_OS_POSIX "sunos" ++# endif ++# elif defined(__ultrix__) || defined(__ultrix) ++# define LZO_OS_POSIX_ULTRIX 1 ++# define LZO_INFO_OS_POSIX "ultrix" ++# elif defined(_UNICOS) ++# define LZO_OS_POSIX_UNICOS 1 ++# define LZO_INFO_OS_POSIX "unicos" ++# else ++# define LZO_OS_POSIX_UNKNOWN 1 ++# define LZO_INFO_OS_POSIX "unknown" ++# endif ++#endif ++#endif ++#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++# if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (UINT_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) ++# define LZO_CC_CILLY 1 ++# define LZO_INFO_CC "Cilly" ++# if defined(__CILLY__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) ++# define LZO_CC_SDCC 1 ++# define LZO_INFO_CC "sdcc" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) ++#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) ++# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) ++# define LZO_INFO_CC "Pathscale C" ++# define LZO_INFO_CCVER __PATHSCALE__ ++#elif defined(__INTEL_COMPILER) ++# define LZO_CC_INTELC 1 ++# define LZO_INFO_CC "Intel C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) ++# if defined(_WIN32) || defined(_WIN64) ++# define LZO_CC_SYNTAX_MSC 1 ++# else ++# define LZO_CC_SYNTAX_GNUC 1 ++# endif ++#elif defined(__POCC__) && defined(_WIN32) ++# define LZO_CC_PELLESC 1 ++# define LZO_INFO_CC "Pelles C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) ++#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) ++# if defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# else ++# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# endif ++# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) ++# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) ++# else ++# define LZO_CC_CLANG_CLANG 0x010000L ++# endif ++# define LZO_CC_CLANG LZO_CC_CLANG_GNUC ++# define LZO_INFO_CC "clang" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) ++# if defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# else ++# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# endif ++# define LZO_CC_LLVM LZO_CC_LLVM_GNUC ++# define LZO_INFO_CC "llvm-gcc" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__GNUC__) && defined(__VERSION__) ++# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# elif defined(__GNUC_MINOR__) ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# else ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L) ++# endif ++# define LZO_INFO_CC "gcc" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__ACK__) && defined(_ACK) ++# define LZO_CC_ACK 1 ++# define LZO_INFO_CC "Amsterdam Compiler Kit C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__AZTEC_C__) ++# define LZO_CC_AZTECC 1 ++# define LZO_INFO_CC "Aztec C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) ++#elif defined(__CODEGEARC__) ++# define LZO_CC_CODEGEARC 1 ++# define LZO_INFO_CC "CodeGear C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) ++#elif defined(__BORLANDC__) ++# define LZO_CC_BORLANDC 1 ++# define LZO_INFO_CC "Borland C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) ++#elif defined(_CRAYC) && defined(_RELEASE) ++# define LZO_CC_CRAYC 1 ++# define LZO_INFO_CC "Cray C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) ++#elif defined(__DMC__) && defined(__SC__) ++# define LZO_CC_DMC 1 ++# define LZO_INFO_CC "Digital Mars C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) ++#elif defined(__DECC) ++# define LZO_CC_DECC 1 ++# define LZO_INFO_CC "DEC C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) ++#elif defined(__HIGHC__) ++# define LZO_CC_HIGHC 1 ++# define LZO_INFO_CC "MetaWare High C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__IAR_SYSTEMS_ICC__) ++# define LZO_CC_IARC 1 ++# define LZO_INFO_CC "IAR C" ++# if defined(__VER__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__IBMC__) ++# define LZO_CC_IBMC 1 ++# define LZO_INFO_CC "IBM C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) ++#elif defined(__KEIL__) && defined(__C166__) ++# define LZO_CC_KEILC 1 ++# define LZO_INFO_CC "Keil C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) ++#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) ++# define LZO_CC_LCCWIN32 1 ++# define LZO_INFO_CC "lcc-win32" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__LCC__) ++# define LZO_CC_LCC 1 ++# define LZO_INFO_CC "lcc" ++# if defined(__LCC_VERSION__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(_MSC_VER) ++# define LZO_CC_MSC 1 ++# define LZO_INFO_CC "Microsoft C" ++# if defined(_MSC_FULL_VER) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) ++# else ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) ++# endif ++#elif defined(__MWERKS__) ++# define LZO_CC_MWERKS 1 ++# define LZO_INFO_CC "Metrowerks C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) ++#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) ++# define LZO_CC_NDPC 1 ++# define LZO_INFO_CC "Microway NDP C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__PACIFIC__) ++# define LZO_CC_PACIFICC 1 ++# define LZO_INFO_CC "Pacific C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) ++#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) ++# define LZO_CC_PGI 1 ++# define LZO_INFO_CC "Portland Group PGI C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__PUREC__) && defined(__TOS__) ++# define LZO_CC_PUREC 1 ++# define LZO_INFO_CC "Pure C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) ++#elif defined(__SC__) && defined(__ZTC__) ++# define LZO_CC_SYMANTECC 1 ++# define LZO_INFO_CC "Symantec C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) ++#elif defined(__SUNPRO_C) ++# define LZO_INFO_CC "SunPro C" ++# if ((__SUNPRO_C)+0 > 0) ++# define LZO_CC_SUNPROC __SUNPRO_C ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) ++# else ++# define LZO_CC_SUNPROC 1 ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__SUNPRO_CC) ++# define LZO_INFO_CC "SunPro C" ++# if ((__SUNPRO_CC)+0 > 0) ++# define LZO_CC_SUNPROC __SUNPRO_CC ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) ++# else ++# define LZO_CC_SUNPROC 1 ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__TINYC__) ++# define LZO_CC_TINYC 1 ++# define LZO_INFO_CC "Tiny C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) ++#elif defined(__TSC__) ++# define LZO_CC_TOPSPEEDC 1 ++# define LZO_INFO_CC "TopSpeed C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) ++#elif defined(__WATCOMC__) ++# define LZO_CC_WATCOMC 1 ++# define LZO_INFO_CC "Watcom C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) ++#elif defined(__TURBOC__) ++# define LZO_CC_TURBOC 1 ++# define LZO_INFO_CC "Turbo C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) ++#elif defined(__ZTC__) ++# define LZO_CC_ZORTECHC 1 ++# define LZO_INFO_CC "Zortech C" ++# if (__ZTC__ == 0x310) ++# define LZO_INFO_CCVER "0x310" ++# else ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) ++# endif ++#else ++# define LZO_CC_UNKNOWN 1 ++# define LZO_INFO_CC "unknown" ++# define LZO_INFO_CCVER "unknown" ++#endif ++#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) ++# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" ++#endif ++#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) ++# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) ++# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) ++# define LZO_ARCH_CRAY_MPP 1 ++# elif defined(_CRAY1) ++# define LZO_ARCH_CRAY_PVP 1 ++# endif ++# endif ++#endif ++#if !defined(__LZO_ARCH_OVERRIDE) ++#if (LZO_ARCH_GENERIC) ++# define LZO_INFO_ARCH "generic" ++#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++# define LZO_ARCH_I086 1 ++# define LZO_ARCH_IA16 1 ++# define LZO_INFO_ARCH "i086" ++#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) ++# define LZO_ARCH_ALPHA 1 ++# define LZO_INFO_ARCH "alpha" ++#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) ++# define LZO_ARCH_ALPHA 1 ++# define LZO_INFO_ARCH "alpha" ++#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) ++# define LZO_ARCH_AMD64 1 ++# define LZO_INFO_ARCH "amd64" ++#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) ++# define LZO_ARCH_ARM 1 ++# define LZO_ARCH_ARM_THUMB 1 ++# define LZO_INFO_ARCH "arm_thumb" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) ++# define LZO_ARCH_ARM 1 ++# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) ++# define LZO_ARCH_ARM_THUMB 1 ++# define LZO_INFO_ARCH "arm_thumb" ++# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) ++# define LZO_INFO_ARCH "arm" ++# else ++# define LZO_INFO_ARCH "arm" ++# endif ++#elif defined(__arm__) || defined(_M_ARM) ++# define LZO_ARCH_ARM 1 ++# define LZO_INFO_ARCH "arm" ++#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) ++# define LZO_ARCH_AVR 1 ++# define LZO_INFO_ARCH "avr" ++#elif defined(__avr32__) || defined(__AVR32__) ++# define LZO_ARCH_AVR32 1 ++# define LZO_INFO_ARCH "avr32" ++#elif defined(__bfin__) ++# define LZO_ARCH_BLACKFIN 1 ++# define LZO_INFO_ARCH "blackfin" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) ++# define LZO_ARCH_C166 1 ++# define LZO_INFO_ARCH "c166" ++#elif defined(__cris__) ++# define LZO_ARCH_CRIS 1 ++# define LZO_INFO_ARCH "cris" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) ++# define LZO_ARCH_EZ80 1 ++# define LZO_INFO_ARCH "ez80" ++#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) ++# define LZO_ARCH_H8300 1 ++# define LZO_INFO_ARCH "h8300" ++#elif defined(__hppa__) || defined(__hppa) ++# define LZO_ARCH_HPPA 1 ++# define LZO_INFO_ARCH "hppa" ++#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif (LZO_CC_ZORTECHC && defined(__I86__)) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) ++# define LZO_ARCH_IA64 1 ++# define LZO_INFO_ARCH "ia64" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) ++# define LZO_ARCH_M16C 1 ++# define LZO_INFO_ARCH "m16c" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) ++# define LZO_ARCH_M16C 1 ++# define LZO_INFO_ARCH "m16c" ++#elif defined(__m32r__) ++# define LZO_ARCH_M32R 1 ++# define LZO_INFO_ARCH "m32r" ++#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) ++# define LZO_ARCH_M68K 1 ++# define LZO_INFO_ARCH "m68k" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) ++# define LZO_ARCH_MCS251 1 ++# define LZO_INFO_ARCH "mcs251" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) ++# define LZO_ARCH_MCS51 1 ++# define LZO_INFO_ARCH "mcs51" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) ++# define LZO_ARCH_MCS51 1 ++# define LZO_INFO_ARCH "mcs51" ++#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) ++# define LZO_ARCH_MIPS 1 ++# define LZO_INFO_ARCH "mips" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) ++# define LZO_ARCH_MSP430 1 ++# define LZO_INFO_ARCH "msp430" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) ++# define LZO_ARCH_MSP430 1 ++# define LZO_INFO_ARCH "msp430" ++#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) ++# define LZO_ARCH_POWERPC 1 ++# define LZO_INFO_ARCH "powerpc" ++#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) ++# define LZO_ARCH_S390 1 ++# define LZO_INFO_ARCH "s390" ++#elif defined(__sh__) || defined(_M_SH) ++# define LZO_ARCH_SH 1 ++# define LZO_INFO_ARCH "sh" ++#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) ++# define LZO_ARCH_SPARC 1 ++# define LZO_INFO_ARCH "sparc" ++#elif defined(__SPU__) ++# define LZO_ARCH_SPU 1 ++# define LZO_INFO_ARCH "spu" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) ++# define LZO_ARCH_Z80 1 ++# define LZO_INFO_ARCH "z80" ++#elif (LZO_ARCH_CRAY_PVP) ++# if defined(_CRAYSV1) ++# define LZO_ARCH_CRAY_SV1 1 ++# define LZO_INFO_ARCH "cray_sv1" ++# elif (_ADDR64) ++# define LZO_ARCH_CRAY_T90 1 ++# define LZO_INFO_ARCH "cray_t90" ++# elif (_ADDR32) ++# define LZO_ARCH_CRAY_YMP 1 ++# define LZO_INFO_ARCH "cray_ymp" ++# else ++# define LZO_ARCH_CRAY_XMP 1 ++# define LZO_INFO_ARCH "cray_xmp" ++# endif ++#else ++# define LZO_ARCH_UNKNOWN 1 ++# define LZO_INFO_ARCH "unknown" ++#endif ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) ++# error "FIXME - missing define for CPU architecture" ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) ++# error "FIXME - missing WIN32 define for CPU architecture" ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) ++# error "FIXME - missing WIN64 define for CPU architecture" ++#endif ++#if (LZO_OS_OS216 || LZO_OS_WIN16) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#endif ++#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) ++# error "this should not happen" ++#endif ++#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) ++# error "this should not happen" ++#endif ++#if (LZO_ARCH_I086) ++# if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if (LZO_ARCH_I386) ++# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) ++# error "this should not happen" ++# endif ++# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if !defined(__LZO_MM_OVERRIDE) ++#if (LZO_ARCH_I086) ++#if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++#endif ++#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) ++# define LZO_MM_TINY 1 ++#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) ++# define LZO_MM_HUGE 1 ++#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) ++# define LZO_MM_SMALL 1 ++#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) ++# define LZO_MM_MEDIUM 1 ++#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) ++# define LZO_MM_COMPACT 1 ++#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) ++# define LZO_MM_LARGE 1 ++#elif (LZO_CC_AZTECC) ++# if defined(_LARGE_CODE) && defined(_LARGE_DATA) ++# define LZO_MM_LARGE 1 ++# elif defined(_LARGE_CODE) ++# define LZO_MM_MEDIUM 1 ++# elif defined(_LARGE_DATA) ++# define LZO_MM_COMPACT 1 ++# else ++# define LZO_MM_SMALL 1 ++# endif ++#elif (LZO_CC_ZORTECHC && defined(__VCM__)) ++# define LZO_MM_LARGE 1 ++#else ++# error "unknown memory model" ++#endif ++#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++#define LZO_HAVE_MM_HUGE_PTR 1 ++#define LZO_HAVE_MM_HUGE_ARRAY 1 ++#if (LZO_MM_TINY) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#endif ++#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) ++# undef LZO_HAVE_MM_HUGE_PTR ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#elif (LZO_CC_MSC && defined(_QC)) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++# if (_MSC_VER < 600) ++# undef LZO_HAVE_MM_HUGE_PTR ++# endif ++#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#endif ++#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) ++# if (LZO_OS_DOS16) ++# error "this should not happen" ++# elif (LZO_CC_ZORTECHC) ++# else ++# error "this should not happen" ++# endif ++#endif ++#ifdef __cplusplus ++extern "C" { ++#endif ++#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) ++# define LZO_MM_AHSHIFT 12 ++#elif (LZO_CC_WATCOMC) ++ extern unsigned char _HShift; ++# define LZO_MM_AHSHIFT ((unsigned) _HShift) ++#else ++# error "FIXME - implement LZO_MM_AHSHIFT" ++#endif ++#ifdef __cplusplus ++} ++#endif ++#endif ++#elif (LZO_ARCH_C166) ++#if !defined(__MODEL__) ++# error "FIXME - C166 __MODEL__" ++#elif ((__MODEL__) == 0) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 1) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - C166 __MODEL__" ++#endif ++#elif (LZO_ARCH_MCS251) ++#if !defined(__MODEL__) ++# error "FIXME - MCS251 __MODEL__" ++#elif ((__MODEL__) == 0) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - MCS251 __MODEL__" ++#endif ++#elif (LZO_ARCH_MCS51) ++#if !defined(__MODEL__) ++# error "FIXME - MCS51 __MODEL__" ++#elif ((__MODEL__) == 1) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - MCS51 __MODEL__" ++#endif ++#elif (LZO_ARCH_CRAY_PVP) ++# define LZO_MM_PVP 1 ++#else ++# define LZO_MM_FLAT 1 ++#endif ++#if (LZO_MM_COMPACT) ++# define LZO_INFO_MM "compact" ++#elif (LZO_MM_FLAT) ++# define LZO_INFO_MM "flat" ++#elif (LZO_MM_HUGE) ++# define LZO_INFO_MM "huge" ++#elif (LZO_MM_LARGE) ++# define LZO_INFO_MM "large" ++#elif (LZO_MM_MEDIUM) ++# define LZO_INFO_MM "medium" ++#elif (LZO_MM_PVP) ++# define LZO_INFO_MM "pvp" ++#elif (LZO_MM_SMALL) ++# define LZO_INFO_MM "small" ++#elif (LZO_MM_TINY) ++# define LZO_INFO_MM "tiny" ++#else ++# error "unknown memory model" ++#endif ++#endif ++#if defined(SIZEOF_SHORT) ++# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) ++#endif ++#if defined(SIZEOF_INT) ++# define LZO_SIZEOF_INT (SIZEOF_INT) ++#endif ++#if defined(SIZEOF_LONG) ++# define LZO_SIZEOF_LONG (SIZEOF_LONG) ++#endif ++#if defined(SIZEOF_LONG_LONG) ++# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) ++#endif ++#if defined(SIZEOF___INT16) ++# define LZO_SIZEOF___INT16 (SIZEOF___INT16) ++#endif ++#if defined(SIZEOF___INT32) ++# define LZO_SIZEOF___INT32 (SIZEOF___INT32) ++#endif ++#if defined(SIZEOF___INT64) ++# define LZO_SIZEOF___INT64 (SIZEOF___INT64) ++#endif ++#if defined(SIZEOF_VOID_P) ++# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) ++#endif ++#if defined(SIZEOF_SIZE_T) ++# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) ++#endif ++#if defined(SIZEOF_PTRDIFF_T) ++# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) ++#endif ++#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) ++#if !defined(LZO_SIZEOF_SHORT) ++# if (LZO_ARCH_CRAY_PVP) ++# define LZO_SIZEOF_SHORT 8 ++# elif (USHRT_MAX == LZO_0xffffL) ++# define LZO_SIZEOF_SHORT 2 ++# elif (__LZO_LSR(USHRT_MAX,7) == 1) ++# define LZO_SIZEOF_SHORT 1 ++# elif (__LZO_LSR(USHRT_MAX,15) == 1) ++# define LZO_SIZEOF_SHORT 2 ++# elif (__LZO_LSR(USHRT_MAX,31) == 1) ++# define LZO_SIZEOF_SHORT 4 ++# elif (__LZO_LSR(USHRT_MAX,63) == 1) ++# define LZO_SIZEOF_SHORT 8 ++# elif (__LZO_LSR(USHRT_MAX,127) == 1) ++# define LZO_SIZEOF_SHORT 16 ++# else ++# error "LZO_SIZEOF_SHORT" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_INT) ++# if (LZO_ARCH_CRAY_PVP) ++# define LZO_SIZEOF_INT 8 ++# elif (UINT_MAX == LZO_0xffffL) ++# define LZO_SIZEOF_INT 2 ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_SIZEOF_INT 4 ++# elif (__LZO_LSR(UINT_MAX,7) == 1) ++# define LZO_SIZEOF_INT 1 ++# elif (__LZO_LSR(UINT_MAX,15) == 1) ++# define LZO_SIZEOF_INT 2 ++# elif (__LZO_LSR(UINT_MAX,31) == 1) ++# define LZO_SIZEOF_INT 4 ++# elif (__LZO_LSR(UINT_MAX,63) == 1) ++# define LZO_SIZEOF_INT 8 ++# elif (__LZO_LSR(UINT_MAX,127) == 1) ++# define LZO_SIZEOF_INT 16 ++# else ++# error "LZO_SIZEOF_INT" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_LONG) ++# if (ULONG_MAX == LZO_0xffffffffL) ++# define LZO_SIZEOF_LONG 4 ++# elif (__LZO_LSR(ULONG_MAX,7) == 1) ++# define LZO_SIZEOF_LONG 1 ++# elif (__LZO_LSR(ULONG_MAX,15) == 1) ++# define LZO_SIZEOF_LONG 2 ++# elif (__LZO_LSR(ULONG_MAX,31) == 1) ++# define LZO_SIZEOF_LONG 4 ++# elif (__LZO_LSR(ULONG_MAX,63) == 1) ++# define LZO_SIZEOF_LONG 8 ++# elif (__LZO_LSR(ULONG_MAX,127) == 1) ++# define LZO_SIZEOF_LONG 16 ++# else ++# error "LZO_SIZEOF_LONG" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) ++#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) ++# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) ++# if (LZO_CC_GNUC >= 0x030300ul) ++# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) ++# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG ++# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) ++# define LZO_SIZEOF_LONG_LONG 4 ++# endif ++# endif ++# endif ++#endif ++#endif ++#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) ++#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) ++#if (LZO_ARCH_I086 && LZO_CC_DMC) ++#elif (LZO_CC_CILLY) && defined(__GNUC__) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_OS_WIN64 || defined(_WIN64)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) ++# define LZO_SIZEOF___INT64 8 ++#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) ++#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ++# define LZO_SIZEOF_LONG_LONG 8 ++#endif ++#endif ++#endif ++#if defined(__cplusplus) && (LZO_CC_GNUC) ++# if (LZO_CC_GNUC < 0x020800ul) ++# undef LZO_SIZEOF_LONG_LONG ++# endif ++#endif ++#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) ++# undef LZO_SIZEOF_LONG_LONG ++#endif ++#if !defined(LZO_SIZEOF_VOID_P) ++#if (LZO_ARCH_I086) ++# define __LZO_WORDSIZE 2 ++# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) ++# define LZO_SIZEOF_VOID_P 2 ++# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# error "LZO_MM" ++# endif ++#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) ++# define __LZO_WORDSIZE 1 ++# define LZO_SIZEOF_VOID_P 2 ++#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) ++# define LZO_SIZEOF_VOID_P 2 ++#elif (LZO_ARCH_H8300) ++# if defined(__NORMAL_MODE__) ++# define __LZO_WORDSIZE 4 ++# define LZO_SIZEOF_VOID_P 2 ++# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) ++# define __LZO_WORDSIZE 4 ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# define __LZO_WORDSIZE 2 ++# define LZO_SIZEOF_VOID_P 2 ++# endif ++# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT ++# endif ++#elif (LZO_ARCH_M16C) ++# define __LZO_WORDSIZE 2 ++# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# define LZO_SIZEOF_VOID_P 2 ++# endif ++#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) ++# define __LZO_WORDSIZE 8 ++# define LZO_SIZEOF_VOID_P 4 ++#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) ++# define __LZO_WORDSIZE 8 ++# define LZO_SIZEOF_VOID_P 8 ++#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) ++# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (LZO_OS_OS400 || defined(__OS400__)) ++# define __LZO_WORDSIZE LZO_SIZEOF_LONG ++# define LZO_SIZEOF_VOID_P 16 ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) ++# define LZO_SIZEOF_VOID_P 8 ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (LZO_ARCH_SPU) ++# if 0 ++# define __LZO_WORDSIZE 16 ++# endif ++# define LZO_SIZEOF_VOID_P 4 ++#else ++# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG ++#endif ++#endif ++#if !defined(LZO_WORDSIZE) ++# if defined(__LZO_WORDSIZE) ++# define LZO_WORDSIZE __LZO_WORDSIZE ++# else ++# define LZO_WORDSIZE LZO_SIZEOF_VOID_P ++# endif ++#endif ++#if !defined(LZO_SIZEOF_SIZE_T) ++#if (LZO_ARCH_I086 || LZO_ARCH_M16C) ++# define LZO_SIZEOF_SIZE_T 2 ++#else ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P ++#endif ++#endif ++#if !defined(LZO_SIZEOF_PTRDIFF_T) ++#if (LZO_ARCH_I086) ++# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P ++# elif (LZO_MM_COMPACT || LZO_MM_LARGE) ++# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) ++# define LZO_SIZEOF_PTRDIFF_T 4 ++# else ++# define LZO_SIZEOF_PTRDIFF_T 2 ++# endif ++# else ++# error "LZO_MM" ++# endif ++#else ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T ++#endif ++#endif ++#if (LZO_ABI_NEUTRAL_ENDIAN) ++# undef LZO_ABI_BIG_ENDIAN ++# undef LZO_ABI_LITTLE_ENDIAN ++#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) ++#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) ++# if (__LITTLE_ENDIAN__ == 1) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++# else ++# define LZO_ABI_BIG_ENDIAN 1 ++# endif ++#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#endif ++#endif ++#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) ++# error "this should not happen" ++#endif ++#if (LZO_ABI_BIG_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "be" ++#elif (LZO_ABI_LITTLE_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "le" ++#elif (LZO_ABI_NEUTRAL_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "neutral" ++#endif ++#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) ++# define LZO_ABI_I8LP16 1 ++# define LZO_INFO_ABI_PM "i8lp16" ++#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) ++# define LZO_ABI_ILP16 1 ++# define LZO_INFO_ABI_PM "ilp16" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) ++# define LZO_ABI_ILP32 1 ++# define LZO_INFO_ABI_PM "ilp32" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) ++# define LZO_ABI_LLP64 1 ++# define LZO_INFO_ABI_PM "llp64" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) ++# define LZO_ABI_LP64 1 ++# define LZO_INFO_ABI_PM "lp64" ++#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) ++# define LZO_ABI_ILP64 1 ++# define LZO_INFO_ABI_PM "ilp64" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) ++# define LZO_ABI_IP32L64 1 ++# define LZO_INFO_ABI_PM "ip32l64" ++#endif ++#if !defined(__LZO_LIBC_OVERRIDE) ++#if (LZO_LIBC_NAKED) ++# define LZO_INFO_LIBC "naked" ++#elif (LZO_LIBC_FREESTANDING) ++# define LZO_INFO_LIBC "freestanding" ++#elif (LZO_LIBC_MOSTLY_FREESTANDING) ++# define LZO_INFO_LIBC "mfreestanding" ++#elif (LZO_LIBC_ISOC90) ++# define LZO_INFO_LIBC "isoc90" ++#elif (LZO_LIBC_ISOC99) ++# define LZO_INFO_LIBC "isoc99" ++#elif defined(__dietlibc__) ++# define LZO_LIBC_DIETLIBC 1 ++# define LZO_INFO_LIBC "dietlibc" ++#elif defined(_NEWLIB_VERSION) ++# define LZO_LIBC_NEWLIB 1 ++# define LZO_INFO_LIBC "newlib" ++#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) ++# if defined(__UCLIBC_SUBLEVEL__) ++# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) ++# else ++# define LZO_LIBC_UCLIBC 0x00090bL ++# endif ++# define LZO_INFO_LIBC "uclibc" ++#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) ++# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) ++# define LZO_INFO_LIBC "glibc" ++#elif (LZO_CC_MWERKS) && defined(__MSL__) ++# define LZO_LIBC_MSL __MSL__ ++# define LZO_INFO_LIBC "msl" ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) ++# define LZO_LIBC_ISOC90 1 ++# define LZO_INFO_LIBC "isoc90" ++#else ++# define LZO_LIBC_DEFAULT 1 ++# define LZO_INFO_LIBC "default" ++#endif ++#endif ++#if !defined(__lzo_gnuc_extension__) ++#if (LZO_CC_GNUC >= 0x020800ul) ++# define __lzo_gnuc_extension__ __extension__ ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_gnuc_extension__ __extension__ ++#else ++# define __lzo_gnuc_extension__ /*empty*/ ++#endif ++#endif ++#if !defined(__lzo_ua_volatile) ++# define __lzo_ua_volatile volatile ++#endif ++#if !defined(__lzo_alignof) ++#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) ++# define __lzo_alignof(e) __alignof__(e) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) ++# define __lzo_alignof(e) __alignof__(e) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) ++# define __lzo_alignof(e) __alignof(e) ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_alignof(e) __alignof__(e) ++#endif ++#endif ++#if defined(__lzo_alignof) ++# define __lzo_HAVE_alignof 1 ++#endif ++#if !defined(__lzo_constructor) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_constructor __attribute__((__constructor__,__used__)) ++#elif (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_constructor __attribute__((__constructor__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_constructor __attribute__((__constructor__)) ++#endif ++#endif ++#if defined(__lzo_constructor) ++# define __lzo_HAVE_constructor 1 ++#endif ++#if !defined(__lzo_destructor) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_destructor __attribute__((__destructor__,__used__)) ++#elif (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_destructor __attribute__((__destructor__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_destructor __attribute__((__destructor__)) ++#endif ++#endif ++#if defined(__lzo_destructor) ++# define __lzo_HAVE_destructor 1 ++#endif ++#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) ++# error "this should not happen" ++#endif ++#if !defined(__lzo_inline) ++#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) ++#elif defined(__cplusplus) ++# define __lzo_inline inline ++#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) ++# define __lzo_inline __inline ++#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) ++# define __lzo_inline __inline__ ++#elif (LZO_CC_DMC) ++# define __lzo_inline __inline ++#elif (LZO_CC_INTELC) ++# define __lzo_inline __inline ++#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) ++# define __lzo_inline __inline ++#elif (LZO_CC_MSC && (_MSC_VER >= 900)) ++# define __lzo_inline __inline ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_inline __inline__ ++#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ++# define __lzo_inline inline ++#endif ++#endif ++#if defined(__lzo_inline) ++# define __lzo_HAVE_inline 1 ++#else ++# define __lzo_inline /*empty*/ ++#endif ++#if !defined(__lzo_forceinline) ++#if (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) ++# define __lzo_forceinline __forceinline ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) ++# define __lzo_forceinline __forceinline ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#endif ++#endif ++#if defined(__lzo_forceinline) ++# define __lzo_HAVE_forceinline 1 ++#else ++# define __lzo_forceinline /*empty*/ ++#endif ++#if !defined(__lzo_noinline) ++#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) ++# define __lzo_noinline __attribute__((__noinline__,__used__)) ++#elif (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) ++# define __lzo_noinline __declspec(noinline) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) ++# define __lzo_noinline __declspec(noinline) ++#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) ++# if defined(__cplusplus) ++# else ++# define __lzo_noinline __declspec(noinline) ++# endif ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_noinline __attribute__((__noinline__)) ++#endif ++#endif ++#if defined(__lzo_noinline) ++# define __lzo_HAVE_noinline 1 ++#else ++# define __lzo_noinline /*empty*/ ++#endif ++#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) ++# error "this should not happen" ++#endif ++#if !defined(__lzo_noreturn) ++#if (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) ++# define __lzo_noreturn __declspec(noreturn) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) ++# define __lzo_noreturn __declspec(noreturn) ++#endif ++#endif ++#if defined(__lzo_noreturn) ++# define __lzo_HAVE_noreturn 1 ++#else ++# define __lzo_noreturn /*empty*/ ++#endif ++#if !defined(__lzo_nothrow) ++#if (LZO_CC_GNUC >= 0x030300ul) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) ++# define __lzo_nothrow __declspec(nothrow) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) ++# define __lzo_nothrow __declspec(nothrow) ++#endif ++#endif ++#if defined(__lzo_nothrow) ++# define __lzo_HAVE_nothrow 1 ++#else ++# define __lzo_nothrow /*empty*/ ++#endif ++#if !defined(__lzo_restrict) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_CLANG || LZO_CC_LLVM) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) ++# define __lzo_restrict __restrict ++#endif ++#endif ++#if defined(__lzo_restrict) ++# define __lzo_HAVE_restrict 1 ++#else ++# define __lzo_restrict /*empty*/ ++#endif ++#if !defined(__lzo_likely) && !defined(__lzo_unlikely) ++#if (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#endif ++#endif ++#if defined(__lzo_likely) ++# define __lzo_HAVE_likely 1 ++#else ++# define __lzo_likely(e) (e) ++#endif ++#if defined(__lzo_unlikely) ++# define __lzo_HAVE_unlikely 1 ++#else ++# define __lzo_unlikely(e) (e) ++#endif ++#if !defined(LZO_UNUSED) ++# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) ++# define LZO_UNUSED(var) ((void) &var) ++# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) ++# define LZO_UNUSED(var) if (&var) ; else ++# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_UNUSED(var) ((void) var) ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_UNUSED(var) if (&var) ; else ++# elif (LZO_CC_KEILC) ++# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} ++# elif (LZO_CC_PACIFICC) ++# define LZO_UNUSED(var) ((void) sizeof(var)) ++# elif (LZO_CC_WATCOMC) && defined(__cplusplus) ++# define LZO_UNUSED(var) ((void) var) ++# else ++# define LZO_UNUSED(var) ((void) &var) ++# endif ++#endif ++#if !defined(LZO_UNUSED_FUNC) ++# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) ++# define LZO_UNUSED_FUNC(func) ((void) func) ++# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) ++# define LZO_UNUSED_FUNC(func) if (func) ; else ++# elif (LZO_CC_CLANG || LZO_CC_LLVM) ++# define LZO_UNUSED_FUNC(func) ((void) &func) ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_UNUSED_FUNC(func) if (func) ; else ++# elif (LZO_CC_MSC) ++# define LZO_UNUSED_FUNC(func) ((void) &func) ++# elif (LZO_CC_KEILC || LZO_CC_PELLESC) ++# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} ++# else ++# define LZO_UNUSED_FUNC(func) ((void) func) ++# endif ++#endif ++#if !defined(LZO_UNUSED_LABEL) ++# if (LZO_CC_WATCOMC) && defined(__cplusplus) ++# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l ++# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) ++# define LZO_UNUSED_LABEL(l) if (0) goto l ++# else ++# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l ++# endif ++#endif ++#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) ++# if 0 ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var ++# elif 0 && (LZO_CC_GNUC) ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var ++# else ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init ++# endif ++#endif ++#if !defined(LZO_UNCONST_CAST) ++# if 0 && defined(__cplusplus) ++# define LZO_UNCONST_CAST(t,e) (const_cast (e)) ++# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) ++# else ++# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) ++# endif ++#endif ++#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) ++# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; ++# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; ++# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; ++# else ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; ++# endif ++#endif ++#if !defined(LZO_COMPILE_TIME_ASSERT) ++# if (LZO_CC_AZTECC) ++# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} ++# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# else ++# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} ++# endif ++#endif ++#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) ++# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++# define __lzo_cdecl __cdecl ++# define __lzo_cdecl_atexit /*empty*/ ++# define __lzo_cdecl_main __cdecl ++# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) ++# define __lzo_cdecl_qsort __pascal ++# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) ++# define __lzo_cdecl_qsort _stdcall ++# else ++# define __lzo_cdecl_qsort __cdecl ++# endif ++# elif (LZO_CC_WATCOMC) ++# define __lzo_cdecl __cdecl ++# else ++# define __lzo_cdecl __cdecl ++# define __lzo_cdecl_atexit __cdecl ++# define __lzo_cdecl_main __cdecl ++# define __lzo_cdecl_qsort __cdecl ++# endif ++# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) ++# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) ++# define __lzo_cdecl_sighandler __pascal ++# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) ++# define __lzo_cdecl_sighandler _stdcall ++# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) ++# define __lzo_cdecl_sighandler __clrcall ++# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) ++# if defined(_DLL) ++# define __lzo_cdecl_sighandler _far _cdecl _loadds ++# elif defined(_MT) ++# define __lzo_cdecl_sighandler _far _cdecl ++# else ++# define __lzo_cdecl_sighandler _cdecl ++# endif ++# else ++# define __lzo_cdecl_sighandler __cdecl ++# endif ++#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) ++# define __lzo_cdecl __cdecl ++#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) ++# define __lzo_cdecl cdecl ++#endif ++#if !defined(__lzo_cdecl) ++# define __lzo_cdecl /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_atexit) ++# define __lzo_cdecl_atexit /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_main) ++# define __lzo_cdecl_main /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_qsort) ++# define __lzo_cdecl_qsort /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_sighandler) ++# define __lzo_cdecl_sighandler /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_va) ++# define __lzo_cdecl_va __lzo_cdecl ++#endif ++#if !(LZO_CFG_NO_WINDOWS_H) ++#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) ++# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) ++# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) ++# else ++# define LZO_HAVE_WINDOWS_H 1 ++# endif ++#endif ++#endif ++#if (LZO_ARCH_ALPHA) ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_AVOID_SHORT 1 ++# define LZO_OPT_AVOID_USHORT 1 ++#elif (LZO_ARCH_AMD64) ++# define LZO_OPT_AVOID_INT_INDEX 1 ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# define LZO_OPT_UNALIGNED64 1 ++#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) ++#elif (LZO_ARCH_ARM) ++# define LZO_OPT_AVOID_SHORT 1 ++# define LZO_OPT_AVOID_USHORT 1 ++#elif (LZO_ARCH_CRIS) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++#elif (LZO_ARCH_I386) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++#elif (LZO_ARCH_IA64) ++# define LZO_OPT_AVOID_INT_INDEX 1 ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_PREFER_POSTINC 1 ++#elif (LZO_ARCH_M68K) ++# define LZO_OPT_PREFER_POSTINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++# if defined(__mc68020__) && !defined(__mcoldfire__) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# endif ++#elif (LZO_ARCH_MIPS) ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++#elif (LZO_ARCH_POWERPC) ++# define LZO_OPT_PREFER_PREINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++# if (LZO_ABI_BIG_ENDIAN) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# endif ++#elif (LZO_ARCH_S390) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# if (LZO_SIZEOF_SIZE_T == 8) ++# define LZO_OPT_UNALIGNED64 1 ++# endif ++#elif (LZO_ARCH_SH) ++# define LZO_OPT_PREFER_POSTINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++#endif ++#ifndef LZO_CFG_NO_INLINE_ASM ++#if (LZO_CC_LLVM) ++# define LZO_CFG_NO_INLINE_ASM 1 ++#endif ++#endif ++#ifndef LZO_CFG_NO_UNALIGNED ++#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) ++# define LZO_CFG_NO_UNALIGNED 1 ++#endif ++#endif ++#if (LZO_CFG_NO_UNALIGNED) ++# undef LZO_OPT_UNALIGNED16 ++# undef LZO_OPT_UNALIGNED32 ++# undef LZO_OPT_UNALIGNED64 ++#endif ++#if (LZO_CFG_NO_INLINE_ASM) ++#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) ++# define LZO_ASM_SYNTAX_MSC 1 ++#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) ++#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) ++#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) ++# define LZO_ASM_SYNTAX_GNUC 1 ++#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) ++# define LZO_ASM_SYNTAX_GNUC 1 ++#endif ++#if (LZO_ASM_SYNTAX_GNUC) ++#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) ++# define __LZO_ASM_CLOBBER "ax" ++#elif (LZO_CC_INTELC) ++# define __LZO_ASM_CLOBBER "memory" ++#else ++# define __LZO_ASM_CLOBBER "cc", "memory" ++#endif ++#endif ++#if defined(__LZO_INFOSTR_MM) ++#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) ++# define __LZO_INFOSTR_MM "" ++#elif defined(LZO_INFO_MM) ++# define __LZO_INFOSTR_MM "." LZO_INFO_MM ++#else ++# define __LZO_INFOSTR_MM "" ++#endif ++#if defined(__LZO_INFOSTR_PM) ++#elif defined(LZO_INFO_ABI_PM) ++# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM ++#else ++# define __LZO_INFOSTR_PM "" ++#endif ++#if defined(__LZO_INFOSTR_ENDIAN) ++#elif defined(LZO_INFO_ABI_ENDIAN) ++# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN ++#else ++# define __LZO_INFOSTR_ENDIAN "" ++#endif ++#if defined(__LZO_INFOSTR_OSNAME) ++#elif defined(LZO_INFO_OS_CONSOLE) ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE ++#elif defined(LZO_INFO_OS_POSIX) ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX ++#else ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS ++#endif ++#if defined(__LZO_INFOSTR_LIBC) ++#elif defined(LZO_INFO_LIBC) ++# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC ++#else ++# define __LZO_INFOSTR_LIBC "" ++#endif ++#if defined(__LZO_INFOSTR_CCVER) ++#elif defined(LZO_INFO_CCVER) ++# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER ++#else ++# define __LZO_INFOSTR_CCVER "" ++#endif ++#define LZO_INFO_STRING \ ++ LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ ++ " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER ++ ++#endif /* already included */ ++ ++/* vim:set ts=4 et: */ +Index: b/grub-core/lib/minilzo/minilzo.c +=================================================================== +--- /dev/null ++++ b/grub-core/lib/minilzo/minilzo.c +@@ -0,0 +1,4562 @@ ++/* minilzo.c -- mini subset of the LZO real-time data compression library ++ ++ This file is part of the LZO real-time data compression library. ++ ++ Copyright (C) 2011 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer ++ All Rights Reserved. ++ ++ The LZO library 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. ++ ++ The LZO library 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 the LZO library; see the file COPYING. ++ If not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ Markus F.X.J. Oberhumer ++ ++ http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++/* ++ * NOTE: ++ * the full LZO package can be found at ++ * http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++#define __LZO_IN_MINILZO 1 ++ ++#if defined(LZO_CFG_FREESTANDING) ++# undef MINILZO_HAVE_CONFIG_H ++# define LZO_LIBC_FREESTANDING 1 ++# define LZO_OS_FREESTANDING 1 ++#endif ++ ++#ifdef MINILZO_HAVE_CONFIG_H ++# include ++#endif ++#include ++#include ++#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) ++ ++#ifndef __LZODEFS_H_INCLUDED ++#define __LZODEFS_H_INCLUDED 1 ++ ++#if defined(__CYGWIN32__) && !defined(__CYGWIN__) ++# define __CYGWIN__ __CYGWIN32__ ++#endif ++#if defined(__IBMCPP__) && !defined(__IBMC__) ++# define __IBMC__ __IBMCPP__ ++#endif ++#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) ++# define __INTEL_COMPILER __ICL ++#endif ++#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) ++# define _ALL_SOURCE 1 ++#endif ++#if defined(__mips__) && defined(__R5900__) ++# if !defined(__LONG_MAX__) ++# define __LONG_MAX__ 9223372036854775807L ++# endif ++#endif ++#if defined(__INTEL_COMPILER) && defined(__linux__) ++# pragma warning(disable: 193) ++#endif ++#if defined(__KEIL__) && defined(__C166__) ++# pragma warning disable = 322 ++#elif 0 && defined(__C251__) ++# pragma warning disable = 322 ++#endif ++#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) ++# if (_MSC_VER >= 1300) ++# pragma warning(disable: 4668) ++# endif ++#endif ++#if 0 && defined(__WATCOMC__) ++# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) ++# pragma warning 203 9 ++# endif ++#endif ++#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) ++# pragma option -h ++#endif ++#if 0 ++#define LZO_0xffffL 0xfffful ++#define LZO_0xffffffffL 0xfffffffful ++#else ++#define LZO_0xffffL 65535ul ++#define LZO_0xffffffffL 4294967295ul ++#endif ++#if (LZO_0xffffL == LZO_0xffffffffL) ++# error "your preprocessor is broken 1" ++#endif ++#if (16ul * 16384ul != 262144ul) ++# error "your preprocessor is broken 2" ++#endif ++#if 0 ++#if (32767 >= 4294967295ul) ++# error "your preprocessor is broken 3" ++#endif ++#if (65535u >= 4294967295ul) ++# error "your preprocessor is broken 4" ++#endif ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) ++# if !defined(MSDOS) ++# define MSDOS 1 ++# endif ++# if !defined(_MSDOS) ++# define _MSDOS 1 ++# endif ++#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) ++# if (__VERSION == 520) && (MB_LEN_MAX == 1) ++# if !defined(__AZTEC_C__) ++# define __AZTEC_C__ __VERSION ++# endif ++# if !defined(__DOS__) ++# define __DOS__ 1 ++# endif ++# endif ++#endif ++#endif ++#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) ++# define ptrdiff_t long ++# define _PTRDIFF_T_DEFINED 1 ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++# undef __LZO_RENAME_A ++# undef __LZO_RENAME_B ++# if defined(__AZTEC_C__) && defined(__DOS__) ++# define __LZO_RENAME_A 1 ++# elif defined(_MSC_VER) && defined(MSDOS) ++# if (_MSC_VER < 600) ++# define __LZO_RENAME_A 1 ++# elif (_MSC_VER < 700) ++# define __LZO_RENAME_B 1 ++# endif ++# elif defined(__TSC__) && defined(__OS2__) ++# define __LZO_RENAME_A 1 ++# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) ++# define __LZO_RENAME_A 1 ++# elif defined(__PACIFIC__) && defined(DOS) ++# if !defined(__far) ++# define __far far ++# endif ++# if !defined(__near) ++# define __near near ++# endif ++# endif ++# if defined(__LZO_RENAME_A) ++# if !defined(__cdecl) ++# define __cdecl cdecl ++# endif ++# if !defined(__far) ++# define __far far ++# endif ++# if !defined(__huge) ++# define __huge huge ++# endif ++# if !defined(__near) ++# define __near near ++# endif ++# if !defined(__pascal) ++# define __pascal pascal ++# endif ++# if !defined(__huge) ++# define __huge huge ++# endif ++# elif defined(__LZO_RENAME_B) ++# if !defined(__cdecl) ++# define __cdecl _cdecl ++# endif ++# if !defined(__far) ++# define __far _far ++# endif ++# if !defined(__huge) ++# define __huge _huge ++# endif ++# if !defined(__near) ++# define __near _near ++# endif ++# if !defined(__pascal) ++# define __pascal _pascal ++# endif ++# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) ++# if !defined(__cdecl) ++# define __cdecl cdecl ++# endif ++# if !defined(__pascal) ++# define __pascal pascal ++# endif ++# endif ++# undef __LZO_RENAME_A ++# undef __LZO_RENAME_B ++#endif ++#if (UINT_MAX == LZO_0xffffL) ++#if defined(__AZTEC_C__) && defined(__DOS__) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++#elif defined(_MSC_VER) && defined(MSDOS) ++# if (_MSC_VER < 600) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++# endif ++# if (_MSC_VER < 700) ++# define LZO_BROKEN_INTEGRAL_PROMOTION 1 ++# define LZO_BROKEN_SIZEOF 1 ++# endif ++#elif defined(__PACIFIC__) && defined(DOS) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++#elif defined(__TURBOC__) && defined(__MSDOS__) ++# if (__TURBOC__ < 0x0150) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++# define LZO_BROKEN_INTEGRAL_PROMOTION 1 ++# endif ++# if (__TURBOC__ < 0x0200) ++# define LZO_BROKEN_SIZEOF 1 ++# endif ++# if (__TURBOC__ < 0x0400) && defined(__cplusplus) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# endif ++#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) ++# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 ++# define LZO_BROKEN_SIZEOF 1 ++#endif ++#endif ++#if defined(__WATCOMC__) && (__WATCOMC__ < 900) ++# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 ++#endif ++#if defined(_CRAY) && defined(_CRAY1) ++# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 ++#endif ++#define LZO_PP_STRINGIZE(x) #x ++#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) ++#define LZO_PP_CONCAT2(a,b) a ## b ++#define LZO_PP_CONCAT3(a,b,c) a ## b ## c ++#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d ++#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e ++#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) ++#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) ++#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) ++#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) ++#if 1 ++#define LZO_CPP_STRINGIZE(x) #x ++#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) ++#define LZO_CPP_CONCAT2(a,b) a ## b ++#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c ++#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d ++#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e ++#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) ++#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) ++#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) ++#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) ++#endif ++#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) ++#if 1 && defined(__cplusplus) ++# if !defined(__STDC_CONSTANT_MACROS) ++# define __STDC_CONSTANT_MACROS 1 ++# endif ++# if !defined(__STDC_LIMIT_MACROS) ++# define __STDC_LIMIT_MACROS 1 ++# endif ++#endif ++#if defined(__cplusplus) ++# define LZO_EXTERN_C extern "C" ++#else ++# define LZO_EXTERN_C extern ++#endif ++#if !defined(__LZO_OS_OVERRIDE) ++#if (LZO_OS_FREESTANDING) ++# define LZO_INFO_OS "freestanding" ++#elif (LZO_OS_EMBEDDED) ++# define LZO_INFO_OS "embedded" ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) ++# define LZO_OS_EMBEDDED 1 ++# define LZO_INFO_OS "embedded" ++#elif defined(__CYGWIN__) && defined(__GNUC__) ++# define LZO_OS_CYGWIN 1 ++# define LZO_INFO_OS "cygwin" ++#elif defined(__EMX__) && defined(__GNUC__) ++# define LZO_OS_EMX 1 ++# define LZO_INFO_OS "emx" ++#elif defined(__BEOS__) ++# define LZO_OS_BEOS 1 ++# define LZO_INFO_OS "beos" ++#elif defined(__Lynx__) ++# define LZO_OS_LYNXOS 1 ++# define LZO_INFO_OS "lynxos" ++#elif defined(__OS400__) ++# define LZO_OS_OS400 1 ++# define LZO_INFO_OS "os400" ++#elif defined(__QNX__) ++# define LZO_OS_QNX 1 ++# define LZO_INFO_OS "qnx" ++#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++#elif defined(__BORLANDC__) && defined(__DPMI16__) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++#elif defined(__ZTC__) && defined(DOS386) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++#elif defined(__OS2__) || defined(__OS2V2__) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_OS216 1 ++# define LZO_INFO_OS "os216" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_OS2 1 ++# define LZO_INFO_OS "os2" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) ++# define LZO_OS_WIN64 1 ++# define LZO_INFO_OS "win64" ++#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++#elif defined(__MWERKS__) && defined(__INTEL__) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_WIN16 1 ++# define LZO_INFO_OS "win16" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) ++# if (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_OS_DOS32 1 ++# define LZO_INFO_OS "dos32" ++# else ++# error "check your limits.h header" ++# endif ++#elif defined(__WATCOMC__) ++# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) ++# define LZO_OS_DOS16 1 ++# define LZO_INFO_OS "dos16" ++# elif defined(__NT__) && (__WATCOMC__ < 1100) ++# define LZO_OS_WIN32 1 ++# define LZO_INFO_OS "win32" ++# elif defined(__linux__) || defined(__LINUX__) ++# define LZO_OS_POSIX 1 ++# define LZO_INFO_OS "posix" ++# else ++# error "please specify a target using the -bt compiler option" ++# endif ++#elif defined(__palmos__) ++# define LZO_OS_PALMOS 1 ++# define LZO_INFO_OS "palmos" ++#elif defined(__TOS__) || defined(__atarist__) ++# define LZO_OS_TOS 1 ++# define LZO_INFO_OS "tos" ++#elif defined(macintosh) && !defined(__ppc__) ++# define LZO_OS_MACCLASSIC 1 ++# define LZO_INFO_OS "macclassic" ++#elif defined(__VMS) ++# define LZO_OS_VMS 1 ++# define LZO_INFO_OS "vms" ++#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) ++# define LZO_OS_CONSOLE 1 ++# define LZO_OS_CONSOLE_PS2 1 ++# define LZO_INFO_OS "console" ++# define LZO_INFO_OS_CONSOLE "ps2" ++#elif (defined(__mips__) && defined(__psp__)) ++# define LZO_OS_CONSOLE 1 ++# define LZO_OS_CONSOLE_PSP 1 ++# define LZO_INFO_OS "console" ++# define LZO_INFO_OS_CONSOLE "psp" ++#else ++# define LZO_OS_POSIX 1 ++# define LZO_INFO_OS "posix" ++#endif ++#if (LZO_OS_POSIX) ++# if defined(_AIX) || defined(__AIX__) || defined(__aix__) ++# define LZO_OS_POSIX_AIX 1 ++# define LZO_INFO_OS_POSIX "aix" ++# elif defined(__FreeBSD__) ++# define LZO_OS_POSIX_FREEBSD 1 ++# define LZO_INFO_OS_POSIX "freebsd" ++# elif defined(__hpux__) || defined(__hpux) ++# define LZO_OS_POSIX_HPUX 1 ++# define LZO_INFO_OS_POSIX "hpux" ++# elif defined(__INTERIX) ++# define LZO_OS_POSIX_INTERIX 1 ++# define LZO_INFO_OS_POSIX "interix" ++# elif defined(__IRIX__) || defined(__irix__) ++# define LZO_OS_POSIX_IRIX 1 ++# define LZO_INFO_OS_POSIX "irix" ++# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) ++# define LZO_OS_POSIX_LINUX 1 ++# define LZO_INFO_OS_POSIX "linux" ++# elif defined(__APPLE__) || defined(__MACOS__) ++# define LZO_OS_POSIX_MACOSX 1 ++# define LZO_INFO_OS_POSIX "macosx" ++# elif defined(__minix__) || defined(__minix) ++# define LZO_OS_POSIX_MINIX 1 ++# define LZO_INFO_OS_POSIX "minix" ++# elif defined(__NetBSD__) ++# define LZO_OS_POSIX_NETBSD 1 ++# define LZO_INFO_OS_POSIX "netbsd" ++# elif defined(__OpenBSD__) ++# define LZO_OS_POSIX_OPENBSD 1 ++# define LZO_INFO_OS_POSIX "openbsd" ++# elif defined(__osf__) ++# define LZO_OS_POSIX_OSF 1 ++# define LZO_INFO_OS_POSIX "osf" ++# elif defined(__solaris__) || defined(__sun) ++# if defined(__SVR4) || defined(__svr4__) ++# define LZO_OS_POSIX_SOLARIS 1 ++# define LZO_INFO_OS_POSIX "solaris" ++# else ++# define LZO_OS_POSIX_SUNOS 1 ++# define LZO_INFO_OS_POSIX "sunos" ++# endif ++# elif defined(__ultrix__) || defined(__ultrix) ++# define LZO_OS_POSIX_ULTRIX 1 ++# define LZO_INFO_OS_POSIX "ultrix" ++# elif defined(_UNICOS) ++# define LZO_OS_POSIX_UNICOS 1 ++# define LZO_INFO_OS_POSIX "unicos" ++# else ++# define LZO_OS_POSIX_UNKNOWN 1 ++# define LZO_INFO_OS_POSIX "unknown" ++# endif ++#endif ++#endif ++#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++# if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (UINT_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) ++# define LZO_CC_CILLY 1 ++# define LZO_INFO_CC "Cilly" ++# if defined(__CILLY__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) ++# define LZO_CC_SDCC 1 ++# define LZO_INFO_CC "sdcc" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) ++#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) ++# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) ++# define LZO_INFO_CC "Pathscale C" ++# define LZO_INFO_CCVER __PATHSCALE__ ++#elif defined(__INTEL_COMPILER) ++# define LZO_CC_INTELC 1 ++# define LZO_INFO_CC "Intel C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) ++# if defined(_WIN32) || defined(_WIN64) ++# define LZO_CC_SYNTAX_MSC 1 ++# else ++# define LZO_CC_SYNTAX_GNUC 1 ++# endif ++#elif defined(__POCC__) && defined(_WIN32) ++# define LZO_CC_PELLESC 1 ++# define LZO_INFO_CC "Pelles C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) ++#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) ++# if defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# else ++# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# endif ++# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) ++# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) ++# else ++# define LZO_CC_CLANG_CLANG 0x010000L ++# endif ++# define LZO_CC_CLANG LZO_CC_CLANG_GNUC ++# define LZO_INFO_CC "clang" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) ++# if defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# else ++# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# endif ++# define LZO_CC_LLVM LZO_CC_LLVM_GNUC ++# define LZO_INFO_CC "llvm-gcc" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__GNUC__) && defined(__VERSION__) ++# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) ++# elif defined(__GNUC_MINOR__) ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) ++# else ++# define LZO_CC_GNUC (__GNUC__ * 0x10000L) ++# endif ++# define LZO_INFO_CC "gcc" ++# define LZO_INFO_CCVER __VERSION__ ++#elif defined(__ACK__) && defined(_ACK) ++# define LZO_CC_ACK 1 ++# define LZO_INFO_CC "Amsterdam Compiler Kit C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__AZTEC_C__) ++# define LZO_CC_AZTECC 1 ++# define LZO_INFO_CC "Aztec C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) ++#elif defined(__CODEGEARC__) ++# define LZO_CC_CODEGEARC 1 ++# define LZO_INFO_CC "CodeGear C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) ++#elif defined(__BORLANDC__) ++# define LZO_CC_BORLANDC 1 ++# define LZO_INFO_CC "Borland C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) ++#elif defined(_CRAYC) && defined(_RELEASE) ++# define LZO_CC_CRAYC 1 ++# define LZO_INFO_CC "Cray C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) ++#elif defined(__DMC__) && defined(__SC__) ++# define LZO_CC_DMC 1 ++# define LZO_INFO_CC "Digital Mars C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) ++#elif defined(__DECC) ++# define LZO_CC_DECC 1 ++# define LZO_INFO_CC "DEC C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) ++#elif defined(__HIGHC__) ++# define LZO_CC_HIGHC 1 ++# define LZO_INFO_CC "MetaWare High C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__IAR_SYSTEMS_ICC__) ++# define LZO_CC_IARC 1 ++# define LZO_INFO_CC "IAR C" ++# if defined(__VER__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__IBMC__) ++# define LZO_CC_IBMC 1 ++# define LZO_INFO_CC "IBM C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) ++#elif defined(__KEIL__) && defined(__C166__) ++# define LZO_CC_KEILC 1 ++# define LZO_INFO_CC "Keil C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) ++#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) ++# define LZO_CC_LCCWIN32 1 ++# define LZO_INFO_CC "lcc-win32" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__LCC__) ++# define LZO_CC_LCC 1 ++# define LZO_INFO_CC "lcc" ++# if defined(__LCC_VERSION__) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) ++# else ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(_MSC_VER) ++# define LZO_CC_MSC 1 ++# define LZO_INFO_CC "Microsoft C" ++# if defined(_MSC_FULL_VER) ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) ++# else ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) ++# endif ++#elif defined(__MWERKS__) ++# define LZO_CC_MWERKS 1 ++# define LZO_INFO_CC "Metrowerks C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) ++#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) ++# define LZO_CC_NDPC 1 ++# define LZO_INFO_CC "Microway NDP C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__PACIFIC__) ++# define LZO_CC_PACIFICC 1 ++# define LZO_INFO_CC "Pacific C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) ++#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) ++# define LZO_CC_PGI 1 ++# define LZO_INFO_CC "Portland Group PGI C" ++# define LZO_INFO_CCVER "unknown" ++#elif defined(__PUREC__) && defined(__TOS__) ++# define LZO_CC_PUREC 1 ++# define LZO_INFO_CC "Pure C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) ++#elif defined(__SC__) && defined(__ZTC__) ++# define LZO_CC_SYMANTECC 1 ++# define LZO_INFO_CC "Symantec C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) ++#elif defined(__SUNPRO_C) ++# define LZO_INFO_CC "SunPro C" ++# if ((__SUNPRO_C)+0 > 0) ++# define LZO_CC_SUNPROC __SUNPRO_C ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) ++# else ++# define LZO_CC_SUNPROC 1 ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__SUNPRO_CC) ++# define LZO_INFO_CC "SunPro C" ++# if ((__SUNPRO_CC)+0 > 0) ++# define LZO_CC_SUNPROC __SUNPRO_CC ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) ++# else ++# define LZO_CC_SUNPROC 1 ++# define LZO_INFO_CCVER "unknown" ++# endif ++#elif defined(__TINYC__) ++# define LZO_CC_TINYC 1 ++# define LZO_INFO_CC "Tiny C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) ++#elif defined(__TSC__) ++# define LZO_CC_TOPSPEEDC 1 ++# define LZO_INFO_CC "TopSpeed C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) ++#elif defined(__WATCOMC__) ++# define LZO_CC_WATCOMC 1 ++# define LZO_INFO_CC "Watcom C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) ++#elif defined(__TURBOC__) ++# define LZO_CC_TURBOC 1 ++# define LZO_INFO_CC "Turbo C" ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) ++#elif defined(__ZTC__) ++# define LZO_CC_ZORTECHC 1 ++# define LZO_INFO_CC "Zortech C" ++# if (__ZTC__ == 0x310) ++# define LZO_INFO_CCVER "0x310" ++# else ++# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) ++# endif ++#else ++# define LZO_CC_UNKNOWN 1 ++# define LZO_INFO_CC "unknown" ++# define LZO_INFO_CCVER "unknown" ++#endif ++#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) ++# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" ++#endif ++#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) ++# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) ++# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) ++# define LZO_ARCH_CRAY_MPP 1 ++# elif defined(_CRAY1) ++# define LZO_ARCH_CRAY_PVP 1 ++# endif ++# endif ++#endif ++#if !defined(__LZO_ARCH_OVERRIDE) ++#if (LZO_ARCH_GENERIC) ++# define LZO_INFO_ARCH "generic" ++#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++# define LZO_ARCH_I086 1 ++# define LZO_ARCH_IA16 1 ++# define LZO_INFO_ARCH "i086" ++#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) ++# define LZO_ARCH_ALPHA 1 ++# define LZO_INFO_ARCH "alpha" ++#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) ++# define LZO_ARCH_ALPHA 1 ++# define LZO_INFO_ARCH "alpha" ++#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) ++# define LZO_ARCH_AMD64 1 ++# define LZO_INFO_ARCH "amd64" ++#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) ++# define LZO_ARCH_ARM 1 ++# define LZO_ARCH_ARM_THUMB 1 ++# define LZO_INFO_ARCH "arm_thumb" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) ++# define LZO_ARCH_ARM 1 ++# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) ++# define LZO_ARCH_ARM_THUMB 1 ++# define LZO_INFO_ARCH "arm_thumb" ++# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) ++# define LZO_INFO_ARCH "arm" ++# else ++# define LZO_INFO_ARCH "arm" ++# endif ++#elif defined(__arm__) || defined(_M_ARM) ++# define LZO_ARCH_ARM 1 ++# define LZO_INFO_ARCH "arm" ++#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) ++# define LZO_ARCH_AVR 1 ++# define LZO_INFO_ARCH "avr" ++#elif defined(__avr32__) || defined(__AVR32__) ++# define LZO_ARCH_AVR32 1 ++# define LZO_INFO_ARCH "avr32" ++#elif defined(__bfin__) ++# define LZO_ARCH_BLACKFIN 1 ++# define LZO_INFO_ARCH "blackfin" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) ++# define LZO_ARCH_C166 1 ++# define LZO_INFO_ARCH "c166" ++#elif defined(__cris__) ++# define LZO_ARCH_CRIS 1 ++# define LZO_INFO_ARCH "cris" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) ++# define LZO_ARCH_EZ80 1 ++# define LZO_INFO_ARCH "ez80" ++#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) ++# define LZO_ARCH_H8300 1 ++# define LZO_INFO_ARCH "h8300" ++#elif defined(__hppa__) || defined(__hppa) ++# define LZO_ARCH_HPPA 1 ++# define LZO_INFO_ARCH "hppa" ++#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif (LZO_CC_ZORTECHC && defined(__I86__)) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) ++# define LZO_ARCH_I386 1 ++# define LZO_ARCH_IA32 1 ++# define LZO_INFO_ARCH "i386" ++#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) ++# define LZO_ARCH_IA64 1 ++# define LZO_INFO_ARCH "ia64" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) ++# define LZO_ARCH_M16C 1 ++# define LZO_INFO_ARCH "m16c" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) ++# define LZO_ARCH_M16C 1 ++# define LZO_INFO_ARCH "m16c" ++#elif defined(__m32r__) ++# define LZO_ARCH_M32R 1 ++# define LZO_INFO_ARCH "m32r" ++#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) ++# define LZO_ARCH_M68K 1 ++# define LZO_INFO_ARCH "m68k" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) ++# define LZO_ARCH_MCS251 1 ++# define LZO_INFO_ARCH "mcs251" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) ++# define LZO_ARCH_MCS51 1 ++# define LZO_INFO_ARCH "mcs51" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) ++# define LZO_ARCH_MCS51 1 ++# define LZO_INFO_ARCH "mcs51" ++#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) ++# define LZO_ARCH_MIPS 1 ++# define LZO_INFO_ARCH "mips" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) ++# define LZO_ARCH_MSP430 1 ++# define LZO_INFO_ARCH "msp430" ++#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) ++# define LZO_ARCH_MSP430 1 ++# define LZO_INFO_ARCH "msp430" ++#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) ++# define LZO_ARCH_POWERPC 1 ++# define LZO_INFO_ARCH "powerpc" ++#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) ++# define LZO_ARCH_S390 1 ++# define LZO_INFO_ARCH "s390" ++#elif defined(__sh__) || defined(_M_SH) ++# define LZO_ARCH_SH 1 ++# define LZO_INFO_ARCH "sh" ++#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) ++# define LZO_ARCH_SPARC 1 ++# define LZO_INFO_ARCH "sparc" ++#elif defined(__SPU__) ++# define LZO_ARCH_SPU 1 ++# define LZO_INFO_ARCH "spu" ++#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) ++# define LZO_ARCH_Z80 1 ++# define LZO_INFO_ARCH "z80" ++#elif (LZO_ARCH_CRAY_PVP) ++# if defined(_CRAYSV1) ++# define LZO_ARCH_CRAY_SV1 1 ++# define LZO_INFO_ARCH "cray_sv1" ++# elif (_ADDR64) ++# define LZO_ARCH_CRAY_T90 1 ++# define LZO_INFO_ARCH "cray_t90" ++# elif (_ADDR32) ++# define LZO_ARCH_CRAY_YMP 1 ++# define LZO_INFO_ARCH "cray_ymp" ++# else ++# define LZO_ARCH_CRAY_XMP 1 ++# define LZO_INFO_ARCH "cray_xmp" ++# endif ++#else ++# define LZO_ARCH_UNKNOWN 1 ++# define LZO_INFO_ARCH "unknown" ++#endif ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) ++# error "FIXME - missing define for CPU architecture" ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) ++# error "FIXME - missing WIN32 define for CPU architecture" ++#endif ++#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) ++# error "FIXME - missing WIN64 define for CPU architecture" ++#endif ++#if (LZO_OS_OS216 || LZO_OS_WIN16) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) ++# define LZO_ARCH_I086PM 1 ++# define LZO_ARCH_IA16PM 1 ++#endif ++#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) ++# error "this should not happen" ++#endif ++#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) ++# error "this should not happen" ++#endif ++#if (LZO_ARCH_I086) ++# if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if (LZO_ARCH_I386) ++# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) ++# error "this should not happen" ++# endif ++# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) ++# error "this should not happen" ++# endif ++# if (ULONG_MAX != LZO_0xffffffffL) ++# error "this should not happen" ++# endif ++#endif ++#if !defined(__LZO_MM_OVERRIDE) ++#if (LZO_ARCH_I086) ++#if (UINT_MAX != LZO_0xffffL) ++# error "this should not happen" ++#endif ++#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) ++# define LZO_MM_TINY 1 ++#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) ++# define LZO_MM_HUGE 1 ++#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) ++# define LZO_MM_SMALL 1 ++#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) ++# define LZO_MM_MEDIUM 1 ++#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) ++# define LZO_MM_COMPACT 1 ++#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) ++# define LZO_MM_LARGE 1 ++#elif (LZO_CC_AZTECC) ++# if defined(_LARGE_CODE) && defined(_LARGE_DATA) ++# define LZO_MM_LARGE 1 ++# elif defined(_LARGE_CODE) ++# define LZO_MM_MEDIUM 1 ++# elif defined(_LARGE_DATA) ++# define LZO_MM_COMPACT 1 ++# else ++# define LZO_MM_SMALL 1 ++# endif ++#elif (LZO_CC_ZORTECHC && defined(__VCM__)) ++# define LZO_MM_LARGE 1 ++#else ++# error "unknown memory model" ++#endif ++#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++#define LZO_HAVE_MM_HUGE_PTR 1 ++#define LZO_HAVE_MM_HUGE_ARRAY 1 ++#if (LZO_MM_TINY) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#endif ++#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) ++# undef LZO_HAVE_MM_HUGE_PTR ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#elif (LZO_CC_MSC && defined(_QC)) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++# if (_MSC_VER < 600) ++# undef LZO_HAVE_MM_HUGE_PTR ++# endif ++#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) ++# undef LZO_HAVE_MM_HUGE_ARRAY ++#endif ++#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) ++# if (LZO_OS_DOS16) ++# error "this should not happen" ++# elif (LZO_CC_ZORTECHC) ++# else ++# error "this should not happen" ++# endif ++#endif ++#ifdef __cplusplus ++extern "C" { ++#endif ++#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) ++ extern void __near __cdecl _AHSHIFT(void); ++# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) ++#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) ++# define LZO_MM_AHSHIFT 12 ++#elif (LZO_CC_WATCOMC) ++ extern unsigned char _HShift; ++# define LZO_MM_AHSHIFT ((unsigned) _HShift) ++#else ++# error "FIXME - implement LZO_MM_AHSHIFT" ++#endif ++#ifdef __cplusplus ++} ++#endif ++#endif ++#elif (LZO_ARCH_C166) ++#if !defined(__MODEL__) ++# error "FIXME - C166 __MODEL__" ++#elif ((__MODEL__) == 0) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 1) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - C166 __MODEL__" ++#endif ++#elif (LZO_ARCH_MCS251) ++#if !defined(__MODEL__) ++# error "FIXME - MCS251 __MODEL__" ++#elif ((__MODEL__) == 0) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - MCS251 __MODEL__" ++#endif ++#elif (LZO_ARCH_MCS51) ++#if !defined(__MODEL__) ++# error "FIXME - MCS51 __MODEL__" ++#elif ((__MODEL__) == 1) ++# define LZO_MM_SMALL 1 ++#elif ((__MODEL__) == 2) ++# define LZO_MM_LARGE 1 ++#elif ((__MODEL__) == 3) ++# define LZO_MM_TINY 1 ++#elif ((__MODEL__) == 4) ++# define LZO_MM_XTINY 1 ++#elif ((__MODEL__) == 5) ++# define LZO_MM_XSMALL 1 ++#else ++# error "FIXME - MCS51 __MODEL__" ++#endif ++#elif (LZO_ARCH_CRAY_PVP) ++# define LZO_MM_PVP 1 ++#else ++# define LZO_MM_FLAT 1 ++#endif ++#if (LZO_MM_COMPACT) ++# define LZO_INFO_MM "compact" ++#elif (LZO_MM_FLAT) ++# define LZO_INFO_MM "flat" ++#elif (LZO_MM_HUGE) ++# define LZO_INFO_MM "huge" ++#elif (LZO_MM_LARGE) ++# define LZO_INFO_MM "large" ++#elif (LZO_MM_MEDIUM) ++# define LZO_INFO_MM "medium" ++#elif (LZO_MM_PVP) ++# define LZO_INFO_MM "pvp" ++#elif (LZO_MM_SMALL) ++# define LZO_INFO_MM "small" ++#elif (LZO_MM_TINY) ++# define LZO_INFO_MM "tiny" ++#else ++# error "unknown memory model" ++#endif ++#endif ++#if defined(SIZEOF_SHORT) ++# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) ++#endif ++#if defined(SIZEOF_INT) ++# define LZO_SIZEOF_INT (SIZEOF_INT) ++#endif ++#if defined(SIZEOF_LONG) ++# define LZO_SIZEOF_LONG (SIZEOF_LONG) ++#endif ++#if defined(SIZEOF_LONG_LONG) ++# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) ++#endif ++#if defined(SIZEOF___INT16) ++# define LZO_SIZEOF___INT16 (SIZEOF___INT16) ++#endif ++#if defined(SIZEOF___INT32) ++# define LZO_SIZEOF___INT32 (SIZEOF___INT32) ++#endif ++#if defined(SIZEOF___INT64) ++# define LZO_SIZEOF___INT64 (SIZEOF___INT64) ++#endif ++#if defined(SIZEOF_VOID_P) ++# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) ++#endif ++#if defined(SIZEOF_SIZE_T) ++# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) ++#endif ++#if defined(SIZEOF_PTRDIFF_T) ++# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) ++#endif ++#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) ++#if !defined(LZO_SIZEOF_SHORT) ++# if (LZO_ARCH_CRAY_PVP) ++# define LZO_SIZEOF_SHORT 8 ++# elif (USHRT_MAX == LZO_0xffffL) ++# define LZO_SIZEOF_SHORT 2 ++# elif (__LZO_LSR(USHRT_MAX,7) == 1) ++# define LZO_SIZEOF_SHORT 1 ++# elif (__LZO_LSR(USHRT_MAX,15) == 1) ++# define LZO_SIZEOF_SHORT 2 ++# elif (__LZO_LSR(USHRT_MAX,31) == 1) ++# define LZO_SIZEOF_SHORT 4 ++# elif (__LZO_LSR(USHRT_MAX,63) == 1) ++# define LZO_SIZEOF_SHORT 8 ++# elif (__LZO_LSR(USHRT_MAX,127) == 1) ++# define LZO_SIZEOF_SHORT 16 ++# else ++# error "LZO_SIZEOF_SHORT" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_INT) ++# if (LZO_ARCH_CRAY_PVP) ++# define LZO_SIZEOF_INT 8 ++# elif (UINT_MAX == LZO_0xffffL) ++# define LZO_SIZEOF_INT 2 ++# elif (UINT_MAX == LZO_0xffffffffL) ++# define LZO_SIZEOF_INT 4 ++# elif (__LZO_LSR(UINT_MAX,7) == 1) ++# define LZO_SIZEOF_INT 1 ++# elif (__LZO_LSR(UINT_MAX,15) == 1) ++# define LZO_SIZEOF_INT 2 ++# elif (__LZO_LSR(UINT_MAX,31) == 1) ++# define LZO_SIZEOF_INT 4 ++# elif (__LZO_LSR(UINT_MAX,63) == 1) ++# define LZO_SIZEOF_INT 8 ++# elif (__LZO_LSR(UINT_MAX,127) == 1) ++# define LZO_SIZEOF_INT 16 ++# else ++# error "LZO_SIZEOF_INT" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_LONG) ++# if (ULONG_MAX == LZO_0xffffffffL) ++# define LZO_SIZEOF_LONG 4 ++# elif (__LZO_LSR(ULONG_MAX,7) == 1) ++# define LZO_SIZEOF_LONG 1 ++# elif (__LZO_LSR(ULONG_MAX,15) == 1) ++# define LZO_SIZEOF_LONG 2 ++# elif (__LZO_LSR(ULONG_MAX,31) == 1) ++# define LZO_SIZEOF_LONG 4 ++# elif (__LZO_LSR(ULONG_MAX,63) == 1) ++# define LZO_SIZEOF_LONG 8 ++# elif (__LZO_LSR(ULONG_MAX,127) == 1) ++# define LZO_SIZEOF_LONG 16 ++# else ++# error "LZO_SIZEOF_LONG" ++# endif ++#endif ++#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) ++#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) ++# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) ++# if (LZO_CC_GNUC >= 0x030300ul) ++# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) ++# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG ++# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) ++# define LZO_SIZEOF_LONG_LONG 4 ++# endif ++# endif ++# endif ++#endif ++#endif ++#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) ++#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) ++#if (LZO_ARCH_I086 && LZO_CC_DMC) ++#elif (LZO_CC_CILLY) && defined(__GNUC__) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_OS_WIN64 || defined(_WIN64)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) ++# define LZO_SIZEOF___INT64 8 ++#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) ++# define LZO_SIZEOF___INT64 8 ++#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) ++# define LZO_SIZEOF_LONG_LONG 8 ++#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) ++#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ++# define LZO_SIZEOF_LONG_LONG 8 ++#endif ++#endif ++#endif ++#if defined(__cplusplus) && (LZO_CC_GNUC) ++# if (LZO_CC_GNUC < 0x020800ul) ++# undef LZO_SIZEOF_LONG_LONG ++# endif ++#endif ++#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) ++# undef LZO_SIZEOF_LONG_LONG ++#endif ++#if !defined(LZO_SIZEOF_VOID_P) ++#if (LZO_ARCH_I086) ++# define __LZO_WORDSIZE 2 ++# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) ++# define LZO_SIZEOF_VOID_P 2 ++# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# error "LZO_MM" ++# endif ++#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) ++# define __LZO_WORDSIZE 1 ++# define LZO_SIZEOF_VOID_P 2 ++#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) ++# define LZO_SIZEOF_VOID_P 2 ++#elif (LZO_ARCH_H8300) ++# if defined(__NORMAL_MODE__) ++# define __LZO_WORDSIZE 4 ++# define LZO_SIZEOF_VOID_P 2 ++# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) ++# define __LZO_WORDSIZE 4 ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# define __LZO_WORDSIZE 2 ++# define LZO_SIZEOF_VOID_P 2 ++# endif ++# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT ++# endif ++#elif (LZO_ARCH_M16C) ++# define __LZO_WORDSIZE 2 ++# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) ++# define LZO_SIZEOF_VOID_P 4 ++# else ++# define LZO_SIZEOF_VOID_P 2 ++# endif ++#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) ++# define __LZO_WORDSIZE 8 ++# define LZO_SIZEOF_VOID_P 4 ++#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) ++# define __LZO_WORDSIZE 8 ++# define LZO_SIZEOF_VOID_P 8 ++#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) ++# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (LZO_OS_OS400 || defined(__OS400__)) ++# define __LZO_WORDSIZE LZO_SIZEOF_LONG ++# define LZO_SIZEOF_VOID_P 16 ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) ++# define LZO_SIZEOF_VOID_P 8 ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG ++#elif (LZO_ARCH_SPU) ++# if 0 ++# define __LZO_WORDSIZE 16 ++# endif ++# define LZO_SIZEOF_VOID_P 4 ++#else ++# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG ++#endif ++#endif ++#if !defined(LZO_WORDSIZE) ++# if defined(__LZO_WORDSIZE) ++# define LZO_WORDSIZE __LZO_WORDSIZE ++# else ++# define LZO_WORDSIZE LZO_SIZEOF_VOID_P ++# endif ++#endif ++#if !defined(LZO_SIZEOF_SIZE_T) ++#if (LZO_ARCH_I086 || LZO_ARCH_M16C) ++# define LZO_SIZEOF_SIZE_T 2 ++#else ++# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P ++#endif ++#endif ++#if !defined(LZO_SIZEOF_PTRDIFF_T) ++#if (LZO_ARCH_I086) ++# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P ++# elif (LZO_MM_COMPACT || LZO_MM_LARGE) ++# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) ++# define LZO_SIZEOF_PTRDIFF_T 4 ++# else ++# define LZO_SIZEOF_PTRDIFF_T 2 ++# endif ++# else ++# error "LZO_MM" ++# endif ++#else ++# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T ++#endif ++#endif ++#if (LZO_ABI_NEUTRAL_ENDIAN) ++# undef LZO_ABI_BIG_ENDIAN ++# undef LZO_ABI_LITTLE_ENDIAN ++#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) ++#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) ++# if (__LITTLE_ENDIAN__ == 1) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++# else ++# define LZO_ABI_BIG_ENDIAN 1 ++# endif ++#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) ++# define LZO_ABI_BIG_ENDIAN 1 ++#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) ++# define LZO_ABI_LITTLE_ENDIAN 1 ++#endif ++#endif ++#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) ++# error "this should not happen" ++#endif ++#if (LZO_ABI_BIG_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "be" ++#elif (LZO_ABI_LITTLE_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "le" ++#elif (LZO_ABI_NEUTRAL_ENDIAN) ++# define LZO_INFO_ABI_ENDIAN "neutral" ++#endif ++#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) ++# define LZO_ABI_I8LP16 1 ++# define LZO_INFO_ABI_PM "i8lp16" ++#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) ++# define LZO_ABI_ILP16 1 ++# define LZO_INFO_ABI_PM "ilp16" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) ++# define LZO_ABI_ILP32 1 ++# define LZO_INFO_ABI_PM "ilp32" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) ++# define LZO_ABI_LLP64 1 ++# define LZO_INFO_ABI_PM "llp64" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) ++# define LZO_ABI_LP64 1 ++# define LZO_INFO_ABI_PM "lp64" ++#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) ++# define LZO_ABI_ILP64 1 ++# define LZO_INFO_ABI_PM "ilp64" ++#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) ++# define LZO_ABI_IP32L64 1 ++# define LZO_INFO_ABI_PM "ip32l64" ++#endif ++#if !defined(__LZO_LIBC_OVERRIDE) ++#if (LZO_LIBC_NAKED) ++# define LZO_INFO_LIBC "naked" ++#elif (LZO_LIBC_FREESTANDING) ++# define LZO_INFO_LIBC "freestanding" ++#elif (LZO_LIBC_MOSTLY_FREESTANDING) ++# define LZO_INFO_LIBC "mfreestanding" ++#elif (LZO_LIBC_ISOC90) ++# define LZO_INFO_LIBC "isoc90" ++#elif (LZO_LIBC_ISOC99) ++# define LZO_INFO_LIBC "isoc99" ++#elif defined(__dietlibc__) ++# define LZO_LIBC_DIETLIBC 1 ++# define LZO_INFO_LIBC "dietlibc" ++#elif defined(_NEWLIB_VERSION) ++# define LZO_LIBC_NEWLIB 1 ++# define LZO_INFO_LIBC "newlib" ++#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) ++# if defined(__UCLIBC_SUBLEVEL__) ++# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) ++# else ++# define LZO_LIBC_UCLIBC 0x00090bL ++# endif ++# define LZO_INFO_LIBC "uclibc" ++#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) ++# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) ++# define LZO_INFO_LIBC "glibc" ++#elif (LZO_CC_MWERKS) && defined(__MSL__) ++# define LZO_LIBC_MSL __MSL__ ++# define LZO_INFO_LIBC "msl" ++#elif 1 && defined(__IAR_SYSTEMS_ICC__) ++# define LZO_LIBC_ISOC90 1 ++# define LZO_INFO_LIBC "isoc90" ++#else ++# define LZO_LIBC_DEFAULT 1 ++# define LZO_INFO_LIBC "default" ++#endif ++#endif ++#if !defined(__lzo_gnuc_extension__) ++#if (LZO_CC_GNUC >= 0x020800ul) ++# define __lzo_gnuc_extension__ __extension__ ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_gnuc_extension__ __extension__ ++#else ++# define __lzo_gnuc_extension__ /*empty*/ ++#endif ++#endif ++#if !defined(__lzo_ua_volatile) ++# define __lzo_ua_volatile volatile ++#endif ++#if !defined(__lzo_alignof) ++#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) ++# define __lzo_alignof(e) __alignof__(e) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) ++# define __lzo_alignof(e) __alignof__(e) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) ++# define __lzo_alignof(e) __alignof(e) ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_alignof(e) __alignof__(e) ++#endif ++#endif ++#if defined(__lzo_alignof) ++# define __lzo_HAVE_alignof 1 ++#endif ++#if !defined(__lzo_constructor) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_constructor __attribute__((__constructor__,__used__)) ++#elif (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_constructor __attribute__((__constructor__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_constructor __attribute__((__constructor__)) ++#endif ++#endif ++#if defined(__lzo_constructor) ++# define __lzo_HAVE_constructor 1 ++#endif ++#if !defined(__lzo_destructor) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_destructor __attribute__((__destructor__,__used__)) ++#elif (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_destructor __attribute__((__destructor__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_destructor __attribute__((__destructor__)) ++#endif ++#endif ++#if defined(__lzo_destructor) ++# define __lzo_HAVE_destructor 1 ++#endif ++#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) ++# error "this should not happen" ++#endif ++#if !defined(__lzo_inline) ++#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) ++#elif defined(__cplusplus) ++# define __lzo_inline inline ++#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) ++# define __lzo_inline __inline ++#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) ++# define __lzo_inline __inline__ ++#elif (LZO_CC_DMC) ++# define __lzo_inline __inline ++#elif (LZO_CC_INTELC) ++# define __lzo_inline __inline ++#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) ++# define __lzo_inline __inline ++#elif (LZO_CC_MSC && (_MSC_VER >= 900)) ++# define __lzo_inline __inline ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_inline __inline__ ++#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) ++# define __lzo_inline inline ++#endif ++#endif ++#if defined(__lzo_inline) ++# define __lzo_HAVE_inline 1 ++#else ++# define __lzo_inline /*empty*/ ++#endif ++#if !defined(__lzo_forceinline) ++#if (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) ++# define __lzo_forceinline __forceinline ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) ++# define __lzo_forceinline __forceinline ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) ++#endif ++#endif ++#if defined(__lzo_forceinline) ++# define __lzo_HAVE_forceinline 1 ++#else ++# define __lzo_forceinline /*empty*/ ++#endif ++#if !defined(__lzo_noinline) ++#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) ++# define __lzo_noinline __attribute__((__noinline__,__used__)) ++#elif (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) ++# define __lzo_noinline __declspec(noinline) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_noinline __attribute__((__noinline__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) ++# define __lzo_noinline __declspec(noinline) ++#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) ++# if defined(__cplusplus) ++# else ++# define __lzo_noinline __declspec(noinline) ++# endif ++#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) ++# define __lzo_noinline __attribute__((__noinline__)) ++#endif ++#endif ++#if defined(__lzo_noinline) ++# define __lzo_HAVE_noinline 1 ++#else ++# define __lzo_noinline /*empty*/ ++#endif ++#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) ++# error "this should not happen" ++#endif ++#if !defined(__lzo_noreturn) ++#if (LZO_CC_GNUC >= 0x020700ul) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) ++# define __lzo_noreturn __declspec(noreturn) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_noreturn __attribute__((__noreturn__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) ++# define __lzo_noreturn __declspec(noreturn) ++#endif ++#endif ++#if defined(__lzo_noreturn) ++# define __lzo_HAVE_noreturn 1 ++#else ++# define __lzo_noreturn /*empty*/ ++#endif ++#if !defined(__lzo_nothrow) ++#if (LZO_CC_GNUC >= 0x030300ul) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) ++# define __lzo_nothrow __declspec(nothrow) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_nothrow __attribute__((__nothrow__)) ++#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) ++# define __lzo_nothrow __declspec(nothrow) ++#endif ++#endif ++#if defined(__lzo_nothrow) ++# define __lzo_HAVE_nothrow 1 ++#else ++# define __lzo_nothrow /*empty*/ ++#endif ++#if !defined(__lzo_restrict) ++#if (LZO_CC_GNUC >= 0x030400ul) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_CLANG || LZO_CC_LLVM) ++# define __lzo_restrict __restrict__ ++#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) ++# define __lzo_restrict __restrict ++#endif ++#endif ++#if defined(__lzo_restrict) ++# define __lzo_HAVE_restrict 1 ++#else ++# define __lzo_restrict /*empty*/ ++#endif ++#if !defined(__lzo_likely) && !defined(__lzo_unlikely) ++#if (LZO_CC_GNUC >= 0x030200ul) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define __lzo_likely(e) (__builtin_expect(!!(e),1)) ++# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) ++#endif ++#endif ++#if defined(__lzo_likely) ++# define __lzo_HAVE_likely 1 ++#else ++# define __lzo_likely(e) (e) ++#endif ++#if defined(__lzo_unlikely) ++# define __lzo_HAVE_unlikely 1 ++#else ++# define __lzo_unlikely(e) (e) ++#endif ++#if !defined(LZO_UNUSED) ++# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) ++# define LZO_UNUSED(var) ((void) &var) ++# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) ++# define LZO_UNUSED(var) if (&var) ; else ++# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_UNUSED(var) ((void) var) ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_UNUSED(var) if (&var) ; else ++# elif (LZO_CC_KEILC) ++# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} ++# elif (LZO_CC_PACIFICC) ++# define LZO_UNUSED(var) ((void) sizeof(var)) ++# elif (LZO_CC_WATCOMC) && defined(__cplusplus) ++# define LZO_UNUSED(var) ((void) var) ++# else ++# define LZO_UNUSED(var) ((void) &var) ++# endif ++#endif ++#if !defined(LZO_UNUSED_FUNC) ++# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) ++# define LZO_UNUSED_FUNC(func) ((void) func) ++# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) ++# define LZO_UNUSED_FUNC(func) if (func) ; else ++# elif (LZO_CC_CLANG || LZO_CC_LLVM) ++# define LZO_UNUSED_FUNC(func) ((void) &func) ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_UNUSED_FUNC(func) if (func) ; else ++# elif (LZO_CC_MSC) ++# define LZO_UNUSED_FUNC(func) ((void) &func) ++# elif (LZO_CC_KEILC || LZO_CC_PELLESC) ++# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} ++# else ++# define LZO_UNUSED_FUNC(func) ((void) func) ++# endif ++#endif ++#if !defined(LZO_UNUSED_LABEL) ++# if (LZO_CC_WATCOMC) && defined(__cplusplus) ++# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l ++# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) ++# define LZO_UNUSED_LABEL(l) if (0) goto l ++# else ++# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l ++# endif ++#endif ++#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) ++# if 0 ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var ++# elif 0 && (LZO_CC_GNUC) ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var ++# else ++# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init ++# endif ++#endif ++#if !defined(LZO_UNCONST_CAST) ++# if 0 && defined(__cplusplus) ++# define LZO_UNCONST_CAST(t,e) (const_cast (e)) ++# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) ++# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) ++# else ++# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) ++# endif ++#endif ++#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) ++# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; ++# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; ++# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; ++# else ++# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; ++# endif ++#endif ++#if !defined(LZO_COMPILE_TIME_ASSERT) ++# if (LZO_CC_AZTECC) ++# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} ++# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# elif (LZO_CC_MSC && (_MSC_VER < 900)) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) ++# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; ++# else ++# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} ++# endif ++#endif ++#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) ++# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) ++# define __lzo_cdecl __cdecl ++# define __lzo_cdecl_atexit /*empty*/ ++# define __lzo_cdecl_main __cdecl ++# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) ++# define __lzo_cdecl_qsort __pascal ++# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) ++# define __lzo_cdecl_qsort _stdcall ++# else ++# define __lzo_cdecl_qsort __cdecl ++# endif ++# elif (LZO_CC_WATCOMC) ++# define __lzo_cdecl __cdecl ++# else ++# define __lzo_cdecl __cdecl ++# define __lzo_cdecl_atexit __cdecl ++# define __lzo_cdecl_main __cdecl ++# define __lzo_cdecl_qsort __cdecl ++# endif ++# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) ++# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) ++# define __lzo_cdecl_sighandler __pascal ++# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) ++# define __lzo_cdecl_sighandler _stdcall ++# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) ++# define __lzo_cdecl_sighandler __clrcall ++# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) ++# if defined(_DLL) ++# define __lzo_cdecl_sighandler _far _cdecl _loadds ++# elif defined(_MT) ++# define __lzo_cdecl_sighandler _far _cdecl ++# else ++# define __lzo_cdecl_sighandler _cdecl ++# endif ++# else ++# define __lzo_cdecl_sighandler __cdecl ++# endif ++#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) ++# define __lzo_cdecl __cdecl ++#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) ++# define __lzo_cdecl cdecl ++#endif ++#if !defined(__lzo_cdecl) ++# define __lzo_cdecl /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_atexit) ++# define __lzo_cdecl_atexit /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_main) ++# define __lzo_cdecl_main /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_qsort) ++# define __lzo_cdecl_qsort /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_sighandler) ++# define __lzo_cdecl_sighandler /*empty*/ ++#endif ++#if !defined(__lzo_cdecl_va) ++# define __lzo_cdecl_va __lzo_cdecl ++#endif ++#if !(LZO_CFG_NO_WINDOWS_H) ++#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) ++# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) ++# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) ++# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) ++# else ++# define LZO_HAVE_WINDOWS_H 1 ++# endif ++#endif ++#endif ++#if (LZO_ARCH_ALPHA) ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_AVOID_SHORT 1 ++# define LZO_OPT_AVOID_USHORT 1 ++#elif (LZO_ARCH_AMD64) ++# define LZO_OPT_AVOID_INT_INDEX 1 ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# define LZO_OPT_UNALIGNED64 1 ++#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) ++#elif (LZO_ARCH_ARM) ++# define LZO_OPT_AVOID_SHORT 1 ++# define LZO_OPT_AVOID_USHORT 1 ++#elif (LZO_ARCH_CRIS) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++#elif (LZO_ARCH_I386) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++#elif (LZO_ARCH_IA64) ++# define LZO_OPT_AVOID_INT_INDEX 1 ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++# define LZO_OPT_PREFER_POSTINC 1 ++#elif (LZO_ARCH_M68K) ++# define LZO_OPT_PREFER_POSTINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++# if defined(__mc68020__) && !defined(__mcoldfire__) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# endif ++#elif (LZO_ARCH_MIPS) ++# define LZO_OPT_AVOID_UINT_INDEX 1 ++#elif (LZO_ARCH_POWERPC) ++# define LZO_OPT_PREFER_PREINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++# if (LZO_ABI_BIG_ENDIAN) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# endif ++#elif (LZO_ARCH_S390) ++# define LZO_OPT_UNALIGNED16 1 ++# define LZO_OPT_UNALIGNED32 1 ++# if (LZO_SIZEOF_SIZE_T == 8) ++# define LZO_OPT_UNALIGNED64 1 ++# endif ++#elif (LZO_ARCH_SH) ++# define LZO_OPT_PREFER_POSTINC 1 ++# define LZO_OPT_PREFER_PREDEC 1 ++#endif ++#ifndef LZO_CFG_NO_INLINE_ASM ++#if (LZO_CC_LLVM) ++# define LZO_CFG_NO_INLINE_ASM 1 ++#endif ++#endif ++#ifndef LZO_CFG_NO_UNALIGNED ++#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) ++# define LZO_CFG_NO_UNALIGNED 1 ++#endif ++#endif ++#if (LZO_CFG_NO_UNALIGNED) ++# undef LZO_OPT_UNALIGNED16 ++# undef LZO_OPT_UNALIGNED32 ++# undef LZO_OPT_UNALIGNED64 ++#endif ++#if (LZO_CFG_NO_INLINE_ASM) ++#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) ++# define LZO_ASM_SYNTAX_MSC 1 ++#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) ++#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) ++#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) ++# define LZO_ASM_SYNTAX_GNUC 1 ++#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) ++# define LZO_ASM_SYNTAX_GNUC 1 ++#endif ++#if (LZO_ASM_SYNTAX_GNUC) ++#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) ++# define __LZO_ASM_CLOBBER "ax" ++#elif (LZO_CC_INTELC) ++# define __LZO_ASM_CLOBBER "memory" ++#else ++# define __LZO_ASM_CLOBBER "cc", "memory" ++#endif ++#endif ++#if defined(__LZO_INFOSTR_MM) ++#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) ++# define __LZO_INFOSTR_MM "" ++#elif defined(LZO_INFO_MM) ++# define __LZO_INFOSTR_MM "." LZO_INFO_MM ++#else ++# define __LZO_INFOSTR_MM "" ++#endif ++#if defined(__LZO_INFOSTR_PM) ++#elif defined(LZO_INFO_ABI_PM) ++# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM ++#else ++# define __LZO_INFOSTR_PM "" ++#endif ++#if defined(__LZO_INFOSTR_ENDIAN) ++#elif defined(LZO_INFO_ABI_ENDIAN) ++# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN ++#else ++# define __LZO_INFOSTR_ENDIAN "" ++#endif ++#if defined(__LZO_INFOSTR_OSNAME) ++#elif defined(LZO_INFO_OS_CONSOLE) ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE ++#elif defined(LZO_INFO_OS_POSIX) ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX ++#else ++# define __LZO_INFOSTR_OSNAME LZO_INFO_OS ++#endif ++#if defined(__LZO_INFOSTR_LIBC) ++#elif defined(LZO_INFO_LIBC) ++# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC ++#else ++# define __LZO_INFOSTR_LIBC "" ++#endif ++#if defined(__LZO_INFOSTR_CCVER) ++#elif defined(LZO_INFO_CCVER) ++# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER ++#else ++# define __LZO_INFOSTR_CCVER "" ++#endif ++#define LZO_INFO_STRING \ ++ LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ ++ " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER ++ ++#endif ++ ++#endif ++ ++#undef LZO_HAVE_CONFIG_H ++#include "minilzo.h" ++ ++#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2050) ++# error "version mismatch in miniLZO source files" ++#endif ++ ++#ifdef MINILZO_HAVE_CONFIG_H ++# define LZO_HAVE_CONFIG_H 1 ++#endif ++ ++#ifndef __LZO_CONF_H ++#define __LZO_CONF_H 1 ++ ++#if !defined(__LZO_IN_MINILZO) ++#if (LZO_CFG_FREESTANDING) ++# define LZO_LIBC_FREESTANDING 1 ++# define LZO_OS_FREESTANDING 1 ++# define ACC_LIBC_FREESTANDING 1 ++# define ACC_OS_FREESTANDING 1 ++#endif ++#if (LZO_CFG_NO_UNALIGNED) ++# define ACC_CFG_NO_UNALIGNED 1 ++#endif ++#if (LZO_ARCH_GENERIC) ++# define ACC_ARCH_GENERIC 1 ++#endif ++#if (LZO_ABI_NEUTRAL_ENDIAN) ++# define ACC_ABI_NEUTRAL_ENDIAN 1 ++#endif ++#if (LZO_HAVE_CONFIG_H) ++# define ACC_CONFIG_NO_HEADER 1 ++#endif ++#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) ++# include LZO_CFG_EXTRA_CONFIG_HEADER ++#endif ++#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) ++# error "include this file first" ++#endif ++#include "lzo/lzoconf.h" ++#endif ++ ++#if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED) ++# error "version mismatch" ++#endif ++ ++#if (LZO_CC_BORLANDC && LZO_ARCH_I086) ++# pragma option -h ++#endif ++ ++#if (LZO_CC_MSC && (_MSC_VER >= 1000)) ++# pragma warning(disable: 4127 4701) ++#endif ++#if (LZO_CC_MSC && (_MSC_VER >= 1300)) ++# pragma warning(disable: 4820) ++# pragma warning(disable: 4514 4710 4711) ++#endif ++ ++#if (LZO_CC_SUNPROC) ++#if !defined(__cplusplus) ++# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) ++# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) ++# pragma error_messages(off,E_STATEMENT_NOT_REACHED) ++#endif ++#endif ++ ++#if (__LZO_MMODEL_HUGE) && !(LZO_HAVE_MM_HUGE_PTR) ++# error "this should not happen - check defines for __huge" ++#endif ++ ++#if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING) ++#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) ++# define ACC_WANT_ACC_INCD_H 1 ++# define ACC_WANT_ACC_INCE_H 1 ++# define ACC_WANT_ACC_INCI_H 1 ++#elif 1 ++# include ++#else ++# define ACC_WANT_ACC_INCD_H 1 ++#endif ++ ++#if (LZO_ARCH_I086) ++# define ACC_MM_AHSHIFT LZO_MM_AHSHIFT ++# define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) ++# define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) ++# define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) ++#endif ++ ++#if !defined(lzo_uintptr_t) ++# if defined(__LZO_MMODEL_HUGE) ++# define lzo_uintptr_t unsigned long ++# elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16) ++# define __LZO_UINTPTR_T_IS_POINTER 1 ++ typedef char* lzo_uintptr_t; ++# define lzo_uintptr_t lzo_uintptr_t ++# elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P) ++# define lzo_uintptr_t size_t ++# elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P) ++# define lzo_uintptr_t unsigned long ++# elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P) ++# define lzo_uintptr_t unsigned int ++# elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P) ++# define lzo_uintptr_t unsigned long long ++# else ++# define lzo_uintptr_t size_t ++# endif ++#endif ++LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) ++ ++#if 1 && !defined(LZO_CFG_FREESTANDING) ++#if 1 && !defined(HAVE_STRING_H) ++#define HAVE_STRING_H 1 ++#endif ++#if 1 && !defined(HAVE_MEMCMP) ++#define HAVE_MEMCMP 1 ++#endif ++#if 1 && !defined(HAVE_MEMCPY) ++#define HAVE_MEMCPY 1 ++#endif ++#if 1 && !defined(HAVE_MEMMOVE) ++#define HAVE_MEMMOVE 1 ++#endif ++#if 1 && !defined(HAVE_MEMSET) ++#define HAVE_MEMSET 1 ++#endif ++#endif ++ ++#if 1 && defined(HAVE_STRING_H) ++#include ++#endif ++ ++#if (LZO_CFG_FREESTANDING) ++# undef HAVE_MEMCMP ++# undef HAVE_MEMCPY ++# undef HAVE_MEMMOVE ++# undef HAVE_MEMSET ++#endif ++ ++#if !(HAVE_MEMCMP) ++# undef memcmp ++# define memcmp(a,b,c) lzo_memcmp(a,b,c) ++#elif !(__LZO_MMODEL_HUGE) ++# undef lzo_memcmp ++# define lzo_memcmp(a,b,c) memcmp(a,b,c) ++#endif ++#if !(HAVE_MEMCPY) ++# undef memcpy ++# define memcpy(a,b,c) lzo_memcpy(a,b,c) ++#elif !(__LZO_MMODEL_HUGE) ++# undef lzo_memcpy ++# define lzo_memcpy(a,b,c) memcpy(a,b,c) ++#endif ++#if !(HAVE_MEMMOVE) ++# undef memmove ++# define memmove(a,b,c) lzo_memmove(a,b,c) ++#elif !(__LZO_MMODEL_HUGE) ++# undef lzo_memmove ++# define lzo_memmove(a,b,c) memmove(a,b,c) ++#endif ++#if !(HAVE_MEMSET) ++# undef memset ++# define memset(a,b,c) lzo_memset(a,b,c) ++#elif !(__LZO_MMODEL_HUGE) ++# undef lzo_memset ++# define lzo_memset(a,b,c) memset(a,b,c) ++#endif ++ ++#undef NDEBUG ++#if (LZO_CFG_FREESTANDING) ++# undef LZO_DEBUG ++# define NDEBUG 1 ++# undef assert ++# define assert(e) ((void)0) ++#else ++# if !defined(LZO_DEBUG) ++# define NDEBUG 1 ++# endif ++# include ++#endif ++ ++#if 0 && defined(__BOUNDS_CHECKING_ON) ++# include ++#else ++# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt ++# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) ++#endif ++ ++#if !defined(__lzo_inline) ++# define __lzo_inline /*empty*/ ++#endif ++#if !defined(__lzo_forceinline) ++# define __lzo_forceinline /*empty*/ ++#endif ++#if !defined(__lzo_noinline) ++# define __lzo_noinline /*empty*/ ++#endif ++ ++#if (LZO_CFG_PGO) ++# undef __acc_likely ++# undef __acc_unlikely ++# undef __lzo_likely ++# undef __lzo_unlikely ++# define __acc_likely(e) (e) ++# define __acc_unlikely(e) (e) ++# define __lzo_likely(e) (e) ++# define __lzo_unlikely(e) (e) ++#endif ++ ++#if 1 ++# define LZO_BYTE(x) ((unsigned char) (x)) ++#else ++# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) ++#endif ++ ++#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) ++#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) ++#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) ++#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) ++ ++#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) ++ ++#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) ++ ++#define LZO_SIZE(bits) (1u << (bits)) ++#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) ++ ++#define LZO_LSIZE(bits) (1ul << (bits)) ++#define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) ++ ++#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) ++#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) ++ ++#if !defined(DMUL) ++#if 0 ++ ++# define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b))) ++#else ++# define DMUL(a,b) ((lzo_xint) ((a) * (b))) ++#endif ++#endif ++ ++#if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386 || LZO_ARCH_POWERPC) ++# if (LZO_SIZEOF_SHORT == 2) ++# define LZO_UNALIGNED_OK_2 1 ++# endif ++# if (LZO_SIZEOF_INT == 4) ++# define LZO_UNALIGNED_OK_4 1 ++# endif ++#endif ++#if 1 && (LZO_ARCH_AMD64) ++# if defined(LZO_UINT64_MAX) ++# define LZO_UNALIGNED_OK_8 1 ++# endif ++#endif ++#if (LZO_CFG_NO_UNALIGNED) ++# undef LZO_UNALIGNED_OK_2 ++# undef LZO_UNALIGNED_OK_4 ++# undef LZO_UNALIGNED_OK_8 ++#endif ++ ++#undef UA_GET16 ++#undef UA_SET16 ++#undef UA_COPY16 ++#undef UA_GET32 ++#undef UA_SET32 ++#undef UA_COPY32 ++#undef UA_GET64 ++#undef UA_SET64 ++#undef UA_COPY64 ++#if defined(LZO_UNALIGNED_OK_2) ++ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(unsigned short) == 2) ++# if 1 && defined(ACC_UA_COPY16) ++# define UA_GET16 ACC_UA_GET16 ++# define UA_SET16 ACC_UA_SET16 ++# define UA_COPY16 ACC_UA_COPY16 ++# else ++# define UA_GET16(p) (* (__lzo_ua_volatile const lzo_ushortp) (__lzo_ua_volatile const lzo_voidp) (p)) ++# define UA_SET16(p,v) ((* (__lzo_ua_volatile lzo_ushortp) (__lzo_ua_volatile lzo_voidp) (p)) = (unsigned short) (v)) ++# define UA_COPY16(d,s) UA_SET16(d, UA_GET16(s)) ++# endif ++#endif ++#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) ++ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) ++# if 1 && defined(ACC_UA_COPY32) ++# define UA_GET32 ACC_UA_GET32 ++# define UA_SET32 ACC_UA_SET32 ++# define UA_COPY32 ACC_UA_COPY32 ++# else ++# define UA_GET32(p) (* (__lzo_ua_volatile const lzo_uint32p) (__lzo_ua_volatile const lzo_voidp) (p)) ++# define UA_SET32(p,v) ((* (__lzo_ua_volatile lzo_uint32p) (__lzo_ua_volatile lzo_voidp) (p)) = (lzo_uint32) (v)) ++# define UA_COPY32(d,s) UA_SET32(d, UA_GET32(s)) ++# endif ++#endif ++#if defined(LZO_UNALIGNED_OK_8) ++ LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint64) == 8) ++# if 1 && defined(ACC_UA_COPY64) ++# define UA_GET64 ACC_UA_GET64 ++# define UA_SET64 ACC_UA_SET64 ++# define UA_COPY64 ACC_UA_COPY64 ++# else ++# define UA_GET64(p) (* (__lzo_ua_volatile const lzo_uint64p) (__lzo_ua_volatile const lzo_voidp) (p)) ++# define UA_SET64(p,v) ((* (__lzo_ua_volatile lzo_uint64p) (__lzo_ua_volatile lzo_voidp) (p)) = (lzo_uint64) (v)) ++# define UA_COPY64(d,s) UA_SET64(d, UA_GET64(s)) ++# endif ++#endif ++ ++#define MEMCPY8_DS(dest,src,len) \ ++ lzo_memcpy(dest,src,len); dest += len; src += len ++ ++#define BZERO8_PTR(s,l,n) \ ++ lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) ++ ++#define MEMCPY_DS(dest,src,len) \ ++ do *dest++ = *src++; while (--len > 0) ++ ++LZO_EXTERN(const lzo_bytep) lzo_copyright(void); ++ ++#ifndef __LZO_PTR_H ++#define __LZO_PTR_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#if !defined(lzo_uintptr_t) ++# if (__LZO_MMODEL_HUGE) ++# define lzo_uintptr_t unsigned long ++# else ++# define lzo_uintptr_t acc_uintptr_t ++# ifdef __ACC_INTPTR_T_IS_POINTER ++# define __LZO_UINTPTR_T_IS_POINTER 1 ++# endif ++# endif ++#endif ++ ++#if (LZO_ARCH_I086) ++#define PTR(a) ((lzo_bytep) (a)) ++#define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0) ++#define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0) ++#elif (LZO_MM_PVP) ++#define PTR(a) ((lzo_bytep) (a)) ++#define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0) ++#define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0) ++#else ++#define PTR(a) ((lzo_uintptr_t) (a)) ++#define PTR_LINEAR(a) PTR(a) ++#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) ++#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) ++#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) ++#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) ++#endif ++ ++#define PTR_LT(a,b) (PTR(a) < PTR(b)) ++#define PTR_GE(a,b) (PTR(a) >= PTR(b)) ++#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) ++#define pd(a,b) ((lzo_uint) ((a)-(b))) ++ ++LZO_EXTERN(lzo_uintptr_t) ++__lzo_ptr_linear(const lzo_voidp ptr); ++ ++typedef union ++{ ++ char a_char; ++ unsigned char a_uchar; ++ short a_short; ++ unsigned short a_ushort; ++ int a_int; ++ unsigned int a_uint; ++ long a_long; ++ unsigned long a_ulong; ++ lzo_int a_lzo_int; ++ lzo_uint a_lzo_uint; ++ lzo_int32 a_lzo_int32; ++ lzo_uint32 a_lzo_uint32; ++#if defined(LZO_UINT64_MAX) ++ lzo_int64 a_lzo_int64; ++ lzo_uint64 a_lzo_uint64; ++#endif ++ ptrdiff_t a_ptrdiff_t; ++ lzo_uintptr_t a_lzo_uintptr_t; ++ lzo_voidp a_lzo_voidp; ++ void * a_void_p; ++ lzo_bytep a_lzo_bytep; ++ lzo_bytepp a_lzo_bytepp; ++ lzo_uintp a_lzo_uintp; ++ lzo_uint * a_lzo_uint_p; ++ lzo_uint32p a_lzo_uint32p; ++ lzo_uint32 * a_lzo_uint32_p; ++ unsigned char * a_uchar_p; ++ char * a_char_p; ++} ++lzo_full_align_t; ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++#ifndef LZO_DETERMINISTIC ++#define LZO_DETERMINISTIC 1 ++#endif ++ ++#ifndef LZO_DICT_USE_PTR ++#define LZO_DICT_USE_PTR 1 ++#if 0 && (LZO_ARCH_I086) ++# undef LZO_DICT_USE_PTR ++# define LZO_DICT_USE_PTR 0 ++#endif ++#endif ++ ++#if (LZO_DICT_USE_PTR) ++# define lzo_dict_t const lzo_bytep ++# define lzo_dict_p lzo_dict_t __LZO_MMODEL * ++#else ++# define lzo_dict_t lzo_uint ++# define lzo_dict_p lzo_dict_t __LZO_MMODEL * ++#endif ++ ++#endif ++ ++#if !defined(MINILZO_CFG_SKIP_LZO_PTR) ++ ++LZO_PUBLIC(lzo_uintptr_t) ++__lzo_ptr_linear(const lzo_voidp ptr) ++{ ++ lzo_uintptr_t p; ++ ++#if (LZO_ARCH_I086) ++ p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr)); ++#elif (LZO_MM_PVP) ++ p = (lzo_uintptr_t) (ptr); ++ p = (p << 3) | (p >> 61); ++#else ++ p = (lzo_uintptr_t) PTR_LINEAR(ptr); ++#endif ++ ++ return p; ++} ++ ++LZO_PUBLIC(unsigned) ++__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) ++{ ++#if defined(__LZO_UINTPTR_T_IS_POINTER) ++ size_t n = (size_t) ptr; ++ n = (((n + size - 1) / size) * size) - n; ++#else ++ lzo_uintptr_t p, n; ++ p = __lzo_ptr_linear(ptr); ++ n = (((p + size - 1) / size) * size) - p; ++#endif ++ ++ assert(size > 0); ++ assert((long)n >= 0); ++ assert(n <= size); ++ return (unsigned)n; ++} ++ ++#endif ++#if !defined(MINILZO_CFG_SKIP_LZO_UTIL) ++ ++/* If you use the LZO library in a product, I would appreciate that you ++ * keep this copyright string in the executable of your product. ++ */ ++ ++static const char __lzo_copyright[] = ++#if !defined(__LZO_IN_MINLZO) ++ LZO_VERSION_STRING; ++#else ++ "\r\n\n" ++ "LZO data compression library.\n" ++ "$Copyright: LZO Copyright (C) 1996-2011 Markus Franz Xaver Johannes Oberhumer\n" ++ "\n" ++ "http://www.oberhumer.com $\n\n" ++ "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n" ++ "$Info: " LZO_INFO_STRING " $\n"; ++#endif ++ ++LZO_PUBLIC(const lzo_bytep) ++lzo_copyright(void) ++{ ++#if (LZO_OS_DOS16 && LZO_CC_TURBOC) ++ return (lzo_voidp) __lzo_copyright; ++#else ++ return (const lzo_bytep) __lzo_copyright; ++#endif ++} ++ ++LZO_PUBLIC(unsigned) ++lzo_version(void) ++{ ++ return LZO_VERSION; ++} ++ ++LZO_PUBLIC(const char *) ++lzo_version_string(void) ++{ ++ return LZO_VERSION_STRING; ++} ++ ++LZO_PUBLIC(const char *) ++lzo_version_date(void) ++{ ++ return LZO_VERSION_DATE; ++} ++ ++LZO_PUBLIC(const lzo_charp) ++_lzo_version_string(void) ++{ ++ return LZO_VERSION_STRING; ++} ++ ++LZO_PUBLIC(const lzo_charp) ++_lzo_version_date(void) ++{ ++ return LZO_VERSION_DATE; ++} ++ ++#define LZO_BASE 65521u ++#define LZO_NMAX 5552 ++ ++#define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 ++#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); ++#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); ++#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); ++#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); ++ ++LZO_PUBLIC(lzo_uint32) ++lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len) ++{ ++ lzo_uint32 s1 = adler & 0xffff; ++ lzo_uint32 s2 = (adler >> 16) & 0xffff; ++ unsigned k; ++ ++ if (buf == NULL) ++ return 1; ++ ++ while (len > 0) ++ { ++ k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; ++ len -= k; ++ if (k >= 16) do ++ { ++ LZO_DO16(buf,0); ++ buf += 16; ++ k -= 16; ++ } while (k >= 16); ++ if (k != 0) do ++ { ++ s1 += *buf++; ++ s2 += s1; ++ } while (--k > 0); ++ s1 %= LZO_BASE; ++ s2 %= LZO_BASE; ++ } ++ return (s2 << 16) | s1; ++} ++ ++#undef LZO_DO1 ++#undef LZO_DO2 ++#undef LZO_DO4 ++#undef LZO_DO8 ++#undef LZO_DO16 ++ ++#endif ++#if !defined(MINILZO_CFG_SKIP_LZO_STRING) ++#undef lzo_memcmp ++#undef lzo_memcpy ++#undef lzo_memmove ++#undef lzo_memset ++#if !defined(__LZO_MMODEL_HUGE) ++# undef LZO_HAVE_MM_HUGE_PTR ++#endif ++#define lzo_hsize_t lzo_uint ++#define lzo_hvoid_p lzo_voidp ++#define lzo_hbyte_p lzo_bytep ++#define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f ++#define lzo_hmemcmp lzo_memcmp ++#define lzo_hmemcpy lzo_memcpy ++#define lzo_hmemmove lzo_memmove ++#define lzo_hmemset lzo_memset ++#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 ++#if !defined(LZOLIB_PUBLIC) ++# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) ++#endif ++LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) ++{ ++#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) ++ const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1; ++ const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2; ++ if __lzo_likely(len > 0) do ++ { ++ int d = *p1 - *p2; ++ if (d != 0) ++ return d; ++ p1++; p2++; ++ } while __lzo_likely(--len > 0); ++ return 0; ++#else ++ return memcmp(s1, s2, len); ++#endif ++} ++LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) ++{ ++#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) ++ lzo_hbyte_p p1 = (lzo_hbyte_p) dest; ++ const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; ++ if (!(len > 0) || p1 == p2) ++ return dest; ++ do ++ *p1++ = *p2++; ++ while __lzo_likely(--len > 0); ++ return dest; ++#else ++ return memcpy(dest, src, len); ++#endif ++} ++LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) ++{ ++#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) ++ lzo_hbyte_p p1 = (lzo_hbyte_p) dest; ++ const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; ++ if (!(len > 0) || p1 == p2) ++ return dest; ++ if (p1 < p2) ++ { ++ do ++ *p1++ = *p2++; ++ while __lzo_likely(--len > 0); ++ } ++ else ++ { ++ p1 += len; ++ p2 += len; ++ do ++ *--p1 = *--p2; ++ while __lzo_likely(--len > 0); ++ } ++ return dest; ++#else ++ return memmove(dest, src, len); ++#endif ++} ++LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len) ++{ ++#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) ++ lzo_hbyte_p p = (lzo_hbyte_p) s; ++ if __lzo_likely(len > 0) do ++ *p++ = (unsigned char) c; ++ while __lzo_likely(--len > 0); ++ return s; ++#else ++ return memset(s, c, len); ++#endif ++} ++#undef LZOLIB_PUBLIC ++#endif ++#if !defined(MINILZO_CFG_SKIP_LZO_INIT) ++ ++#if !defined(__LZO_IN_MINILZO) ++ ++#define ACC_WANT_ACC_CHK_CH 1 ++#undef ACCCHK_ASSERT ++ ++ ACCCHK_ASSERT_IS_SIGNED_T(lzo_int) ++ ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) ++ ++ ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32) ++ ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32) ++ ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) ++ ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4) ++#if defined(LZO_UINT64_MAX) ++ ACCCHK_ASSERT(sizeof(lzo_uint64) == 8) ++ ACCCHK_ASSERT_IS_SIGNED_T(lzo_int64) ++ ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64) ++#endif ++ ++#if !defined(__LZO_UINTPTR_T_IS_POINTER) ++ ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) ++#endif ++ ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) ++ ++ ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) ++ ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32)) ++ ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint)) ++ ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint)) ++ ++#endif ++#undef ACCCHK_ASSERT ++ ++#if 0 ++#define WANT_lzo_bitops_clz32 1 ++#define WANT_lzo_bitops_clz64 1 ++#endif ++#define WANT_lzo_bitops_ctz32 1 ++#define WANT_lzo_bitops_ctz64 1 ++ ++#if (defined(_WIN32) || defined(_WIN64)) && ((LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) ++#include ++#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) && 0 ++#pragma intrinsic(_BitScanReverse) ++static __lzo_inline unsigned lzo_bitops_clz32(lzo_uint32 v) ++{ ++ unsigned long r; ++ (void) _BitScanReverse(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_clz32 lzo_bitops_clz32 ++#endif ++#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) && 0 ++#pragma intrinsic(_BitScanReverse64) ++static __lzo_inline unsigned lzo_bitops_clz64(lzo_uint64 v) ++{ ++ unsigned long r; ++ (void) _BitScanReverse64(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_clz64 lzo_bitops_clz64 ++#endif ++#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) ++#pragma intrinsic(_BitScanForward) ++static __lzo_inline unsigned lzo_bitops_ctz32(lzo_uint32 v) ++{ ++ unsigned long r; ++ (void) _BitScanForward(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_ctz32 lzo_bitops_ctz32 ++#endif ++#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) ++#pragma intrinsic(_BitScanForward64) ++static __lzo_inline unsigned lzo_bitops_ctz64(lzo_uint64 v) ++{ ++ unsigned long r; ++ (void) _BitScanForward64(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_ctz64 lzo_bitops_ctz64 ++#endif ++ ++#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || LZO_CC_LLVM) ++#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) ++#define lzo_bitops_clz32(v) ((unsigned) __builtin_clz(v)) ++#endif ++#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_clz64(v) ((unsigned) __builtin_clzll(v)) ++#endif ++#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) ++#define lzo_bitops_ctz32(v) ((unsigned) __builtin_ctz(v)) ++#endif ++#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_ctz64(v) ((unsigned) __builtin_ctzll(v)) ++#endif ++#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount32) ++#define lzo_bitops_popcount32(v) ((unsigned) __builtin_popcount(v)) ++#endif ++#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_popcount64(v) ((unsigned) __builtin_popcountll(v)) ++#endif ++#endif ++ ++#if 0 ++#define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off))) ++#else ++static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off) ++{ ++ return (lzo_voidp) ((lzo_bytep) ptr + off); ++} ++#endif ++ ++LZO_PUBLIC(int) ++_lzo_config_check(void) ++{ ++ lzo_bool r = 1; ++ union { ++ lzo_xint a[2]; unsigned char b[2*LZO_MAX(8,sizeof(lzo_xint))]; ++#if defined(LZO_UNALIGNED_OK_8) ++ lzo_uint64 c[2]; ++#endif ++ unsigned short x[2]; lzo_uint32 y[2]; lzo_uint z[2]; ++ } u; ++ lzo_voidp p; ++ ++ u.a[0] = u.a[1] = 0; ++ p = u2p(&u, 0); ++ r &= ((* (lzo_bytep) p) == 0); ++#if !defined(LZO_CFG_NO_CONFIG_CHECK) ++#if defined(LZO_ABI_BIG_ENDIAN) ++ u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128; ++ p = u2p(&u, 0); ++ r &= ((* (lzo_uintp) p) == 128); ++#endif ++#if defined(LZO_ABI_LITTLE_ENDIAN) ++ u.a[0] = u.a[1] = 0; u.b[0] = 128; ++ p = u2p(&u, 0); ++ r &= ((* (lzo_uintp) p) == 128); ++#endif ++#if defined(LZO_UNALIGNED_OK_2) ++ u.a[0] = u.a[1] = 0; ++ u.b[0] = 1; u.b[sizeof(unsigned short) + 1] = 2; ++ p = u2p(&u, 1); ++ r &= ((* (lzo_ushortp) p) == 0); ++#endif ++#if defined(LZO_UNALIGNED_OK_4) ++ u.a[0] = u.a[1] = 0; ++ u.b[0] = 3; u.b[sizeof(lzo_uint32) + 1] = 4; ++ p = u2p(&u, 1); ++ r &= ((* (lzo_uint32p) p) == 0); ++#endif ++#if defined(LZO_UNALIGNED_OK_8) ++ u.c[0] = u.c[1] = 0; ++ u.b[0] = 5; u.b[sizeof(lzo_uint64) + 1] = 6; ++ p = u2p(&u, 1); ++ r &= ((* (lzo_uint64p) p) == 0); ++#endif ++#if defined(lzo_bitops_clz32) ++ { unsigned i; lzo_uint32 v = 1; ++ for (i = 0; i < 31; i++, v <<= 1) ++ r &= lzo_bitops_clz32(v) == 31 - i; ++ } ++#endif ++#if defined(lzo_bitops_clz64) ++ { unsigned i; lzo_uint64 v = 1; ++ for (i = 0; i < 63; i++, v <<= 1) ++ r &= lzo_bitops_clz64(v) == 63 - i; ++ } ++#endif ++#if defined(lzo_bitops_ctz32) ++ { unsigned i; lzo_uint32 v = 1; ++ for (i = 0; i < 31; i++, v <<= 1) ++ r &= lzo_bitops_ctz32(v) == i; ++ } ++#endif ++#if defined(lzo_bitops_ctz64) ++ { unsigned i; lzo_uint64 v = 1; ++ for (i = 0; i < 63; i++, v <<= 1) ++ r &= lzo_bitops_ctz64(v) == i; ++ } ++#endif ++#endif ++ ++ return r == 1 ? LZO_E_OK : LZO_E_ERROR; ++} ++ ++LZO_PUBLIC(int) ++__lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, ++ int s6, int s7, int s8, int s9) ++{ ++ int r; ++ ++#if defined(__LZO_IN_MINILZO) ++#elif (LZO_CC_MSC && ((_MSC_VER) < 700)) ++#else ++#define ACC_WANT_ACC_CHK_CH 1 ++#undef ACCCHK_ASSERT ++#define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) ++#endif ++#undef ACCCHK_ASSERT ++ ++ if (v == 0) ++ return LZO_E_ERROR; ++ ++ r = (s1 == -1 || s1 == (int) sizeof(short)) && ++ (s2 == -1 || s2 == (int) sizeof(int)) && ++ (s3 == -1 || s3 == (int) sizeof(long)) && ++ (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && ++ (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && ++ (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && ++ (s7 == -1 || s7 == (int) sizeof(char *)) && ++ (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && ++ (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); ++ if (!r) ++ return LZO_E_ERROR; ++ ++ r = _lzo_config_check(); ++ if (r != LZO_E_OK) ++ return r; ++ ++ return r; ++} ++ ++#if !defined(__LZO_IN_MINILZO) ++ ++#if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) ++ ++#if 0 ++BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, ++ WORD wHeapSize, LPSTR lpszCmdLine ) ++#else ++int __far __pascal LibMain ( int a, short b, short c, long d ) ++#endif ++{ ++ LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); ++ return 1; ++} ++ ++#endif ++ ++#endif ++ ++#endif ++ ++#define LZO1X 1 ++#define LZO_EOF_CODE 1 ++#define M2_MAX_OFFSET 0x0800 ++ ++#if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) ++ ++#if 1 && defined(UA_GET32) ++#undef LZO_DICT_USE_PTR ++#define LZO_DICT_USE_PTR 0 ++#undef lzo_dict_t ++#define lzo_dict_t unsigned short ++#endif ++ ++#define LZO_NEED_DICT_H 1 ++#ifndef D_BITS ++#define D_BITS 14 ++#endif ++#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) ++#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) ++#if 1 ++#define DINDEX(dv,p) DM(((DMUL(0x1824429d,dv)) >> (32-D_BITS))) ++#else ++#define DINDEX(dv,p) DM((dv) + ((dv) >> (32-D_BITS))) ++#endif ++ ++#ifndef __LZO_CONFIG1X_H ++#define __LZO_CONFIG1X_H 1 ++ ++#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) ++# define LZO1X 1 ++#endif ++ ++#if !defined(__LZO_IN_MINILZO) ++#include "lzo/lzo1x.h" ++#endif ++ ++#ifndef LZO_EOF_CODE ++#define LZO_EOF_CODE 1 ++#endif ++#undef LZO_DETERMINISTIC ++ ++#define M1_MAX_OFFSET 0x0400 ++#ifndef M2_MAX_OFFSET ++#define M2_MAX_OFFSET 0x0800 ++#endif ++#define M3_MAX_OFFSET 0x4000 ++#define M4_MAX_OFFSET 0xbfff ++ ++#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) ++ ++#define M1_MIN_LEN 2 ++#define M1_MAX_LEN 2 ++#define M2_MIN_LEN 3 ++#ifndef M2_MAX_LEN ++#define M2_MAX_LEN 8 ++#endif ++#define M3_MIN_LEN 3 ++#define M3_MAX_LEN 33 ++#define M4_MIN_LEN 3 ++#define M4_MAX_LEN 9 ++ ++#define M1_MARKER 0 ++#define M2_MARKER 64 ++#define M3_MARKER 32 ++#define M4_MARKER 16 ++ ++#ifndef MIN_LOOKAHEAD ++#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) ++#endif ++ ++#if defined(LZO_NEED_DICT_H) ++ ++#ifndef LZO_HASH ++#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B ++#endif ++#define DL_MIN_LEN M2_MIN_LEN ++ ++#ifndef __LZO_DICT_H ++#define __LZO_DICT_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#if !defined(D_BITS) && defined(DBITS) ++# define D_BITS DBITS ++#endif ++#if !defined(D_BITS) ++# error "D_BITS is not defined" ++#endif ++#if (D_BITS < 16) ++# define D_SIZE LZO_SIZE(D_BITS) ++# define D_MASK LZO_MASK(D_BITS) ++#else ++# define D_SIZE LZO_USIZE(D_BITS) ++# define D_MASK LZO_UMASK(D_BITS) ++#endif ++#define D_HIGH ((D_MASK >> 1) + 1) ++ ++#if !defined(DD_BITS) ++# define DD_BITS 0 ++#endif ++#define DD_SIZE LZO_SIZE(DD_BITS) ++#define DD_MASK LZO_MASK(DD_BITS) ++ ++#if !defined(DL_BITS) ++# define DL_BITS (D_BITS - DD_BITS) ++#endif ++#if (DL_BITS < 16) ++# define DL_SIZE LZO_SIZE(DL_BITS) ++# define DL_MASK LZO_MASK(DL_BITS) ++#else ++# define DL_SIZE LZO_USIZE(DL_BITS) ++# define DL_MASK LZO_UMASK(DL_BITS) ++#endif ++ ++#if (D_BITS != DL_BITS + DD_BITS) ++# error "D_BITS does not match" ++#endif ++#if (D_BITS < 6 || D_BITS > 18) ++# error "invalid D_BITS" ++#endif ++#if (DL_BITS < 6 || DL_BITS > 20) ++# error "invalid DL_BITS" ++#endif ++#if (DD_BITS < 0 || DD_BITS > 6) ++# error "invalid DD_BITS" ++#endif ++ ++#if !defined(DL_MIN_LEN) ++# define DL_MIN_LEN 3 ++#endif ++#if !defined(DL_SHIFT) ++# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) ++#endif ++ ++#define LZO_HASH_GZIP 1 ++#define LZO_HASH_GZIP_INCREMENTAL 2 ++#define LZO_HASH_LZO_INCREMENTAL_A 3 ++#define LZO_HASH_LZO_INCREMENTAL_B 4 ++ ++#if !defined(LZO_HASH) ++# error "choose a hashing strategy" ++#endif ++ ++#undef DM ++#undef DX ++ ++#if (DL_MIN_LEN == 3) ++# define _DV2_A(p,shift1,shift2) \ ++ (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) ++# define _DV2_B(p,shift1,shift2) \ ++ (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) ++# define _DV3_B(p,shift1,shift2,shift3) \ ++ ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) ++#elif (DL_MIN_LEN == 2) ++# define _DV2_A(p,shift1,shift2) \ ++ (( (lzo_xint)(p[0]) << shift1) ^ p[1]) ++# define _DV2_B(p,shift1,shift2) \ ++ (( (lzo_xint)(p[1]) << shift1) ^ p[2]) ++#else ++# error "invalid DL_MIN_LEN" ++#endif ++#define _DV_A(p,shift) _DV2_A(p,shift,shift) ++#define _DV_B(p,shift) _DV2_B(p,shift,shift) ++#define DA2(p,s1,s2) \ ++ (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) ++#define DS2(p,s1,s2) \ ++ (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) ++#define DX2(p,s1,s2) \ ++ (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) ++#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) ++#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) ++#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) ++#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) ++#define DM(v) DMS(v,0) ++ ++#if (LZO_HASH == LZO_HASH_GZIP) ++# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) ++ ++#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) ++# define __LZO_HASH_INCREMENTAL 1 ++# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) ++# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) ++# define _DINDEX(dv,p) (dv) ++# define DVAL_LOOKAHEAD DL_MIN_LEN ++ ++#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) ++# define __LZO_HASH_INCREMENTAL 1 ++# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) ++# define DVAL_NEXT(dv,p) \ ++ dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) ++# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) ++# define DVAL_LOOKAHEAD DL_MIN_LEN ++ ++#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) ++# define __LZO_HASH_INCREMENTAL 1 ++# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) ++# define DVAL_NEXT(dv,p) \ ++ dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) ++# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) ++# define DVAL_LOOKAHEAD DL_MIN_LEN ++ ++#else ++# error "choose a hashing strategy" ++#endif ++ ++#ifndef DINDEX ++#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) ++#endif ++#if !defined(DINDEX1) && defined(D_INDEX1) ++#define DINDEX1 D_INDEX1 ++#endif ++#if !defined(DINDEX2) && defined(D_INDEX2) ++#define DINDEX2 D_INDEX2 ++#endif ++ ++#if !defined(__LZO_HASH_INCREMENTAL) ++# define DVAL_FIRST(dv,p) ((void) 0) ++# define DVAL_NEXT(dv,p) ((void) 0) ++# define DVAL_LOOKAHEAD 0 ++#endif ++ ++#if !defined(DVAL_ASSERT) ++#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) ++#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM) ++static void __attribute__((__unused__)) ++#else ++static void ++#endif ++DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) ++{ ++ lzo_xint df; ++ DVAL_FIRST(df,(p)); ++ assert(DINDEX(dv,p) == DINDEX(df,p)); ++} ++#else ++# define DVAL_ASSERT(dv,p) ((void) 0) ++#endif ++#endif ++ ++#if (LZO_DICT_USE_PTR) ++# define DENTRY(p,in) (p) ++# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] ++#else ++# define DENTRY(p,in) ((lzo_dict_t) pd(p, in)) ++# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] ++#endif ++ ++#if (DD_BITS == 0) ++ ++# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) ++# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) ++# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) ++ ++#else ++ ++# define UPDATE_D(dict,drun,dv,p,in) \ ++ dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK ++# define UPDATE_I(dict,drun,index,p,in) \ ++ dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK ++# define UPDATE_P(ptr,drun,p,in) \ ++ (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK ++ ++#endif ++ ++#if (LZO_DICT_USE_PTR) ++ ++#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ ++ (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) ++ ++#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ ++ (BOUNDS_CHECKING_OFF_IN_EXPR(( \ ++ m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ ++ PTR_LT(m_pos,in) || \ ++ (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ ++ m_off > max_offset ))) ++ ++#else ++ ++#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ ++ (m_off == 0 || \ ++ ((m_off = pd(ip, in) - m_off) > max_offset) || \ ++ (m_pos = (ip) - (m_off), 0) ) ++ ++#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ ++ (pd(ip, in) <= m_off || \ ++ ((m_off = pd(ip, in) - m_off) > max_offset) || \ ++ (m_pos = (ip) - (m_off), 0) ) ++ ++#endif ++ ++#if (LZO_DETERMINISTIC) ++# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET ++#else ++# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif ++ ++#endif ++ ++#endif ++ ++#define LZO_DETERMINISTIC !(LZO_DICT_USE_PTR) ++ ++#ifndef DO_COMPRESS ++#define DO_COMPRESS lzo1x_1_compress ++#endif ++ ++#if 1 && defined(DO_COMPRESS) && !defined(do_compress) ++# define do_compress LZO_CPP_ECONCAT2(DO_COMPRESS,_core) ++#endif ++ ++#if defined(UA_GET64) ++# define WANT_lzo_bitops_ctz64 1 ++#elif defined(UA_GET32) ++# define WANT_lzo_bitops_ctz32 1 ++#endif ++ ++#if (defined(_WIN32) || defined(_WIN64)) && ((LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) ++#include ++#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) && 0 ++#pragma intrinsic(_BitScanReverse) ++static __lzo_inline unsigned lzo_bitops_clz32(lzo_uint32 v) ++{ ++ unsigned long r; ++ (void) _BitScanReverse(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_clz32 lzo_bitops_clz32 ++#endif ++#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) && 0 ++#pragma intrinsic(_BitScanReverse64) ++static __lzo_inline unsigned lzo_bitops_clz64(lzo_uint64 v) ++{ ++ unsigned long r; ++ (void) _BitScanReverse64(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_clz64 lzo_bitops_clz64 ++#endif ++#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) ++#pragma intrinsic(_BitScanForward) ++static __lzo_inline unsigned lzo_bitops_ctz32(lzo_uint32 v) ++{ ++ unsigned long r; ++ (void) _BitScanForward(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_ctz32 lzo_bitops_ctz32 ++#endif ++#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) ++#pragma intrinsic(_BitScanForward64) ++static __lzo_inline unsigned lzo_bitops_ctz64(lzo_uint64 v) ++{ ++ unsigned long r; ++ (void) _BitScanForward64(&r, v); ++ return (unsigned) r; ++} ++#define lzo_bitops_ctz64 lzo_bitops_ctz64 ++#endif ++ ++#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || LZO_CC_LLVM) ++#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) ++#define lzo_bitops_clz32(v) ((unsigned) __builtin_clz(v)) ++#endif ++#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_clz64(v) ((unsigned) __builtin_clzll(v)) ++#endif ++#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) ++#define lzo_bitops_ctz32(v) ((unsigned) __builtin_ctz(v)) ++#endif ++#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_ctz64(v) ((unsigned) __builtin_ctzll(v)) ++#endif ++#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount32) ++#define lzo_bitops_popcount32(v) ((unsigned) __builtin_popcount(v)) ++#endif ++#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount64) && defined(LZO_UINT64_MAX) ++#define lzo_bitops_popcount64(v) ((unsigned) __builtin_popcountll(v)) ++#endif ++#endif ++ ++static __lzo_noinline lzo_uint ++do_compress ( const lzo_bytep in , lzo_uint in_len, ++ lzo_bytep out, lzo_uintp out_len, ++ lzo_uint ti, lzo_voidp wrkmem) ++{ ++ register const lzo_bytep ip; ++ lzo_bytep op; ++ const lzo_bytep const in_end = in + in_len; ++ const lzo_bytep const ip_end = in + in_len - 20; ++ const lzo_bytep ii; ++ lzo_dict_p const dict = (lzo_dict_p) wrkmem; ++ ++ op = out; ++ ip = in; ++ ii = ip - ti; ++ ++ ip += ti < 4 ? 4 - ti : 0; ++ for (;;) ++ { ++ const lzo_bytep m_pos; ++#if !(LZO_DETERMINISTIC) ++ LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); ++ lzo_uint m_len; ++ lzo_uint dindex; ++next: ++ if __lzo_unlikely(ip >= ip_end) ++ break; ++ DINDEX1(dindex,ip); ++ GINDEX(m_pos,m_off,dict,dindex,in); ++ if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) ++ goto literal; ++#if 1 ++ if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) ++ goto try_match; ++ DINDEX2(dindex,ip); ++#endif ++ GINDEX(m_pos,m_off,dict,dindex,in); ++ if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) ++ goto literal; ++ if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) ++ goto try_match; ++ goto literal; ++ ++try_match: ++#if defined(UA_GET32) ++ if (UA_GET32(m_pos) != UA_GET32(ip)) ++#else ++ if (m_pos[0] != ip[0] || m_pos[1] != ip[1] || m_pos[2] != ip[2] || m_pos[3] != ip[3]) ++#endif ++ { ++literal: ++ UPDATE_I(dict,0,dindex,ip,in); ++ ip += 1 + ((ip - ii) >> 5); ++ continue; ++ } ++ UPDATE_I(dict,0,dindex,ip,in); ++#else ++ lzo_uint m_off; ++ lzo_uint m_len; ++ { ++ lzo_uint32 dv; ++ lzo_uint dindex; ++literal: ++ ip += 1 + ((ip - ii) >> 5); ++next: ++ if __lzo_unlikely(ip >= ip_end) ++ break; ++ dv = UA_GET32(ip); ++ dindex = DINDEX(dv,ip); ++ GINDEX(m_off,m_pos,in+dict,dindex,in); ++ UPDATE_I(dict,0,dindex,ip,in); ++ if __lzo_unlikely(dv != UA_GET32(m_pos)) ++ goto literal; ++ } ++#endif ++ ++ { ++ register lzo_uint t = pd(ip,ii); ++ if (t != 0) ++ { ++ if (t <= 3) ++ { ++ op[-2] |= LZO_BYTE(t); ++#if defined(UA_COPY32) ++ UA_COPY32(op, ii); ++ op += t; ++#else ++ { do *op++ = *ii++; while (--t > 0); } ++#endif ++ } ++#if defined(UA_COPY32) || defined(UA_COPY64) ++ else if (t <= 16) ++ { ++ *op++ = LZO_BYTE(t - 3); ++#if defined(UA_COPY64) ++ UA_COPY64(op, ii); ++ UA_COPY64(op+8, ii+8); ++#else ++ UA_COPY32(op, ii); ++ UA_COPY32(op+4, ii+4); ++ UA_COPY32(op+8, ii+8); ++ UA_COPY32(op+12, ii+12); ++#endif ++ op += t; ++ } ++#endif ++ else ++ { ++ if (t <= 18) ++ *op++ = LZO_BYTE(t - 3); ++ else ++ { ++ register lzo_uint tt = t - 18; ++ *op++ = 0; ++ while __lzo_unlikely(tt > 255) ++ { ++ tt -= 255; ++#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) ++ * (volatile unsigned char *) op++ = 0; ++#else ++ *op++ = 0; ++#endif ++ } ++ assert(tt > 0); ++ *op++ = LZO_BYTE(tt); ++ } ++#if defined(UA_COPY32) || defined(UA_COPY64) ++ do { ++#if defined(UA_COPY64) ++ UA_COPY64(op, ii); ++ UA_COPY64(op+8, ii+8); ++#else ++ UA_COPY32(op, ii); ++ UA_COPY32(op+4, ii+4); ++ UA_COPY32(op+8, ii+8); ++ UA_COPY32(op+12, ii+12); ++#endif ++ op += 16; ii += 16; t -= 16; ++ } while (t >= 16); if (t > 0) ++#endif ++ { do *op++ = *ii++; while (--t > 0); } ++ } ++ } ++ } ++ m_len = 4; ++ { ++#if defined(UA_GET64) ++ lzo_uint64 v; ++ v = UA_GET64(ip + m_len) ^ UA_GET64(m_pos + m_len); ++ if __lzo_unlikely(v == 0) { ++ do { ++ m_len += 8; ++ v = UA_GET64(ip + m_len) ^ UA_GET64(m_pos + m_len); ++ if __lzo_unlikely(ip + m_len >= ip_end) ++ goto m_len_done; ++ } while (v == 0); ++ } ++#if (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_ctz64) ++ m_len += lzo_bitops_ctz64(v) / CHAR_BIT; ++#elif (LZO_ABI_LITTLE_ENDIAN) ++ if ((v & UCHAR_MAX) == 0) do { ++ v >>= CHAR_BIT; ++ m_len += 1; ++ } while ((v & UCHAR_MAX) == 0); ++#else ++ if (ip[m_len] == m_pos[m_len]) do { ++ m_len += 1; ++ } while (ip[m_len] == m_pos[m_len]); ++#endif ++#elif defined(UA_GET32) ++ lzo_uint32 v; ++ v = UA_GET32(ip + m_len) ^ UA_GET32(m_pos + m_len); ++ if __lzo_unlikely(v == 0) { ++ do { ++ m_len += 4; ++ v = UA_GET32(ip + m_len) ^ UA_GET32(m_pos + m_len); ++ if __lzo_unlikely(ip + m_len >= ip_end) ++ goto m_len_done; ++ } while (v == 0); ++ } ++#if (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_ctz32) ++ m_len += lzo_bitops_ctz32(v) / CHAR_BIT; ++#elif (LZO_ABI_LITTLE_ENDIAN) ++ if ((v & UCHAR_MAX) == 0) do { ++ v >>= CHAR_BIT; ++ m_len += 1; ++ } while ((v & UCHAR_MAX) == 0); ++#else ++ if (ip[m_len] == m_pos[m_len]) do { ++ m_len += 1; ++ } while (ip[m_len] == m_pos[m_len]); ++#endif ++#else ++ if __lzo_unlikely(ip[m_len] == m_pos[m_len]) { ++ do { ++ m_len += 1; ++ if __lzo_unlikely(ip + m_len >= ip_end) ++ goto m_len_done; ++ } while (ip[m_len] == m_pos[m_len]); ++ } ++#endif ++ } ++m_len_done: ++ m_off = pd(ip,m_pos); ++ ip += m_len; ++ ii = ip; ++ if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) ++ { ++ m_off -= 1; ++#if defined(LZO1X) ++ *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); ++ *op++ = LZO_BYTE(m_off >> 3); ++#elif defined(LZO1Y) ++ *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); ++ *op++ = LZO_BYTE(m_off >> 2); ++#endif ++ } ++ else if (m_off <= M3_MAX_OFFSET) ++ { ++ m_off -= 1; ++ if (m_len <= M3_MAX_LEN) ++ *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); ++ else ++ { ++ m_len -= M3_MAX_LEN; ++ *op++ = M3_MARKER | 0; ++ while __lzo_unlikely(m_len > 255) ++ { ++ m_len -= 255; ++#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) ++ * (volatile unsigned char *) op++ = 0; ++#else ++ *op++ = 0; ++#endif ++ } ++ *op++ = LZO_BYTE(m_len); ++ } ++ *op++ = LZO_BYTE(m_off << 2); ++ *op++ = LZO_BYTE(m_off >> 6); ++ } ++ else ++ { ++ m_off -= 0x4000; ++ if (m_len <= M4_MAX_LEN) ++ *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2)); ++ else ++ { ++ m_len -= M4_MAX_LEN; ++ *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8)); ++ while __lzo_unlikely(m_len > 255) ++ { ++ m_len -= 255; ++#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) ++ * (volatile unsigned char *) op++ = 0; ++#else ++ *op++ = 0; ++#endif ++ } ++ *op++ = LZO_BYTE(m_len); ++ } ++ *op++ = LZO_BYTE(m_off << 2); ++ *op++ = LZO_BYTE(m_off >> 6); ++ } ++ goto next; ++ } ++ ++ *out_len = pd(op, out); ++ return pd(in_end,ii); ++} ++ ++LZO_PUBLIC(int) ++DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, ++ lzo_bytep out, lzo_uintp out_len, ++ lzo_voidp wrkmem ) ++{ ++ const lzo_bytep ip = in; ++ lzo_bytep op = out; ++ lzo_uint l = in_len; ++ lzo_uint t = 0; ++ ++ while (l > 20) ++ { ++ lzo_uint ll = l; ++ lzo_uintptr_t ll_end; ++#if 0 || (LZO_DETERMINISTIC) ++ ll = LZO_MIN(ll, 49152); ++#endif ++ ll_end = (lzo_uintptr_t)ip + ll; ++ if ((ll_end + ((t + ll) >> 5)) <= ll_end || (const lzo_bytep)(ll_end + ((t + ll) >> 5)) <= ip + ll) ++ break; ++#if (LZO_DETERMINISTIC) ++ lzo_memset(wrkmem, 0, ((lzo_uint)1 << D_BITS) * sizeof(lzo_dict_t)); ++#endif ++ t = do_compress(ip,ll,op,out_len,t,wrkmem); ++ ip += ll; ++ op += *out_len; ++ l -= ll; ++ } ++ t += l; ++ ++ if (t > 0) ++ { ++ const lzo_bytep ii = in + in_len - t; ++ ++ if (op == out && t <= 238) ++ *op++ = LZO_BYTE(17 + t); ++ else if (t <= 3) ++ op[-2] |= LZO_BYTE(t); ++ else if (t <= 18) ++ *op++ = LZO_BYTE(t - 3); ++ else ++ { ++ lzo_uint tt = t - 18; ++ ++ *op++ = 0; ++ while (tt > 255) ++ { ++ tt -= 255; ++#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) ++ ++ * (volatile unsigned char *) op++ = 0; ++#else ++ *op++ = 0; ++#endif ++ } ++ assert(tt > 0); ++ *op++ = LZO_BYTE(tt); ++ } ++ do *op++ = *ii++; while (--t > 0); ++ } ++ ++ *op++ = M4_MARKER | 1; ++ *op++ = 0; ++ *op++ = 0; ++ ++ *out_len = pd(op, out); ++ return LZO_E_OK; ++} ++ ++#endif ++ ++#undef do_compress ++#undef DO_COMPRESS ++#undef LZO_HASH ++ ++#undef LZO_TEST_OVERRUN ++#undef DO_DECOMPRESS ++#define DO_DECOMPRESS lzo1x_decompress ++ ++#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) ++ ++#if defined(LZO_TEST_OVERRUN) ++# if !defined(LZO_TEST_OVERRUN_INPUT) ++# define LZO_TEST_OVERRUN_INPUT 2 ++# endif ++# if !defined(LZO_TEST_OVERRUN_OUTPUT) ++# define LZO_TEST_OVERRUN_OUTPUT 2 ++# endif ++# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++# define LZO_TEST_OVERRUN_LOOKBEHIND 1 ++# endif ++#endif ++ ++#undef TEST_IP ++#undef TEST_OP ++#undef TEST_LB ++#undef TEST_LBO ++#undef NEED_IP ++#undef NEED_OP ++#undef HAVE_TEST_IP ++#undef HAVE_TEST_OP ++#undef HAVE_NEED_IP ++#undef HAVE_NEED_OP ++#undef HAVE_ANY_IP ++#undef HAVE_ANY_OP ++ ++#if defined(LZO_TEST_OVERRUN_INPUT) ++# if (LZO_TEST_OVERRUN_INPUT >= 1) ++# define TEST_IP (ip < ip_end) ++# endif ++# if (LZO_TEST_OVERRUN_INPUT >= 2) ++# define NEED_IP(x) \ ++ if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun ++# endif ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_OUTPUT) ++# if (LZO_TEST_OVERRUN_OUTPUT >= 1) ++# define TEST_OP (op <= op_end) ++# endif ++# if (LZO_TEST_OVERRUN_OUTPUT >= 2) ++# undef TEST_OP ++# define NEED_OP(x) \ ++ if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun ++# endif ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun ++# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun ++#else ++# define TEST_LB(m_pos) ((void) 0) ++# define TEST_LBO(m_pos,o) ((void) 0) ++#endif ++ ++#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) ++# define TEST_IP (ip < ip_end) ++#endif ++ ++#if defined(TEST_IP) ++# define HAVE_TEST_IP 1 ++#else ++# define TEST_IP 1 ++#endif ++#if defined(TEST_OP) ++# define HAVE_TEST_OP 1 ++#else ++# define TEST_OP 1 ++#endif ++ ++#if defined(NEED_IP) ++# define HAVE_NEED_IP 1 ++#else ++# define NEED_IP(x) ((void) 0) ++#endif ++#if defined(NEED_OP) ++# define HAVE_NEED_OP 1 ++#else ++# define NEED_OP(x) ((void) 0) ++#endif ++ ++#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) ++# define HAVE_ANY_IP 1 ++#endif ++#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) ++# define HAVE_ANY_OP 1 ++#endif ++ ++#if defined(DO_DECOMPRESS) ++LZO_PUBLIC(int) ++DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, ++ lzo_bytep out, lzo_uintp out_len, ++ lzo_voidp wrkmem ) ++#endif ++{ ++ register lzo_bytep op; ++ register const lzo_bytep ip; ++ register lzo_uint t; ++#if defined(COPY_DICT) ++ lzo_uint m_off; ++ const lzo_bytep dict_end; ++#else ++ register const lzo_bytep m_pos; ++#endif ++ ++ const lzo_bytep const ip_end = in + in_len; ++#if defined(HAVE_ANY_OP) ++ lzo_bytep const op_end = out + *out_len; ++#endif ++#if defined(LZO1Z) ++ lzo_uint last_m_off = 0; ++#endif ++ ++ LZO_UNUSED(wrkmem); ++ ++#if defined(COPY_DICT) ++ if (dict) ++ { ++ if (dict_len > M4_MAX_OFFSET) ++ { ++ dict += dict_len - M4_MAX_OFFSET; ++ dict_len = M4_MAX_OFFSET; ++ } ++ dict_end = dict + dict_len; ++ } ++ else ++ { ++ dict_len = 0; ++ dict_end = NULL; ++ } ++#endif ++ ++ *out_len = 0; ++ ++ op = out; ++ ip = in; ++ ++ if (*ip > 17) ++ { ++ t = *ip++ - 17; ++ if (t < 4) ++ goto match_next; ++ assert(t > 0); NEED_OP(t); NEED_IP(t+1); ++ do *op++ = *ip++; while (--t > 0); ++ goto first_literal_run; ++ } ++ ++ while (TEST_IP && TEST_OP) ++ { ++ t = *ip++; ++ if (t >= 16) ++ goto match; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 15 + *ip++; ++ } ++ assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); ++#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) ++ t += 3; ++ if (t >= 8) do ++ { ++ UA_COPY64(op,ip); ++ op += 8; ip += 8; t -= 8; ++ } while (t >= 8); ++ if (t >= 4) ++ { ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; t -= 4; ++ } ++ if (t > 0) ++ { ++ *op++ = *ip++; ++ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } ++ } ++#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) ++#if !defined(LZO_UNALIGNED_OK_4) ++ if (PTR_ALIGNED2_4(op,ip)) ++ { ++#endif ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; ++ if (--t > 0) ++ { ++ if (t >= 4) ++ { ++ do { ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; t -= 4; ++ } while (t >= 4); ++ if (t > 0) do *op++ = *ip++; while (--t > 0); ++ } ++ else ++ do *op++ = *ip++; while (--t > 0); ++ } ++#if !defined(LZO_UNALIGNED_OK_4) ++ } ++ else ++#endif ++#endif ++#if !defined(LZO_UNALIGNED_OK_4) && !defined(LZO_UNALIGNED_OK_8) ++ { ++ *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; ++ do *op++ = *ip++; while (--t > 0); ++ } ++#endif ++ ++first_literal_run: ++ ++ t = *ip++; ++ if (t >= 16) ++ goto match; ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++#else ++ m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); ++#endif ++ NEED_OP(3); ++ t = 3; COPY_DICT(t,m_off) ++#else ++#if defined(LZO1Z) ++ t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); ++ m_pos = op - t; ++ last_m_off = t; ++#else ++ m_pos = op - (1 + M2_MAX_OFFSET); ++ m_pos -= t >> 2; ++ m_pos -= *ip++ << 2; ++#endif ++ TEST_LB(m_pos); NEED_OP(3); ++ *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; ++#endif ++ goto match_done; ++ ++ do { ++match: ++ if (t >= 64) ++ { ++#if defined(COPY_DICT) ++#if defined(LZO1X) ++ m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); ++ t = (t >> 5) - 1; ++#elif defined(LZO1Y) ++ m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); ++ t = (t >> 4) - 3; ++#elif defined(LZO1Z) ++ m_off = t & 0x1f; ++ if (m_off >= 0x1c) ++ m_off = last_m_off; ++ else ++ { ++ m_off = 1 + (m_off << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++ } ++ t = (t >> 5) - 1; ++#endif ++#else ++#if defined(LZO1X) ++ m_pos = op - 1; ++ m_pos -= (t >> 2) & 7; ++ m_pos -= *ip++ << 3; ++ t = (t >> 5) - 1; ++#elif defined(LZO1Y) ++ m_pos = op - 1; ++ m_pos -= (t >> 2) & 3; ++ m_pos -= *ip++ << 2; ++ t = (t >> 4) - 3; ++#elif defined(LZO1Z) ++ { ++ lzo_uint off = t & 0x1f; ++ m_pos = op; ++ if (off >= 0x1c) ++ { ++ assert(last_m_off > 0); ++ m_pos -= last_m_off; ++ } ++ else ++ { ++ off = 1 + (off << 6) + (*ip++ >> 2); ++ m_pos -= off; ++ last_m_off = off; ++ } ++ } ++ t = (t >> 5) - 1; ++#endif ++ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); ++ goto copy_match; ++#endif ++ } ++ else if (t >= 32) ++ { ++ t &= 31; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 31 + *ip++; ++ } ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); ++ last_m_off = m_off; ++#else ++ m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); ++#endif ++#else ++#if defined(LZO1Z) ++ { ++ lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); ++ m_pos = op - off; ++ last_m_off = off; ++ } ++#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) ++ m_pos = op - 1; ++ m_pos -= UA_GET16(ip) >> 2; ++#else ++ m_pos = op - 1; ++ m_pos -= (ip[0] >> 2) + (ip[1] << 6); ++#endif ++#endif ++ ip += 2; ++ } ++ else if (t >= 16) ++ { ++#if defined(COPY_DICT) ++ m_off = (t & 8) << 11; ++#else ++ m_pos = op; ++ m_pos -= (t & 8) << 11; ++#endif ++ t &= 7; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 7 + *ip++; ++ } ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off += (ip[0] << 6) + (ip[1] >> 2); ++#else ++ m_off += (ip[0] >> 2) + (ip[1] << 6); ++#endif ++ ip += 2; ++ if (m_off == 0) ++ goto eof_found; ++ m_off += 0x4000; ++#if defined(LZO1Z) ++ last_m_off = m_off; ++#endif ++#else ++#if defined(LZO1Z) ++ m_pos -= (ip[0] << 6) + (ip[1] >> 2); ++#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) ++ m_pos -= UA_GET16(ip) >> 2; ++#else ++ m_pos -= (ip[0] >> 2) + (ip[1] << 6); ++#endif ++ ip += 2; ++ if (m_pos == op) ++ goto eof_found; ++ m_pos -= 0x4000; ++#if defined(LZO1Z) ++ last_m_off = pd((const lzo_bytep)op, m_pos); ++#endif ++#endif ++ } ++ else ++ { ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = 1 + (t << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++#else ++ m_off = 1 + (t >> 2) + (*ip++ << 2); ++#endif ++ NEED_OP(2); ++ t = 2; COPY_DICT(t,m_off) ++#else ++#if defined(LZO1Z) ++ t = 1 + (t << 6) + (*ip++ >> 2); ++ m_pos = op - t; ++ last_m_off = t; ++#else ++ m_pos = op - 1; ++ m_pos -= t >> 2; ++ m_pos -= *ip++ << 2; ++#endif ++ TEST_LB(m_pos); NEED_OP(2); ++ *op++ = *m_pos++; *op++ = *m_pos; ++#endif ++ goto match_done; ++ } ++ ++#if defined(COPY_DICT) ++ ++ NEED_OP(t+3-1); ++ t += 3-1; COPY_DICT(t,m_off) ++ ++#else ++ ++ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); ++#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) ++ if (op - m_pos >= 8) ++ { ++ t += (3 - 1); ++ if (t >= 8) do ++ { ++ UA_COPY64(op,m_pos); ++ op += 8; m_pos += 8; t -= 8; ++ } while (t >= 8); ++ if (t >= 4) ++ { ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4; ++ } ++ if (t > 0) ++ { ++ *op++ = m_pos[0]; ++ if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } ++ } ++ } ++ else ++#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) ++#if !defined(LZO_UNALIGNED_OK_4) ++ if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) ++ { ++ assert((op - m_pos) >= 4); ++#else ++ if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) ++ { ++#endif ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4 - (3 - 1); ++ do { ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4; ++ } while (t >= 4); ++ if (t > 0) do *op++ = *m_pos++; while (--t > 0); ++ } ++ else ++#endif ++ { ++copy_match: ++ *op++ = *m_pos++; *op++ = *m_pos++; ++ do *op++ = *m_pos++; while (--t > 0); ++ } ++ ++#endif ++ ++match_done: ++#if defined(LZO1Z) ++ t = ip[-1] & 3; ++#else ++ t = ip[-2] & 3; ++#endif ++ if (t == 0) ++ break; ++ ++match_next: ++ assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); ++#if 0 ++ do *op++ = *ip++; while (--t > 0); ++#else ++ *op++ = *ip++; ++ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } ++#endif ++ t = *ip++; ++ } while (TEST_IP && TEST_OP); ++ } ++ ++#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) ++ *out_len = pd(op, out); ++ return LZO_E_EOF_NOT_FOUND; ++#endif ++ ++eof_found: ++ assert(t == 1); ++ *out_len = pd(op, out); ++ return (ip == ip_end ? LZO_E_OK : ++ (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); ++ ++#if defined(HAVE_NEED_IP) ++input_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_INPUT_OVERRUN; ++#endif ++ ++#if defined(HAVE_NEED_OP) ++output_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_OUTPUT_OVERRUN; ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++lookbehind_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_LOOKBEHIND_OVERRUN; ++#endif ++} ++ ++#endif ++ ++#define LZO_TEST_OVERRUN 1 ++#undef DO_DECOMPRESS ++#define DO_DECOMPRESS lzo1x_decompress_safe ++ ++#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) ++ ++#if defined(LZO_TEST_OVERRUN) ++# if !defined(LZO_TEST_OVERRUN_INPUT) ++# define LZO_TEST_OVERRUN_INPUT 2 ++# endif ++# if !defined(LZO_TEST_OVERRUN_OUTPUT) ++# define LZO_TEST_OVERRUN_OUTPUT 2 ++# endif ++# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++# define LZO_TEST_OVERRUN_LOOKBEHIND 1 ++# endif ++#endif ++ ++#undef TEST_IP ++#undef TEST_OP ++#undef TEST_LB ++#undef TEST_LBO ++#undef NEED_IP ++#undef NEED_OP ++#undef HAVE_TEST_IP ++#undef HAVE_TEST_OP ++#undef HAVE_NEED_IP ++#undef HAVE_NEED_OP ++#undef HAVE_ANY_IP ++#undef HAVE_ANY_OP ++ ++#if defined(LZO_TEST_OVERRUN_INPUT) ++# if (LZO_TEST_OVERRUN_INPUT >= 1) ++# define TEST_IP (ip < ip_end) ++# endif ++# if (LZO_TEST_OVERRUN_INPUT >= 2) ++# define NEED_IP(x) \ ++ if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun ++# endif ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_OUTPUT) ++# if (LZO_TEST_OVERRUN_OUTPUT >= 1) ++# define TEST_OP (op <= op_end) ++# endif ++# if (LZO_TEST_OVERRUN_OUTPUT >= 2) ++# undef TEST_OP ++# define NEED_OP(x) \ ++ if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun ++# endif ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun ++# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun ++#else ++# define TEST_LB(m_pos) ((void) 0) ++# define TEST_LBO(m_pos,o) ((void) 0) ++#endif ++ ++#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) ++# define TEST_IP (ip < ip_end) ++#endif ++ ++#if defined(TEST_IP) ++# define HAVE_TEST_IP 1 ++#else ++# define TEST_IP 1 ++#endif ++#if defined(TEST_OP) ++# define HAVE_TEST_OP 1 ++#else ++# define TEST_OP 1 ++#endif ++ ++#if defined(NEED_IP) ++# define HAVE_NEED_IP 1 ++#else ++# define NEED_IP(x) ((void) 0) ++#endif ++#if defined(NEED_OP) ++# define HAVE_NEED_OP 1 ++#else ++# define NEED_OP(x) ((void) 0) ++#endif ++ ++#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) ++# define HAVE_ANY_IP 1 ++#endif ++#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) ++# define HAVE_ANY_OP 1 ++#endif ++ ++#if defined(DO_DECOMPRESS) ++LZO_PUBLIC(int) ++DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, ++ lzo_bytep out, lzo_uintp out_len, ++ lzo_voidp wrkmem ) ++#endif ++{ ++ register lzo_bytep op; ++ register const lzo_bytep ip; ++ register lzo_uint t; ++#if defined(COPY_DICT) ++ lzo_uint m_off; ++ const lzo_bytep dict_end; ++#else ++ register const lzo_bytep m_pos; ++#endif ++ ++ const lzo_bytep const ip_end = in + in_len; ++#if defined(HAVE_ANY_OP) ++ lzo_bytep const op_end = out + *out_len; ++#endif ++#if defined(LZO1Z) ++ lzo_uint last_m_off = 0; ++#endif ++ ++ LZO_UNUSED(wrkmem); ++ ++#if defined(COPY_DICT) ++ if (dict) ++ { ++ if (dict_len > M4_MAX_OFFSET) ++ { ++ dict += dict_len - M4_MAX_OFFSET; ++ dict_len = M4_MAX_OFFSET; ++ } ++ dict_end = dict + dict_len; ++ } ++ else ++ { ++ dict_len = 0; ++ dict_end = NULL; ++ } ++#endif ++ ++ *out_len = 0; ++ ++ op = out; ++ ip = in; ++ ++ if (*ip > 17) ++ { ++ t = *ip++ - 17; ++ if (t < 4) ++ goto match_next; ++ assert(t > 0); NEED_OP(t); NEED_IP(t+1); ++ do *op++ = *ip++; while (--t > 0); ++ goto first_literal_run; ++ } ++ ++ while (TEST_IP && TEST_OP) ++ { ++ t = *ip++; ++ if (t >= 16) ++ goto match; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 15 + *ip++; ++ } ++ assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); ++#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) ++ t += 3; ++ if (t >= 8) do ++ { ++ UA_COPY64(op,ip); ++ op += 8; ip += 8; t -= 8; ++ } while (t >= 8); ++ if (t >= 4) ++ { ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; t -= 4; ++ } ++ if (t > 0) ++ { ++ *op++ = *ip++; ++ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } ++ } ++#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) ++#if !defined(LZO_UNALIGNED_OK_4) ++ if (PTR_ALIGNED2_4(op,ip)) ++ { ++#endif ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; ++ if (--t > 0) ++ { ++ if (t >= 4) ++ { ++ do { ++ UA_COPY32(op,ip); ++ op += 4; ip += 4; t -= 4; ++ } while (t >= 4); ++ if (t > 0) do *op++ = *ip++; while (--t > 0); ++ } ++ else ++ do *op++ = *ip++; while (--t > 0); ++ } ++#if !defined(LZO_UNALIGNED_OK_4) ++ } ++ else ++#endif ++#endif ++#if !defined(LZO_UNALIGNED_OK_4) && !defined(LZO_UNALIGNED_OK_8) ++ { ++ *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; ++ do *op++ = *ip++; while (--t > 0); ++ } ++#endif ++ ++first_literal_run: ++ ++ t = *ip++; ++ if (t >= 16) ++ goto match; ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++#else ++ m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); ++#endif ++ NEED_OP(3); ++ t = 3; COPY_DICT(t,m_off) ++#else ++#if defined(LZO1Z) ++ t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); ++ m_pos = op - t; ++ last_m_off = t; ++#else ++ m_pos = op - (1 + M2_MAX_OFFSET); ++ m_pos -= t >> 2; ++ m_pos -= *ip++ << 2; ++#endif ++ TEST_LB(m_pos); NEED_OP(3); ++ *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; ++#endif ++ goto match_done; ++ ++ do { ++match: ++ if (t >= 64) ++ { ++#if defined(COPY_DICT) ++#if defined(LZO1X) ++ m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); ++ t = (t >> 5) - 1; ++#elif defined(LZO1Y) ++ m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); ++ t = (t >> 4) - 3; ++#elif defined(LZO1Z) ++ m_off = t & 0x1f; ++ if (m_off >= 0x1c) ++ m_off = last_m_off; ++ else ++ { ++ m_off = 1 + (m_off << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++ } ++ t = (t >> 5) - 1; ++#endif ++#else ++#if defined(LZO1X) ++ m_pos = op - 1; ++ m_pos -= (t >> 2) & 7; ++ m_pos -= *ip++ << 3; ++ t = (t >> 5) - 1; ++#elif defined(LZO1Y) ++ m_pos = op - 1; ++ m_pos -= (t >> 2) & 3; ++ m_pos -= *ip++ << 2; ++ t = (t >> 4) - 3; ++#elif defined(LZO1Z) ++ { ++ lzo_uint off = t & 0x1f; ++ m_pos = op; ++ if (off >= 0x1c) ++ { ++ assert(last_m_off > 0); ++ m_pos -= last_m_off; ++ } ++ else ++ { ++ off = 1 + (off << 6) + (*ip++ >> 2); ++ m_pos -= off; ++ last_m_off = off; ++ } ++ } ++ t = (t >> 5) - 1; ++#endif ++ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); ++ goto copy_match; ++#endif ++ } ++ else if (t >= 32) ++ { ++ t &= 31; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 31 + *ip++; ++ } ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); ++ last_m_off = m_off; ++#else ++ m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); ++#endif ++#else ++#if defined(LZO1Z) ++ { ++ lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); ++ m_pos = op - off; ++ last_m_off = off; ++ } ++#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) ++ m_pos = op - 1; ++ m_pos -= UA_GET16(ip) >> 2; ++#else ++ m_pos = op - 1; ++ m_pos -= (ip[0] >> 2) + (ip[1] << 6); ++#endif ++#endif ++ ip += 2; ++ } ++ else if (t >= 16) ++ { ++#if defined(COPY_DICT) ++ m_off = (t & 8) << 11; ++#else ++ m_pos = op; ++ m_pos -= (t & 8) << 11; ++#endif ++ t &= 7; ++ if (t == 0) ++ { ++ NEED_IP(1); ++ while (*ip == 0) ++ { ++ t += 255; ++ ip++; ++ NEED_IP(1); ++ } ++ t += 7 + *ip++; ++ } ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off += (ip[0] << 6) + (ip[1] >> 2); ++#else ++ m_off += (ip[0] >> 2) + (ip[1] << 6); ++#endif ++ ip += 2; ++ if (m_off == 0) ++ goto eof_found; ++ m_off += 0x4000; ++#if defined(LZO1Z) ++ last_m_off = m_off; ++#endif ++#else ++#if defined(LZO1Z) ++ m_pos -= (ip[0] << 6) + (ip[1] >> 2); ++#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) ++ m_pos -= UA_GET16(ip) >> 2; ++#else ++ m_pos -= (ip[0] >> 2) + (ip[1] << 6); ++#endif ++ ip += 2; ++ if (m_pos == op) ++ goto eof_found; ++ m_pos -= 0x4000; ++#if defined(LZO1Z) ++ last_m_off = pd((const lzo_bytep)op, m_pos); ++#endif ++#endif ++ } ++ else ++ { ++#if defined(COPY_DICT) ++#if defined(LZO1Z) ++ m_off = 1 + (t << 6) + (*ip++ >> 2); ++ last_m_off = m_off; ++#else ++ m_off = 1 + (t >> 2) + (*ip++ << 2); ++#endif ++ NEED_OP(2); ++ t = 2; COPY_DICT(t,m_off) ++#else ++#if defined(LZO1Z) ++ t = 1 + (t << 6) + (*ip++ >> 2); ++ m_pos = op - t; ++ last_m_off = t; ++#else ++ m_pos = op - 1; ++ m_pos -= t >> 2; ++ m_pos -= *ip++ << 2; ++#endif ++ TEST_LB(m_pos); NEED_OP(2); ++ *op++ = *m_pos++; *op++ = *m_pos; ++#endif ++ goto match_done; ++ } ++ ++#if defined(COPY_DICT) ++ ++ NEED_OP(t+3-1); ++ t += 3-1; COPY_DICT(t,m_off) ++ ++#else ++ ++ TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); ++#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) ++ if (op - m_pos >= 8) ++ { ++ t += (3 - 1); ++ if (t >= 8) do ++ { ++ UA_COPY64(op,m_pos); ++ op += 8; m_pos += 8; t -= 8; ++ } while (t >= 8); ++ if (t >= 4) ++ { ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4; ++ } ++ if (t > 0) ++ { ++ *op++ = m_pos[0]; ++ if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } ++ } ++ } ++ else ++#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) ++#if !defined(LZO_UNALIGNED_OK_4) ++ if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) ++ { ++ assert((op - m_pos) >= 4); ++#else ++ if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) ++ { ++#endif ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4 - (3 - 1); ++ do { ++ UA_COPY32(op,m_pos); ++ op += 4; m_pos += 4; t -= 4; ++ } while (t >= 4); ++ if (t > 0) do *op++ = *m_pos++; while (--t > 0); ++ } ++ else ++#endif ++ { ++copy_match: ++ *op++ = *m_pos++; *op++ = *m_pos++; ++ do *op++ = *m_pos++; while (--t > 0); ++ } ++ ++#endif ++ ++match_done: ++#if defined(LZO1Z) ++ t = ip[-1] & 3; ++#else ++ t = ip[-2] & 3; ++#endif ++ if (t == 0) ++ break; ++ ++match_next: ++ assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); ++#if 0 ++ do *op++ = *ip++; while (--t > 0); ++#else ++ *op++ = *ip++; ++ if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } ++#endif ++ t = *ip++; ++ } while (TEST_IP && TEST_OP); ++ } ++ ++#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) ++ *out_len = pd(op, out); ++ return LZO_E_EOF_NOT_FOUND; ++#endif ++ ++eof_found: ++ assert(t == 1); ++ *out_len = pd(op, out); ++ return (ip == ip_end ? LZO_E_OK : ++ (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); ++ ++#if defined(HAVE_NEED_IP) ++input_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_INPUT_OVERRUN; ++#endif ++ ++#if defined(HAVE_NEED_OP) ++output_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_OUTPUT_OVERRUN; ++#endif ++ ++#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) ++lookbehind_overrun: ++ *out_len = pd(op, out); ++ return LZO_E_LOOKBEHIND_OVERRUN; ++#endif ++} ++ ++#endif ++ ++/***** End of minilzo.c *****/ ++ +Index: b/grub-core/lib/minilzo/minilzo.h +=================================================================== +--- /dev/null ++++ b/grub-core/lib/minilzo/minilzo.h +@@ -0,0 +1,109 @@ ++/* minilzo.h -- mini subset of the LZO real-time data compression library ++ ++ This file is part of the LZO real-time data compression library. ++ ++ Copyright (C) 2011 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer ++ Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer ++ All Rights Reserved. ++ ++ The LZO library 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. ++ ++ The LZO library 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 the LZO library; see the file COPYING. ++ If not, write to the Free Software Foundation, Inc., ++ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ Markus F.X.J. Oberhumer ++ ++ http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++/* ++ * NOTE: ++ * the full LZO package can be found at ++ * http://www.oberhumer.com/opensource/lzo/ ++ */ ++ ++ ++#ifndef __MINILZO_H ++#define __MINILZO_H 1 ++ ++#define MINILZO_VERSION 0x2050 ++ ++#ifdef __LZOCONF_H ++# error "you cannot use both LZO and miniLZO" ++#endif ++ ++#undef LZO_HAVE_CONFIG_H ++#include "lzoconf.h" ++ ++#if !defined(LZO_VERSION) || (LZO_VERSION != MINILZO_VERSION) ++# error "version mismatch in header files" ++#endif ++ ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++ ++/*********************************************************************** ++// ++************************************************************************/ ++ ++/* Memory required for the wrkmem parameter. ++ * When the required size is 0, you can also pass a NULL pointer. ++ */ ++ ++#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS ++#define LZO1X_1_MEM_COMPRESS ((lzo_uint32) (16384L * lzo_sizeof_dict_t)) ++#define LZO1X_MEM_DECOMPRESS (0) ++ ++ ++/* compression */ ++LZO_EXTERN(int) ++lzo1x_1_compress ( const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem ); ++ ++/* decompression */ ++LZO_EXTERN(int) ++lzo1x_decompress ( const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem /* NOT USED */ ); ++ ++/* safe decompression with overrun testing */ ++LZO_EXTERN(int) ++lzo1x_decompress_safe ( const lzo_bytep src, lzo_uint src_len, ++ lzo_bytep dst, lzo_uintp dst_len, ++ lzo_voidp wrkmem /* NOT USED */ ); ++ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* already included */ ++ +Index: b/grub-core/lib/posix_wrap/limits.h +=================================================================== +--- /dev/null ++++ b/grub-core/lib/posix_wrap/limits.h +@@ -0,0 +1,31 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2010 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#ifndef GRUB_POSIX_LIMITS_H ++#define GRUB_POSIX_LIMITS_H ++ ++#include ++ ++#define UCHAR_MAX GRUB_UCHAR_MAX ++#define USHRT_MAX GRUB_USHRT_MAX ++#define UINT_MAX GRUB_UINT_MAX ++#define ULONG_MAX GRUB_ULONG_MAX ++ ++#define CHAR_BIT 8 ++ ++#endif +Index: b/grub-core/lib/posix_wrap/sys/types.h +=================================================================== +--- a/grub-core/lib/posix_wrap/sys/types.h ++++ b/grub-core/lib/posix_wrap/sys/types.h +@@ -24,9 +24,6 @@ + typedef grub_size_t size_t; + typedef enum { false = 0, true = 1 } bool; + +-#define ULONG_MAX GRUB_ULONG_MAX +-#define UCHAR_MAX 0xff +- + typedef grub_uint8_t uint8_t; + typedef grub_uint16_t uint16_t; + typedef grub_uint32_t uint32_t; +Index: b/include/grub/file.h +=================================================================== +--- a/include/grub/file.h ++++ b/include/grub/file.h +@@ -56,9 +56,10 @@ + { + GRUB_FILE_FILTER_GZIO, + GRUB_FILE_FILTER_XZIO, ++ GRUB_FILE_FILTER_LZOPIO, + GRUB_FILE_FILTER_MAX, + GRUB_FILE_FILTER_COMPRESSION_FIRST = GRUB_FILE_FILTER_GZIO, +- GRUB_FILE_FILTER_COMPRESSION_LAST = GRUB_FILE_FILTER_XZIO, ++ GRUB_FILE_FILTER_COMPRESSION_LAST = GRUB_FILE_FILTER_LZOPIO, + } grub_file_filter_id_t; + + typedef grub_file_t (*grub_file_filter_t) (grub_file_t in); +Index: b/include/grub/libgcc.h +=================================================================== +--- a/include/grub/libgcc.h ++++ b/include/grub/libgcc.h +@@ -39,6 +39,12 @@ + # ifdef HAVE___BSWAPDI2 + void EXPORT_FUNC (__bswapdi2) (void); + # endif ++# ifdef HAVE___CTZDI2 ++void EXPORT_FUNC (__ctzdi2) (void); ++# endif ++# ifdef HAVE___CTZSI2 ++void EXPORT_FUNC (__ctzsi2) (void); ++# endif + #endif + + #ifdef HAVE___TRAMPOLINE_SETUP +Index: b/include/grub/types.h +=================================================================== +--- a/include/grub/types.h ++++ b/include/grub/types.h +@@ -113,6 +113,10 @@ + # define PRIuGRUB_SIZE "u" + #endif + ++#define GRUB_UCHAR_MAX 0xFF ++#define GRUB_USHRT_MAX 65535 ++#define GRUB_UINT_MAX 4294967295U ++ + #if GRUB_CPU_SIZEOF_LONG == 8 + # define GRUB_ULONG_MAX 18446744073709551615UL + # define GRUB_LONG_MAX 9223372036854775807L +@@ -215,4 +219,31 @@ + # define grub_cpu_to_le32_compile_time(x) ((grub_uint32_t) (x)) + #endif /* ! WORDS_BIGENDIAN */ + ++static inline grub_uint16_t grub_get_unaligned16(void *ptr) ++{ ++ struct ++ { ++ grub_uint16_t d; ++ } __attribute__((packed)) *dd = ptr; ++ return dd->d; ++} ++ ++static inline grub_uint32_t grub_get_unaligned32(void *ptr) ++{ ++ struct ++ { ++ grub_uint32_t d; ++ } __attribute__((packed)) *dd = ptr; ++ return dd->d; ++} ++ ++static inline grub_uint64_t grub_get_unaligned64(void *ptr) ++{ ++ struct ++ { ++ grub_uint64_t d; ++ } __attribute__((packed)) *dd = ptr; ++ return dd->d; ++} ++ + #endif /* ! GRUB_TYPES_HEADER */ +Index: b/util/import_gcry.py +=================================================================== +--- a/util/import_gcry.py ++++ b/util/import_gcry.py +@@ -73,6 +73,8 @@ + cryptolist.write ("AES-192: gcry_rijndael\n"); + cryptolist.write ("AES-256: gcry_rijndael\n"); + ++cryptolist.write ("ADLER32: adler32\n"); ++ + for cipher_file in cipher_files: + infile = os.path.join (cipher_dir_in, cipher_file) + outfile = os.path.join (cipher_dir_out, cipher_file) --- grub2-1.99.orig/debian/patches/ubuntu_recovery_nosingle.patch +++ grub2-1.99/debian/patches/ubuntu_recovery_nosingle.patch @@ -0,0 +1,25 @@ +Description: Replace single by recovery to trigger friendly-recovery +Author: Stéphane Graber +Forwarded: no +Last-Update: 2011-09-13 + +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -243,8 +243,13 @@ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_EXTRA} ${GRUB_CMDLINE_LINUX_DEFAULT}" \ + quiet + if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then +- linux_entry "${OS}" "${version}" true \ +- "single nomodeset ${GRUB_CMDLINE_LINUX}" ++ if [ -x /lib/recovery-mode/recovery-menu ]; then ++ linux_entry "${OS}" "${version}" true \ ++ "recovery nomodeset ${GRUB_CMDLINE_LINUX}" ++ else ++ linux_entry "${OS}" "${version}" true \ ++ "single nomodeset ${GRUB_CMDLINE_LINUX}" ++ fi + fi + + list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '` --- grub2-1.99.orig/debian/patches/mkconfig_loopback.patch +++ grub2-1.99/debian/patches/mkconfig_loopback.patch @@ -0,0 +1,84 @@ +Description: Handle filesystems loop-mounted on file images + Improve prepare_grub_to_access_device to emit appropriate commands for such + filesystems, and ignore them in Linux grub.d scripts. + . + This is needed for Ubuntu's Wubi installation method. + . + This patch isn't inherently Debian/Ubuntu-specific. losetup and + /proc/mounts are Linux-specific, though, so we might need to refine this + before sending it upstream. The changes to the Linux grub.d scripts might + be better handled by integrating 10_lupin properly instead. + +Index: b/util/grub-mkconfig_lib.in +=================================================================== +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -105,6 +105,21 @@ + { + device="$1" + ++ loop_file= ++ case ${device} in ++ /dev/loop/*|/dev/loop[0-9]) ++ grub_loop_device="${device#/dev/}" ++ loop_file=`losetup "${device}" | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` ++ case $loop_file in ++ /dev/*) ;; ++ *) ++ loop_device="${device}" ++ device=`"${grub_probe}" --target=device "${loop_file}"` ++ ;; ++ esac ++ ;; ++ esac ++ + if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then + grub_warn \ + "$device is a crypto device, which GRUB cannot read directly. Some" \ +@@ -141,6 +156,14 @@ + if fs_uuid="`"${grub_probe}" --device "${device}" --target=fs_uuid 2> /dev/null`" ; then + echo "search --no-floppy --fs-uuid --set=root ${fs_uuid}" + fi ++ ++ if [ "x${loop_file}" != x ]; then ++ loop_mountpoint="$(awk '"'${loop_file}'" ~ "^"$2 && $2 != "/" { print $2 }' /proc/mounts | tail -n1)" ++ if [ "x${loop_mountpoint}" != x ]; then ++ echo "loopback ${grub_loop_device} ${loop_file#$loop_mountpoint}" ++ echo "set root=(${grub_loop_device})" ++ fi ++ fi + } + + grub_file_is_not_garbage () +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -40,6 +40,11 @@ + case ${GRUB_DEVICE} in + /dev/loop/*|/dev/loop[0-9]) + GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` ++ # We can't cope with devices loop-mounted from files here. ++ case ${GRUB_DEVICE} in ++ /dev/*) ;; ++ *) exit 0 ;; ++ esac + ;; + esac + +Index: b/util/grub.d/20_linux_xen.in +=================================================================== +--- a/util/grub.d/20_linux_xen.in ++++ b/util/grub.d/20_linux_xen.in +@@ -40,6 +40,11 @@ + case ${GRUB_DEVICE} in + /dev/loop/*|/dev/loop[0-9]) + GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` ++ # We can't cope with devices loop-mounted from files here. ++ case ${GRUB_DEVICE} in ++ /dev/*) ;; ++ *) exit 0 ;; ++ esac + ;; + esac + --- grub2-1.99.orig/debian/patches/ubuntu_install_signed.patch +++ grub2-1.99/debian/patches/ubuntu_install_signed.patch @@ -0,0 +1,146 @@ +Description: Install signed images if UEFI Secure Boot is enabled +Author: Colin Watson +Forwarded: no +Last-Update: 2012-12-05 + +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -60,6 +60,12 @@ + + removable=no + efi_quiet= ++sb_var=/sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data ++if [ -e "$sb_var" ] && [ "$(printf %x \'"$(cat "$sb_var")")" = 1 ]; then ++ uefi_secure_boot=yes ++else ++ uefi_secure_boot=no ++fi + + # Get GRUB_DISTRIBUTOR. + if test -f "${sysconfdir}/default/grub" ; then +@@ -125,6 +131,12 @@ + cat <&2 + usage +@@ -352,39 +369,32 @@ + # not collide with other vendors. To minimise collisions, we use the + # name of our distributor if possible. + efi_distributor="$bootloader_id" ++ # It is convenient for each architecture to have a different ++ # efi_file, so that different versions can be installed in parallel. ++ case "$target_cpu" in ++ i386) ++ efi_suffix=ia32 ;; ++ x86_64) ++ efi_suffix=x64 ;; ++ # GRUB does not yet support these architectures, but they're defined ++ # by the specification so we include them here to ease future ++ # expansion. ++ ia64) ++ efi_suffix=ia64 ;; ++ *) ++ efi_suffix= ;; ++ esac + if test $removable = yes; then + # The specification makes stricter requirements of removable + # devices, in order that only one image can be automatically loaded + # from them. The image must always reside under /EFI/BOOT, and it + # must have a specific file name depending on the architecture. + efi_distributor=BOOT +- case "$target_cpu" in +- i386) +- efi_file=BOOTIA32.EFI ;; +- x86_64) +- efi_file=BOOTX64.EFI ;; +- # GRUB does not yet support these architectures, but they're defined +- # by the specification so we include them here to ease future +- # expansion. +- ia64) +- efi_file=BOOTIA64.EFI ;; +- esac ++ efi_file="BOOT$(printf %s "$efi_suffix" | tr a-z A-Z).EFI" + else + # It is convenient for each architecture to have a different + # efi_file, so that different versions can be installed in parallel. +- case "$target_cpu" in +- i386) +- efi_file=grubia32.efi ;; +- x86_64) +- efi_file=grubx64.efi ;; +- # GRUB does not yet support these architectures, but they're defined +- # by the specification so we include them here to ease future +- # expansion. +- ia64) +- efi_file=grubia64.efi ;; +- *) +- efi_file=grub.efi ;; +- esac ++ efi_file="grub$efi_suffix.efi" + # TODO: We should also use efibootmgr, if available, to add a Boot + # entry for ourselves. + fi +@@ -508,7 +518,7 @@ + # Strip partition number + grub_partition="`echo "${grub_drive}" | sed -e 's/^[^,]*[,)]//; s/)$//'`" + grub_drive="`echo "${grub_drive}" | sed -e s/,[a-z0-9,]*//g`" +- if [ "$disk_module" = ata ] || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$platform" != xefi ] && [ "x$platform" != xpc ] && [ x"${target_cpu}-${platform}" != x"sparc64-ieee1275" ]) ; then ++ if [ "$disk_module" = ata ] || [ "x${grub_drive}" != "x${install_drive}" ] || ([ "x$platform" != xefi ] && [ "x$platform" != xpc ] && [ x"${target_cpu}-${platform}" != x"sparc64-ieee1275" ]) || ([ "x$platform" = xefi ] && [ "$uefi_secure_boot" = yes ]); then + # generic method (used on coreboot and ata mod) + uuid="`"$grub_probe" --device-map="${device_map}" --target=fs_uuid --device "${grub_device}"`" + if [ "x${uuid}" = "x" ] ; then +@@ -606,10 +616,28 @@ + } + fi + elif [ x"$platform" = xefi ]; then +- cp "${grubdir}/core.${imgext}" "${efidir}/${efi_file}" +- # For old macs. Suggested by Peter Jones. +- if [ x$target_cpu = xi386 ]; then +- cp "${grubdir}/core.${imgext}" "${efidir}/boot.efi" ++ efi_signed="${pkglibdir}-signed/grub$efi_suffix.efi.signed" ++ if [ "$uefi_secure_boot" = yes ] && [ -e "$efi_signed" ]; then ++ shim_signed=/usr/lib/shim/shim.efi.signed ++ if [ -e "$shim_signed" ]; then ++ if [ "$removable" != yes ]; then ++ efi_file="shim$efi_suffix.efi" ++ fi ++ cp "$shim_signed" "${efidir}/${efi_file}" ++ cp "$efi_signed" "${efidir}/grub$efi_suffix.efi" ++ else ++ cp "$efi_signed" "${efidir}/${efi_file}" ++ fi ++ if [ x"$config_opt_file" != x ]; then ++ cp "${config_opt_file}" "${efidir}/grub.cfg" ++ echo 'configfile $prefix/grub.cfg' >> "${efidir}/grub.cfg" ++ fi ++ else ++ cp "${grubdir}/core.${imgext}" "${efidir}/${efi_file}" ++ # For old macs. Suggested by Peter Jones. ++ if [ x$target_cpu = xi386 ]; then ++ cp "${grubdir}/core.${imgext}" "${efidir}/boot.efi" ++ fi + fi + + # Try to make this image bootable using the EFI Boot Manager, if available. --- grub2-1.99.orig/debian/patches/efiemu_fix.patch +++ grub2-1.99/debian/patches/efiemu_fix.patch @@ -0,0 +1,134 @@ +Description: Fix efiemu + Without this, lzo.patch causes efiemu not to be built. +Author: Vladimir Serbinenko +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3740 +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/4066 +Forwarded: not-needed +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3740 +Last-Update: 2012-03-19 + +Index: b/configure.ac +=================================================================== +--- a/configure.ac ++++ b/configure.ac +@@ -479,6 +479,42 @@ + esac + AC_MSG_RESULT([$TARGET_OBJ2ELF]) + ++ ++AC_ARG_ENABLE([efiemu], ++ [AS_HELP_STRING([--enable-efiemu], ++ [build and install the efiemu runtimes (default=guessed)])]) ++if test x"$enable_efiemu" = xno ; then ++ efiemu_excuse="explicitly disabled" ++fi ++if test x"$target_cpu" != xi386 ; then ++ efiemu_excuse="only available on i386" ++fi ++if test x"$platform" = xefi ; then ++ efiemu_excuse="not available on efi" ++fi ++if test x"$efiemu_excuse" = x ; then ++ AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ ++ SAVED_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], ++ [grub_cv_cc_efiemu=yes], ++ [grub_cv_cc_efiemu=no]) ++ CFLAGS="$SAVED_CFLAGS" ++ ]) ++ if test x$grub_cv_cc_efiemu = xno; then ++ efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" ++ fi ++fi ++if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then ++ AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) ++fi ++if test x"$efiemu_excuse" = x ; then ++enable_efiemu=yes ++else ++enable_efiemu=no ++fi ++AC_SUBST([enable_efiemu]) ++ + if test "x$target_m32" = x1; then + # Force 32-bit mode. + TARGET_CFLAGS="$TARGET_CFLAGS -m32" +@@ -638,39 +674,6 @@ + grub_I386_ASM_ADDR32 + fi + +-AC_ARG_ENABLE([efiemu], +- [AS_HELP_STRING([--enable-efiemu], +- [build and install the efiemu runtimes (default=guessed)])]) +-if test x"$enable_efiemu" = xno ; then +- efiemu_excuse="explicitly disabled" +-fi +-if test x"$target_cpu" != xi386 ; then +- efiemu_excuse="only available on i386" +-fi +-if test x"$platform" = xefi ; then +- efiemu_excuse="not available on efi" +-fi +-if test x"$efiemu_excuse" = x ; then +- AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [ +- CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib" +- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], +- [grub_cv_cc_efiemu=yes], +- [grub_cv_cc_efiemu=no]) +- ]) +- if test x$grub_cv_cc_efiemu = xno; then +- efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" +- fi +-fi +-if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then +- AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) +-fi +-if test x"$efiemu_excuse" = x ; then +-enable_efiemu=yes +-else +-enable_efiemu=no +-fi +-AC_SUBST([enable_efiemu]) +- + if test "$platform" != emu; then + AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [ + SAVED_CPPFLAGS="$CPPFLAGS" +Index: b/grub-core/efiemu/runtime/efiemu.c +=================================================================== +--- a/grub-core/efiemu/runtime/efiemu.c ++++ b/grub-core/efiemu/runtime/efiemu.c +@@ -21,6 +21,12 @@ + As it emulates only runtime serviceit isn't able + to chainload EFI bootloader on non-EFI system (TODO) */ + ++#ifdef __i386__ ++#include ++#else ++#include ++#endif ++ + #include + #include + #include +@@ -369,16 +375,16 @@ + switch (cur_relloc->size) + { + case 8: +- *((grub_uint64_t *) UINT_TO_PTR (cur_relloc->addr)) += corr; ++ *((grub_uint64_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 4: +- *((grub_uint32_t *) UINT_TO_PTR (cur_relloc->addr)) += corr; ++ *((grub_uint32_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 2: +- *((grub_uint16_t *) UINT_TO_PTR (cur_relloc->addr)) += corr; ++ *((grub_uint16_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + case 1: +- *((grub_uint8_t *) UINT_TO_PTR (cur_relloc->addr)) += corr; ++ *((grub_uint8_t *) (grub_addr_t) cur_relloc->addr) += corr; + break; + } + } --- grub2-1.99.orig/debian/patches/qemu_img_exists.patch +++ grub2-1.99/debian/patches/qemu_img_exists.patch @@ -0,0 +1,18 @@ +Description: Skip partmap test if qemu-img doesn't exist (e.g. on the Hurd) +Author: Colin Watson +Forwarded: no +Last-Update: 2010-11-22 + +Index: b/tests/partmap_test.in +=================================================================== +--- a/tests/partmap_test.in ++++ b/tests/partmap_test.in +@@ -51,6 +51,8 @@ + echo + } + ++which qemu-img >/dev/null 2>&1 || exit 77 ++ + imgfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + outfile=`mktemp "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` || exit 1 + --- grub2-1.99.orig/debian/patches/mkconfig_gnumach.patch +++ grub2-1.99/debian/patches/mkconfig_gnumach.patch @@ -0,0 +1,53 @@ +Description: Add support for GRUB_CMDLINE_GNUMACH +Author: Samuel Thibault +Origin: upstream, http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3942 +Last-Update: 2012-03-05 + +Index: b/docs/grub.texi +=================================================================== +--- a/docs/grub.texi ++++ b/docs/grub.texi +@@ -1167,6 +1167,9 @@ + As @samp{GRUB_CMDLINE_LINUX} and @samp{GRUB_CMDLINE_LINUX_DEFAULT}, but for + NetBSD. + ++@item GRUB_CMDLINE_GNUMACH ++As @samp{GRUB_CMDLINE_LINUX}, but for GNU Mach. ++ + @item GRUB_CMDLINE_XEN + @itemx GRUB_CMDLINE_XEN_DEFAULT + The values of these options are appended to the values of +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -244,6 +244,7 @@ + GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT \ + GRUB_CMDLINE_NETBSD \ + GRUB_CMDLINE_NETBSD_DEFAULT \ ++ GRUB_CMDLINE_GNUMACH \ + GRUB_TERMINAL_INPUT \ + GRUB_TERMINAL_OUTPUT \ + GRUB_SERIAL_COMMAND \ +Index: b/util/grub.d/10_hurd.in +=================================================================== +--- a/util/grub.d/10_hurd.in ++++ b/util/grub.d/10_hurd.in +@@ -84,7 +84,7 @@ + message="$(gettext_printf "Loading GNU Mach ...")" + cat << EOF + echo '$message' +- multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} ++ multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} ${GRUB_CMDLINE_GNUMACH} + EOF + save_default_entry | sed -e "s/^/\t/" + prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/" +@@ -108,7 +108,7 @@ + message="$(gettext_printf "Loading GNU Mach ...")" + cat << EOF + echo '$message' +- multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} -s ++ multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} -s ${GRUB_CMDLINE_GNUMACH} + EOF + prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/" + message="$(gettext_printf "Loading the Hurd ...")" --- grub2-1.99.orig/debian/patches/mkconfig_skip_dmcrypt.patch +++ grub2-1.99/debian/patches/mkconfig_skip_dmcrypt.patch @@ -0,0 +1,30 @@ +Description: Warn and return without error if /boot is a dm-crypt device + With any luck the administrator knows what they're doing; in any event, we + probably can't improve matters by having update-grub exit non-zero. +Author: Marc Haber +Author: Colin Watson +Origin: other, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542165#25 +Bug-Debian: http://bugs.debian.org/542165 +Forwarded: no +Last-Update: 2010-06-05 + +Index: b/util/grub-mkconfig_lib.in +=================================================================== +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -105,6 +105,15 @@ + { + device="$1" + ++ if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then ++ grub_warn \ ++ "$device is a crypto device, which GRUB cannot read directly. Some" \ ++ "necessary modules may be missing from /boot/grub/grub.cfg. You may" \ ++ "need to list them in GRUB_PRELOAD_MODULES in /etc/default/grub. See" \ ++ "http://bugs.debian.org/542165 for details." ++ return 0 ++ fi ++ + # Abstraction modules aren't auto-loaded. + abstraction="`"${grub_probe}" --device "${device}" --target=abstraction`" + for module in ${abstraction} ; do --- grub2-1.99.orig/debian/patches/ubuntu_quiet_grub_loading.patch +++ grub2-1.99/debian/patches/ubuntu_quiet_grub_loading.patch @@ -0,0 +1,106 @@ +Description: Suppress "GRUB loading" message unless Shift is held down + Upstream doesn't want this, as it makes debugging harder. Ubuntu wants it + to provide a cleaner boot experience. +Author: Colin Watson +Forwarded: not-needed +Last-Update: 2011-01-05 + +Index: b/grub-core/boot/i386/pc/boot.S +=================================================================== +--- a/grub-core/boot/i386/pc/boot.S ++++ b/grub-core/boot/i386/pc/boot.S +@@ -19,6 +19,7 @@ + + #include + #include ++#include + #include + + /* +@@ -151,9 +152,15 @@ + /* save drive reference first thing! */ + pushw %dx + ++ /* is either shift key held down? */ ++ movw $(GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR + 0x17), %bx ++ andb $3, (%bx) ++ jz 2f ++ + /* print a notification message on the screen */ + MSG(notification_string) + ++2: + /* set %si to the disk address packet */ + movw $disk_address_packet, %si + +Index: b/grub-core/boot/i386/pc/diskboot.S +=================================================================== +--- a/grub-core/boot/i386/pc/diskboot.S ++++ b/grub-core/boot/i386/pc/diskboot.S +@@ -17,6 +17,7 @@ + */ + + #include ++#include + #include + + /* +@@ -24,6 +25,7 @@ + */ + + #define MSG(x) movw $x, %si; call LOCAL(message) ++#define SILENT(x) call LOCAL(check_silent); jz LOCAL(x) + + .file "diskboot.S" + +@@ -50,11 +52,14 @@ + /* save drive reference first thing! */ + pushw %dx + ++ SILENT(after_notification_string) ++ + /* print a notification message on the screen */ + pushw %si + MSG(notification_string) + popw %si + ++LOCAL(after_notification_string): + /* this sets up for the first run through "bootloop" */ + movw $(firstlist - GRUB_BOOT_MACHINE_LIST_SIZE), %di + +@@ -279,7 +284,10 @@ + /* restore addressing regs and print a dot with correct DS + (MSG modifies SI, which is saved, and unused AX and BX) */ + popw %ds ++ SILENT(after_notification_step) + MSG(notification_step) ++ ++LOCAL(after_notification_step): + popa + + /* check if finished with this dataset */ +@@ -295,8 +303,11 @@ + /* END OF MAIN LOOP */ + + LOCAL(bootit): ++ SILENT(after_notification_done) + /* print a newline */ + MSG(notification_done) ++ ++LOCAL(after_notification_done): + popw %dx /* this makes sure %dl is our "boot" drive */ + ljmp $0, $(GRUB_BOOT_MACHINE_KERNEL_ADDR + 0x200) + +@@ -320,6 +331,12 @@ + /* go here when you need to stop the machine hard after an error condition */ + LOCAL(stop): jmp LOCAL(stop) + ++LOCAL(check_silent): ++ /* is either shift key held down? */ ++ movw $(GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR + 0x17), %bx ++ andb $3, (%bx) ++ ret ++ + notification_string: .asciz "loading" + + notification_step: .asciz "." --- grub2-1.99.orig/debian/patches/efi_disk_cache.patch +++ grub2-1.99/debian/patches/efi_disk_cache.patch @@ -0,0 +1,26 @@ +Description: Bump the values of GRUB_DISK_CACHE_SIZE and GRUB_DISK_CACHE_BITS + on EFI systems (and only on EFI sytems) to dramatically reduce the load times + for vmlinux and initrd. Forwarding this isn't required as upstream trunk + has completely rewritten how this all works. +Author: Adam Conrad +Origin: other, http://blog.fpmurphy.com/2010/03/grub2-efi-support.html +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/944347 +Forwarded: not-needed +Last-Update: 2012-03-05 + +Index: b/include/grub/disk.h +=================================================================== +--- a/include/grub/disk.h ++++ b/include/grub/disk.h +@@ -137,7 +137,11 @@ + + /* The size of a disk cache in 512B units. Must be at least as big as the + largest supported sector size, currently 16K. */ ++#ifdef GRUB_MACHINE_EFI ++#define GRUB_DISK_CACHE_BITS 10 ++#else + #define GRUB_DISK_CACHE_BITS 6 ++#endif + #define GRUB_DISK_CACHE_SIZE (1 << GRUB_DISK_CACHE_BITS) + + /* Return value of grub_disk_get_size() in case disk size is unknown. */ --- grub2-1.99.orig/debian/patches/grub_legacy_0_based_partitions.patch +++ grub2-1.99/debian/patches/grub_legacy_0_based_partitions.patch @@ -0,0 +1,43 @@ +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -1131,7 +1131,7 @@ + char *bsd_part_str = NULL; + + if (dos_part >= 0) +- dos_part_str = xasprintf (",%d", dos_part + 1); ++ dos_part_str = xasprintf (",%d", dos_part + (getenv ("GRUB_LEGACY_0_BASED_PARTITIONS") ? 0 : 1)); + + if (bsd_part >= 0) + bsd_part_str = xasprintf (",%d", bsd_part + 1); +@@ -1619,6 +1619,29 @@ + + if (start == part_start) + { ++ if (getenv ("GRUB_LEGACY_0_BASED_PARTITIONS")) ++ { ++ int dos_part, bsd_part; ++ char *fullname, *comma; ++ ++ if (partition->parent) ++ { ++ dos_part = partition->parent->number; ++ bsd_part = partition->number; ++ } ++ else ++ { ++ dos_part = partition->number; ++ bsd_part = -1; ++ } ++ ++ fullname = make_device_name (drive, dos_part, bsd_part); ++ comma = strchr (fullname, ','); ++ partname = comma ? xstrdup (comma + 1) : NULL; ++ free (fullname); ++ return 1; ++ } ++ + partname = grub_partition_get_name (partition); + return 1; + } --- grub2-1.99.orig/debian/patches/ubuntu_qemu_no_kvm.patch +++ grub2-1.99/debian/patches/ubuntu_qemu_no_kvm.patch @@ -0,0 +1,19 @@ +Description: Use -no-kvm to work around a qemu bug + https://bugs.launchpad.net/bugs/947597 causes test hangs on some systems. + Work around this using -no-kvm for now. +Author: Colin Watson +Forwarded: not-needed +Last-Update: 2012-03-06 + +Index: b/tests/util/grub-shell.in +=================================================================== +--- a/tests/util/grub-shell.in ++++ b/tests/util/grub-shell.in +@@ -57,6 +57,7 @@ + + boot=hd + qemu=qemu-system-i386 ++qemuopts=-no-kvm + + # Check the arguments. + for option in "$@"; do --- grub2-1.99.orig/debian/patches/partition_performance.patch +++ grub2-1.99/debian/patches/partition_performance.patch @@ -0,0 +1,36 @@ +Description: Give up scanning partitions after ten consecutive open failures + Scanning all the way up to 10000 is excessive and can cause serious + performance problems in some configurations. +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/787461 +Forwarded: yes +Applied-Upstream: http://bazaar.launchpad.net/~vcs-imports/grub/grub2-bzr/revision/3320 +Last-Update: 2011-05-27 + +Index: b/grub-core/kern/emu/hostdisk.c +=================================================================== +--- a/grub-core/kern/emu/hostdisk.c ++++ b/grub-core/kern/emu/hostdisk.c +@@ -564,6 +564,7 @@ + int i; + char real_dev[PATH_MAX]; + struct linux_partition_cache *cache; ++ int missing = 0; + + strcpy(real_dev, dev); + +@@ -602,7 +603,13 @@ + + fd = open (real_dev, O_RDONLY); + if (fd == -1) +- continue; ++ { ++ if (missing++ < 10) ++ continue; ++ else ++ return 0; ++ } ++ missing = 0; + close (fd); + + start = find_partition_start (real_dev); --- grub2-1.99.orig/debian/patches/ubuntu_gfxpayload_filter.patch +++ grub2-1.99/debian/patches/ubuntu_gfxpayload_filter.patch @@ -0,0 +1,237 @@ +Description: Check hardware support before using gfxpayload=keep + Set GRUB_GFXPAYLOAD_LINUX=keep unless it's known to be unsupported on the + current hardware. See + https://blueprints.launchpad.net/ubuntu/+spec/packageselection-foundations-n-grub2-boot-framebuffer. +Author: Evan Broder +Author: Colin Watson +Forwarded: no +Last-Update: 2011-09-15 + +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -596,6 +596,15 @@ + }; + + module = { ++ name = hwmatch; ++ i386_pc = commands/i386/pc/hwmatch.c; ++ enable = i386_pc; ++ ldadd = libgnulib.a; ++ cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; ++ cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; ++}; ++ ++module = { + name = keystatus; + common = commands/keystatus.c; + }; +Index: b/grub-core/commands/i386/pc/hwmatch.c +=================================================================== +--- /dev/null ++++ b/grub-core/commands/i386/pc/hwmatch.c +@@ -0,0 +1,141 @@ ++/* hwmatch.c - Match hardware against a whitelist/blacklist. */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2011 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++static grub_err_t ++grub_cmd_hwmatch (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char **args) ++{ ++ grub_file_t matches_file; ++ int class_match; ++ int match = 0; ++ char *match_str; ++ ++ auto int NESTED_FUNC_ATTR hwmatch_iter (grub_pci_device_t dev, ++ grub_pci_id_t pciid); ++ ++ int NESTED_FUNC_ATTR hwmatch_iter (grub_pci_device_t dev, ++ grub_pci_id_t pciid) ++ { ++ grub_pci_address_t addr; ++ grub_uint32_t class, baseclass, vendor, device; ++ grub_pci_id_t subpciid; ++ grub_uint32_t subvendor, subdevice, subclass; ++ char *id, *line; ++ ++ addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS); ++ class = grub_pci_read (addr); ++ baseclass = class >> 24; ++ ++ if (class_match != baseclass) ++ return 0; ++ ++ vendor = pciid & 0xffff; ++ device = pciid >> 16; ++ ++ addr = grub_pci_make_address (dev, GRUB_PCI_REG_SUBVENDOR); ++ subpciid = grub_pci_read (addr); ++ ++ subclass = (class >> 16) & 0xff; ++ subvendor = subpciid & 0xffff; ++ subdevice = subpciid >> 16; ++ ++ id = grub_xasprintf ("v%04xd%04xsv%04xsd%04xbc%02xsc%02x", ++ vendor, device, subvendor, subdevice, ++ baseclass, subclass); ++ ++ grub_file_seek (matches_file, 0); ++ while ((line = grub_file_getline (matches_file)) != NULL) ++ { ++ char *anchored_line; ++ regex_t regex; ++ int ret; ++ ++ if (! *line || *line == '#') ++ { ++ grub_free (line); ++ continue; ++ } ++ ++ anchored_line = grub_xasprintf ("^%s$", line); ++ ret = regcomp (®ex, anchored_line, REG_EXTENDED | REG_NOSUB); ++ grub_free (anchored_line); ++ if (ret) ++ { ++ grub_free (line); ++ continue; ++ } ++ ++ ret = regexec (®ex, id, 0, NULL, 0); ++ regfree (®ex); ++ grub_free (line); ++ if (! ret) ++ { ++ match = 1; ++ return 1; ++ } ++ } ++ ++ return 0; ++ } ++ ++ if (argc < 2) ++ return grub_error (GRUB_ERR_BAD_ARGUMENT, "list file and class required"); ++ ++ matches_file = grub_file_open (args[0]); ++ if (! matches_file) ++ return grub_error (GRUB_ERR_FILE_NOT_FOUND, "file not found"); ++ ++ class_match = grub_strtol (args[1], 0, 10); ++ ++ grub_pci_iterate (hwmatch_iter); ++ ++ match_str = grub_xasprintf ("%d", match); ++ grub_env_set ("match", match_str); ++ grub_free (match_str); ++ ++ grub_file_close (matches_file); ++ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_command_t cmd; ++ ++GRUB_MOD_INIT(hwmatch) ++{ ++ cmd = grub_register_command ("hwmatch", grub_cmd_hwmatch, ++ N_("MATCHES-FILE CLASS"), ++ N_("Match PCI devices.")); ++} ++ ++GRUB_MOD_FINI(hwmatch) ++{ ++ grub_unregister_command (cmd); ++} +Index: b/util/grub.d/10_linux.in +=================================================================== +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -89,18 +89,9 @@ + save_default_entry | sed -e "s/^/\t/" + fi + +- # Use ELILO's generic "efifb" when it's known to be available. +- # FIXME: We need an interface to select vesafb in case efifb can't be used. +- if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then +- if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then +- cat << EOF +- load_video +-EOF +- fi +- cat << EOF +- set gfxpayload=$GRUB_GFXPAYLOAD_LINUX ++ cat << EOF ++ set gfxpayload=\$linux_gfx_mode + EOF +- fi + + cat << EOF + insmod gzio +@@ -156,6 +147,36 @@ + prepare_boot_cache= + prepare_root_cache= + ++# Use ELILO's generic "efifb" when it's known to be available. ++# FIXME: We need an interface to select vesafb in case efifb can't be used. ++if [ "x$GRUB_GFXPAYLOAD_LINUX" != x ]; then ++ echo "set linux_gfx_mode=$GRUB_GFXPAYLOAD_LINUX" ++else ++ cat << EOF ++if [ "\${recordfail}" != 1 ]; then ++ if [ -e \${prefix}/gfxblacklist.txt ]; then ++ if hwmatch \${prefix}/gfxblacklist.txt 3; then ++ if [ \${match} = 0 ]; then ++ set linux_gfx_mode=keep ++ else ++ set linux_gfx_mode=text ++ fi ++ else ++ set linux_gfx_mode=text ++ fi ++ else ++ set linux_gfx_mode=keep ++ fi ++else ++ set linux_gfx_mode=text ++fi ++EOF ++fi ++cat << EOF ++export linux_gfx_mode ++if [ "\${linux_gfx_mode}" != "text" ]; then load_video; fi ++EOF ++ + while [ "x$list" != "x" ] ; do + linux=`version_find_latest $list` + echo "Found linux image: $linux" >&2 --- grub2-1.99.orig/debian/patches/branch_fuse.patch +++ grub2-1.99/debian/patches/branch_fuse.patch @@ -0,0 +1,605 @@ +Description: Add grub-mount utility +Author: Vladimir Serbinenko +Origin: upstream, http://bzr.sv.gnu.org/r/grub/branches/fuse/ +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-01/msg00056.html +Last-Update: 2011-07-10 + +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -216,6 +216,21 @@ + }; + + program = { ++ name = grub-mount; ++ mansection = 1; ++ common_nodist = grub_fstest_init.c; ++ common = util/grub-mount.c; ++ common = grub-core/kern/emu/hostfs.c; ++ common = grub-core/disk/host.c; ++ ++ ldadd = libgrubmods.a; ++ ldadd = libgrubkern.a; ++ ldadd = grub-core/gnulib/libgnu.a; ++ ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) -lfuse'; ++ condition = COND_GRUB_MOUNT; ++}; ++ ++program = { + name = grub-mkfont; + mansection = 1; + common = util/grub-mkfont.c; +--- a/configure.ac ++++ b/configure.ac +@@ -856,6 +856,37 @@ + AC_SUBST([freetype_cflags]) + AC_SUBST([freetype_libs]) + ++AC_ARG_ENABLE([grub-mount], ++ [AS_HELP_STRING([--enable-grub-mount], ++ [build and install the `grub-mount' utility (default=guessed)])]) ++if test x"$enable_grub_mount" = xno ; then ++ grub_mount_excuse="explicitly disabled" ++fi ++ ++if test x"$grub_mount_excuse" = x ; then ++ AC_CHECK_LIB([fuse], [fuse_main_real], [], ++ [grub_mount_excuse="need FUSE library"]) ++fi ++ ++if test x"$grub_mount_excuse" = x ; then ++ # Check for fuse headers. ++ SAVED_CPPFLAGS="$CPPFLAGS" ++ CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26" ++ AC_CHECK_HEADERS([fuse/fuse.h], [], ++ [grub_mount_excuse=["need FUSE headers"]]) ++ CPPFLAGS="$SAVED_CPPFLAGS" ++fi ++ ++if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then ++ AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled]) ++fi ++if test x"$grub_mount_excuse" = x ; then ++enable_grub_mount=yes ++else ++enable_grub_mount=no ++fi ++AC_SUBST([enable_grub_mount]) ++ + AC_ARG_ENABLE([device-mapper], + [AS_HELP_STRING([--enable-device-mapper], + [enable Linux device-mapper support (default=guessed)])]) +@@ -967,6 +998,7 @@ + AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes]) + AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes]) + AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) ++AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes]) + AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) + AM_CONDITIONAL([COND_GRUB_PE2ELF], [test x$TARGET_OBJ2ELF != x]) + AM_CONDITIONAL([COND_APPLE_CC], [test x$TARGET_APPLE_CC = x1]) +@@ -1043,5 +1075,10 @@ + else + echo grub-mkfont: No "($grub_mkfont_excuse)" + fi ++if [ x"$grub_mount_excuse" = x ]; then ++echo grub-mount: Yes ++else ++echo grub-mount: No "($grub_mount_excuse)" ++fi + echo "*******************************************************" + ] +--- /dev/null ++++ b/docs/man/grub-mount.h2m +@@ -0,0 +1,2 @@ ++[NAME] ++grub-mount \- export GRUB filesystem with FUSE +--- /dev/null ++++ b/util/grub-mount.c +@@ -0,0 +1,508 @@ ++/* grub-mount.c - FUSE driver for filesystems that GRUB understands */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2008,2009,2010 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++#define FUSE_USE_VERSION 26 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "progname.h" ++#include "argp.h" ++ ++static char *root = NULL; ++grub_device_t dev = NULL; ++grub_fs_t fs = NULL; ++static char **images = NULL; ++static char *debug_str = NULL; ++static char **fuse_args = NULL; ++static int fuse_argc = 0; ++static int num_disks = 0; ++ ++static grub_err_t ++execute_command (char *name, int n, char **args) ++{ ++ grub_command_t cmd; ++ ++ cmd = grub_command_find (name); ++ if (! cmd) ++ grub_util_error (_("can\'t find command %s"), name); ++ ++ return (cmd->func) (cmd, n, args); ++} ++ ++/* Translate GRUB error numbers into OS error numbers. Print any unexpected ++ errors. */ ++static int ++translate_error (void) ++{ ++ int ret; ++ ++ switch (grub_errno) ++ { ++ case GRUB_ERR_NONE: ++ ret = 0; ++ break; ++ ++ case GRUB_ERR_OUT_OF_MEMORY: ++ grub_print_error (); ++ ret = -ENOMEM; ++ break; ++ ++ case GRUB_ERR_BAD_FILE_TYPE: ++ /* This could also be EISDIR. Take a guess. */ ++ ret = -ENOTDIR; ++ break; ++ ++ case GRUB_ERR_FILE_NOT_FOUND: ++ ret = -ENOENT; ++ break; ++ ++ case GRUB_ERR_FILE_READ_ERROR: ++ case GRUB_ERR_READ_ERROR: ++ case GRUB_ERR_IO: ++ grub_print_error (); ++ ret = -EIO; ++ break; ++ ++ case GRUB_ERR_SYMLINK_LOOP: ++ ret = -ELOOP; ++ break; ++ ++ default: ++ grub_print_error (); ++ ret = -EINVAL; ++ break; ++ } ++ ++ /* Any previous errors were handled. */ ++ grub_errno = GRUB_ERR_NONE; ++ ++ return ret; ++} ++ ++static int ++fuse_getattr (const char *path, struct stat *st) ++{ ++ char *filename, *pathname, *path2; ++ const char *pathname_t; ++ struct grub_dirhook_info file_info; ++ int file_exists = 0; ++ ++ /* A hook for iterating directories. */ ++ auto int find_file (const char *cur_filename, ++ const struct grub_dirhook_info *info); ++ int find_file (const char *cur_filename, ++ const struct grub_dirhook_info *info) ++ { ++ if ((info->case_insensitive ? grub_strcasecmp (cur_filename, filename) ++ : grub_strcmp (cur_filename, filename)) == 0) ++ { ++ file_info = *info; ++ file_exists = 1; ++ return 1; ++ } ++ return 0; ++ } ++ ++ if (path[0] == '/' && path[1] == 0) ++ { ++ st->st_dev = 0; ++ st->st_ino = 0; ++ st->st_mode = 0555 | S_IFDIR; ++ st->st_uid = 0; ++ st->st_gid = 0; ++ st->st_rdev = 0; ++ st->st_size = 0; ++ st->st_blksize = 512; ++ st->st_blocks = (st->st_blksize + 511) >> 9; ++ st->st_atime = st->st_mtime = st->st_ctime = 0; ++ return 0; ++ } ++ ++ file_exists = 0; ++ ++ pathname_t = grub_strchr (path, ')'); ++ if (! pathname_t) ++ pathname_t = path; ++ else ++ pathname_t++; ++ pathname = xstrdup (pathname_t); ++ ++ /* Remove trailing '/'. */ ++ while (*pathname && pathname[grub_strlen (pathname) - 1] == '/') ++ pathname[grub_strlen (pathname) - 1] = 0; ++ ++ /* Split into path and filename. */ ++ filename = grub_strrchr (pathname, '/'); ++ if (! filename) ++ { ++ path2 = grub_strdup ("/"); ++ filename = pathname; ++ } ++ else ++ { ++ filename++; ++ path2 = grub_strdup (pathname); ++ path2[filename - pathname] = 0; ++ } ++ ++ /* It's the whole device. */ ++ (fs->dir) (dev, path2, find_file); ++ ++ grub_free (path2); ++ if (!file_exists) ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return -ENOENT; ++ } ++ st->st_dev = 0; ++ st->st_ino = 0; ++ st->st_mode = file_info.dir ? (0555 | S_IFDIR) : (0444 | S_IFREG); ++ st->st_uid = 0; ++ st->st_gid = 0; ++ st->st_rdev = 0; ++ if (!file_info.dir) ++ { ++ grub_file_t file; ++ file = grub_file_open (path); ++ if (! file) ++ return translate_error (); ++ st->st_size = file->size; ++ grub_file_close (file); ++ } ++ else ++ st->st_size = 0; ++ st->st_blksize = 512; ++ st->st_blocks = (st->st_size + 511) >> 9; ++ st->st_atime = st->st_mtime = st->st_ctime = file_info.mtimeset ++ ? file_info.mtime : 0; ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++} ++ ++static int ++fuse_opendir (const char *path, struct fuse_file_info *fi) ++{ ++ return 0; ++} ++ ++/* FIXME */ ++static grub_file_t files[65536]; ++static int first_fd = 1; ++ ++static int ++fuse_open (const char *path, struct fuse_file_info *fi __attribute__ ((unused))) ++{ ++ grub_file_t file; ++ file = grub_file_open (path); ++ if (! file) ++ return translate_error (); ++ files[first_fd++] = file; ++ fi->fh = first_fd; ++ files[first_fd++] = file; ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++} ++ ++static int ++fuse_read (const char *path, char *buf, size_t sz, off_t off, ++ struct fuse_file_info *fi) ++{ ++ grub_file_t file = files[fi->fh]; ++ grub_ssize_t size; ++ ++ if (off > file->size) ++ return -EINVAL; ++ ++ file->offset = off; ++ ++ size = grub_file_read (file, buf, sz); ++ if (size < 0) ++ return translate_error (); ++ else ++ { ++ grub_errno = GRUB_ERR_NONE; ++ return size; ++ } ++} ++ ++static int ++fuse_release (const char *path, struct fuse_file_info *fi) ++{ ++ grub_file_close (files[fi->fh]); ++ files[fi->fh] = NULL; ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++} ++ ++static int ++fuse_readdir (const char *path, void *buf, ++ fuse_fill_dir_t fill, off_t off, struct fuse_file_info *fi) ++{ ++ char *pathname; ++ ++ auto int call_fill (const char *filename, ++ const struct grub_dirhook_info *info); ++ int call_fill (const char *filename, const struct grub_dirhook_info *info) ++ { ++ fill (buf, filename, NULL, 0); ++ return 0; ++ } ++ ++ pathname = xstrdup (path); ++ ++ /* Remove trailing '/'. */ ++ while (pathname [0] && pathname[1] ++ && pathname[grub_strlen (pathname) - 1] == '/') ++ pathname[grub_strlen (pathname) - 1] = 0; ++ ++ (fs->dir) (dev, pathname, call_fill); ++ free (pathname); ++ grub_errno = GRUB_ERR_NONE; ++ return 0; ++} ++ ++struct fuse_operations grub_opers = { ++ .getattr = fuse_getattr, ++ .open = fuse_open, ++ .release = fuse_release, ++ .opendir = fuse_opendir, ++ .readdir = fuse_readdir, ++ .read = fuse_read ++}; ++ ++static grub_err_t ++fuse_init (void) ++{ ++ int i; ++ ++ for (i = 0; i < num_disks; i++) ++ { ++ char *argv[2]; ++ char *host_file; ++ char *loop_name; ++ loop_name = grub_xasprintf ("loop%d", i); ++ if (!loop_name) ++ grub_util_error (grub_errmsg); ++ ++ host_file = grub_xasprintf ("(host)%s", images[i]); ++ if (!host_file) ++ grub_util_error (grub_errmsg); ++ ++ argv[0] = loop_name; ++ argv[1] = host_file; ++ ++ if (execute_command ("loopback", 2, argv)) ++ grub_util_error (_("loopback command fails")); ++ ++ grub_free (loop_name); ++ grub_free (host_file); ++ } ++ ++ grub_lvm_fini (); ++ grub_mdraid09_fini (); ++ grub_mdraid1x_fini (); ++ grub_raid_fini (); ++ grub_raid_init (); ++ grub_mdraid09_init (); ++ grub_mdraid1x_init (); ++ grub_lvm_init (); ++ ++ dev = grub_device_open (0); ++ if (! dev) ++ return grub_errno; ++ ++ fs = grub_fs_probe (dev); ++ if (! fs) ++ { ++ grub_device_close (dev); ++ return grub_errno; ++ } ++ ++ fuse_main (fuse_argc, fuse_args, &grub_opers, NULL); ++ ++ for (i = 0; i < num_disks; i++) ++ { ++ char *argv[2]; ++ char *loop_name; ++ ++ loop_name = grub_xasprintf ("loop%d", i); ++ if (!loop_name) ++ grub_util_error (grub_errmsg); ++ ++ argv[0] = "-d"; ++ argv[1] = loop_name; ++ ++ execute_command ("loopback", 2, argv); ++ ++ grub_free (loop_name); ++ } ++ ++ return GRUB_ERR_NONE; ++} ++ ++static struct argp_option options[] = { ++ {"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2}, ++ {"debug", 'd', "S", 0, N_("Set debug environment variable."), 2}, ++ {"verbose", 'v', NULL, OPTION_ARG_OPTIONAL, N_("Print verbose messages."), 2}, ++ {0, 0, 0, 0, 0, 0} ++}; ++ ++/* Print the version information. */ ++static void ++print_version (FILE *stream, struct argp_state *state) ++{ ++ fprintf (stream, "%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); ++} ++void (*argp_program_version_hook) (FILE *, struct argp_state *) = print_version; ++ ++error_t ++argp_parser (int key, char *arg, struct argp_state *state) ++{ ++ char *p; ++ ++ switch (key) ++ { ++ case 'r': ++ root = arg; ++ return 0; ++ ++ case 'd': ++ debug_str = arg; ++ return 0; ++ ++ case 'v': ++ verbosity++; ++ return 0; ++ ++ case ARGP_KEY_ARG: ++ if (arg[0] != '-') ++ break; ++ ++ default: ++ if (!arg) ++ return 0; ++ ++ fuse_args = xrealloc (fuse_args, (fuse_argc + 1) * sizeof (fuse_args[0])); ++ fuse_args[fuse_argc] = xstrdup (arg); ++ fuse_argc++; ++ return 0; ++ } ++ ++ if (arg[0] != '/') ++ { ++ fprintf (stderr, "%s", _("Must use absolute path.\n")); ++ argp_usage (state); ++ } ++ images = xrealloc (images, (num_disks + 1) * sizeof (images[0])); ++ images[num_disks] = xstrdup (arg); ++ num_disks++; ++ ++ return 0; ++} ++ ++struct argp argp = { ++ options, argp_parser, N_("IMAGE1 [IMAGE2 ...] MOUNTPOINT"), ++ N_("Debug tool for filesystem driver."), ++ NULL, NULL, NULL ++}; ++ ++int ++main (int argc, char *argv[]) ++{ ++ char *default_root, *alloc_root; ++ ++ set_program_name (argv[0]); ++ ++ grub_util_init_nls (); ++ ++ fuse_args = xrealloc (fuse_args, (fuse_argc + 2) * sizeof (fuse_args[0])); ++ fuse_args[fuse_argc] = xstrdup (argv[0]); ++ fuse_argc++; ++ /* Run single-threaded. */ ++ fuse_args[fuse_argc] = xstrdup ("-s"); ++ fuse_argc++; ++ ++ argp_parse (&argp, argc, argv, 0, 0, 0); ++ ++ if (num_disks < 2) ++ grub_util_error ("need an image and mountpoint"); ++ fuse_args = xrealloc (fuse_args, (fuse_argc + 2) * sizeof (fuse_args[0])); ++ fuse_args[fuse_argc] = images[num_disks - 1]; ++ fuse_argc++; ++ num_disks--; ++ fuse_args[fuse_argc] = NULL; ++ ++ /* Initialize all modules. */ ++ grub_init_all (); ++ ++ if (debug_str) ++ grub_env_set ("debug", debug_str); ++ ++ default_root = (num_disks == 1) ? "loop0" : "md0"; ++ alloc_root = 0; ++ if (root) ++ { ++ if ((*root >= '0') && (*root <= '9')) ++ { ++ alloc_root = xmalloc (strlen (default_root) + strlen (root) + 2); ++ ++ sprintf (alloc_root, "%s,%s", default_root, root); ++ root = alloc_root; ++ } ++ } ++ else ++ root = default_root; ++ ++ grub_env_set ("root", root); ++ ++ if (alloc_root) ++ free (alloc_root); ++ ++ /* Do it. */ ++ fuse_init (); ++ if (grub_errno) ++ { ++ grub_print_error (); ++ return 1; ++ } ++ ++ /* Free resources. */ ++ grub_fini_all (); ++ ++ return 0; ++} --- grub2-1.99.orig/debian/patches/ubuntu_linuxefi_debug.patch +++ grub2-1.99/debian/patches/ubuntu_linuxefi_debug.patch @@ -0,0 +1,85 @@ +Description: Add more debugging to linuxefi +Author: Colin Watson +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/grub-core/loader/i386/efi/linux.c +=================================================================== +--- a/grub-core/loader/i386/efi/linux.c ++++ b/grub-core/loader/i386/efi/linux.c +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -54,15 +55,27 @@ + { + grub_efi_guid_t guid = SHIM_LOCK_GUID; + grub_efi_shim_lock_t *shim_lock; ++ grub_efi_status_t status; + ++ grub_dprintf ("linuxefi", "Locating shim protocol\n"); + shim_lock = grub_efi_locate_protocol(&guid, NULL); + + if (!shim_lock) +- return 0; ++ { ++ grub_dprintf ("linuxefi", "shim not available\n"); ++ return 0; ++ } + +- if (shim_lock->verify(data, size) == GRUB_EFI_SUCCESS) +- return 1; ++ grub_dprintf ("linuxefi", "Asking shim to verify kernel signature\n"); ++ status = shim_lock->verify(data, size); ++ if (status == GRUB_EFI_SUCCESS) ++ { ++ grub_dprintf ("linuxefi", "Kernel signature verification passed\n"); ++ return 1; ++ } + ++ grub_dprintf ("linuxefi", "Kernel signature verification failed (0x%lx)\n", ++ (unsigned long) status); + return 0; + } + +@@ -147,6 +160,8 @@ + goto fail; + } + ++ grub_dprintf ("linuxefi", "initrd_mem = %lx\n", (unsigned long) initrd_mem); ++ + params->ramdisk_size = size; + params->ramdisk_image = (grub_uint32_t)(grub_uint64_t) initrd_mem; + +@@ -236,6 +251,8 @@ + goto fail; + } + ++ grub_dprintf ("linuxefi", "params = %lx\n", (unsigned long) params); ++ + memset (params, 0, 16384); + + if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) +@@ -279,6 +296,9 @@ + goto fail; + } + ++ grub_dprintf ("linuxefi", "linux_cmdline = %lx\n", ++ (unsigned long) linux_cmdline); ++ + grub_memcpy (linux_cmdline, LINUX_IMAGE, sizeof (LINUX_IMAGE)); + grub_create_loader_cmdline (argc, argv, + linux_cmdline + sizeof (LINUX_IMAGE) - 1, +@@ -304,6 +324,8 @@ + goto fail; + } + ++ grub_dprintf ("linuxefi", "kernel_mem = %lx\n", (unsigned long) kernel_mem); ++ + if (grub_file_seek (file, start) == (grub_off_t) -1) + { + grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), --- grub2-1.99.orig/debian/patches/olpc_prefix_hack.patch +++ grub2-1.99/debian/patches/olpc_prefix_hack.patch @@ -0,0 +1,50 @@ + +This sucks, but it's better than what OFW was giving us. + +Index: b/grub-core/kern/ieee1275/init.c +=================================================================== +--- a/grub-core/kern/ieee1275/init.c ++++ b/grub-core/kern/ieee1275/init.c +@@ -53,6 +53,7 @@ + grub_ieee1275_exit (); + } + ++#ifndef __i386__ + /* Translate an OF filesystem path (separated by backslashes), into a GRUB + path (separated by forward slashes). */ + static void +@@ -67,13 +68,16 @@ + backslash = grub_strchr (filepath, '\\'); + } + } ++#endif + + void + grub_machine_set_prefix (void) + { ++#ifndef __i386__ + char bootpath[64]; /* XXX check length */ + char *filename; + char *prefix; ++#endif + + if (grub_prefix[0]) + { +@@ -82,6 +86,9 @@ + return; + } + ++#ifdef __i386__ ++ grub_env_set ("prefix", "(sd,1)/"); ++#else + if (grub_ieee1275_get_property (grub_ieee1275_chosen, "bootpath", &bootpath, + sizeof (bootpath), 0)) + { +@@ -120,6 +127,7 @@ + + grub_free (filename); + grub_free (prefix); ++#endif + } + + /* Claim some available memory in the first /memory node. */ --- grub2-1.99.orig/debian/patches/ubuntu_sleep_shift.patch +++ grub2-1.99/debian/patches/ubuntu_sleep_shift.patch @@ -0,0 +1,53 @@ +Description: Allow Shift to interrupt 'sleep --interruptible' + Upstream would like to consider this at more length. See + http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00718.html, and the + rest of the thread for context. +Author: Colin Watson +Forwarded: http://lists.gnu.org/archive/html/grub-devel/2009-08/msg00694.html +Last-Update: 2011-01-05 + +Index: b/grub-core/commands/sleep.c +=================================================================== +--- a/grub-core/commands/sleep.c ++++ b/grub-core/commands/sleep.c +@@ -45,6 +45,31 @@ + grub_printf ("%d ", n); + } + ++static int ++grub_check_keyboard (void) ++{ ++ int mods = 0; ++ grub_term_input_t term; ++ ++ if (grub_term_poll_usb) ++ grub_term_poll_usb (); ++ ++ FOR_ACTIVE_TERM_INPUTS(term) ++ { ++ if (term->getkeystatus) ++ mods |= term->getkeystatus (term); ++ } ++ ++ if (mods >= 0 && ++ (mods & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT)) != 0) ++ return 1; ++ ++ if (grub_checkkey () >= 0 && grub_getkey () == GRUB_TERM_ESC) ++ return 1; ++ ++ return 0; ++} ++ + /* Based on grub_millisleep() from kern/generic/millisleep.c. */ + static int + grub_interruptible_millisleep (grub_uint32_t ms) +@@ -54,7 +79,7 @@ + start = grub_get_time_ms (); + + while (grub_get_time_ms () - start < ms) +- if (grub_checkkey () >= 0 && grub_getkey () == GRUB_TERM_ESC) ++ if (grub_check_keyboard ()) + return 1; + + return 0; --- grub2-1.99.orig/debian/patches/ubuntu_no_device_map.patch +++ grub2-1.99/debian/patches/ubuntu_no_device_map.patch @@ -0,0 +1,92 @@ +Description: Don't generate a device map by default +Author: Colin Watson +Forwarded: no +Last-Update: 2011-01-05 + +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -318,14 +318,6 @@ + exit 1 + fi + +-set "$grub_mkdevicemap" dummy +-if test -f "$1"; then +- : +-else +- echo "$1: Not found." 1>&2 +- exit 1 +-fi +- + if [ x"$platform" = xefi ]; then + # Find the EFI System Partition. + efidir= +@@ -415,22 +407,14 @@ + rm -f "$device_map" + fi + +-# Create the device map file if it is not present. ++# Make sure that there is no duplicated entry in the device map. + if test -f "$device_map"; then +- : +-else +- # Create a safe temporary file. +- test -n "$mklog" && log_file=`$mklog` +- +- "$grub_mkdevicemap" "--device-map=$device_map" $no_floppy || exit 1 +-fi +- +-# Make sure that there is no duplicated entry. +-tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' "$device_map" \ +- | sort | uniq -d | sed -n 1p` +-if test -n "$tmp"; then +- echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 +- exit 1 ++ tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' "$device_map" \ ++ | sort | uniq -d | sed -n 1p` ++ if test -n "$tmp"; then ++ echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 ++ exit 1 ++ fi + fi + + # Copy the GRUB images to the GRUB directory. +Index: b/util/grub-mkconfig.in +=================================================================== +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -37,7 +37,6 @@ + + self=`basename $0` + +-grub_mkdevicemap="${sbindir}/`echo grub-mkdevicemap | sed "${transform}"`" + grub_probe="${sbindir}/`echo grub-probe | sed "${transform}"`" + grub_script_check="${bindir}/`echo grub-script-check | sed "${transform}"`" + +@@ -119,14 +118,6 @@ + fi + fi + +-set $grub_mkdevicemap dummy +-if test -f "$1"; then +- : +-else +- echo "$1: Not found." 1>&2 +- exit 1 +-fi +- + set $grub_probe dummy + if test -f "$1"; then + : +@@ -137,10 +128,6 @@ + + mkdir -p ${GRUB_PREFIX} + +-if test -e ${GRUB_PREFIX}/device.map ; then : ; else +- ${grub_mkdevicemap} +-fi +- + # Device containing our userland. Typically used for root= parameter. + GRUB_DEVICE="`${grub_probe} --target=device /`" + GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true --- grub2-1.99.orig/debian/patches/ubuntu_linuxefi.patch +++ grub2-1.99/debian/patches/ubuntu_linuxefi.patch @@ -0,0 +1,470 @@ +Description: Add "linuxefi" loader which avoids ExitBootServices +Author: Matthew Garrett +Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub2-linuxefi.patch +Forwarded: no +Last-Update: 2012-11-05 + +Index: b/grub-core/Makefile.core.def +=================================================================== +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1232,6 +1232,14 @@ + }; + + module = { ++ name = linuxefi; ++ x86_efi = loader/i386/efi/linux.c; ++ x86_efi = lib/cmdline.c; ++ enable = i386_efi; ++ enable = x86_64_efi; ++}; ++ ++module = { + name = chain; + x86_efi = loader/efi/chainloader.c; + i386_pc = loader/i386/pc/chainloader.c; +Index: b/grub-core/kern/efi/mm.c +=================================================================== +--- a/grub-core/kern/efi/mm.c ++++ b/grub-core/kern/efi/mm.c +@@ -43,6 +43,38 @@ + static grub_efi_uint32_t finish_desc_version; + int grub_efi_is_finished = 0; + ++/* Allocate pages below a specified address */ ++void * ++grub_efi_allocate_pages_max (grub_efi_physical_address_t max, ++ grub_efi_uintn_t pages) ++{ ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b; ++ grub_efi_physical_address_t address = max; ++ ++ if (max > 0xffffffff) ++ return 0; ++ ++ b = grub_efi_system_table->boot_services; ++ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ if (address == 0) ++ { ++ /* Uggh, the address 0 was allocated... This is too annoying, ++ so reallocate another one. */ ++ address = max; ++ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); ++ grub_efi_free_pages (0, pages); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ } ++ ++ return (void *) ((grub_addr_t) address); ++} ++ + /* Allocate pages. Return the pointer to the first of allocated pages. */ + void * + grub_efi_allocate_pages (grub_efi_physical_address_t address, +Index: b/grub-core/loader/i386/efi/linux.c +=================================================================== +--- /dev/null ++++ b/grub-core/loader/i386/efi/linux.c +@@ -0,0 +1,371 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2012 Free Software Foundation, Inc. ++ * ++ * GRUB 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 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB 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 GRUB. If not, see . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++static grub_dl_t my_mod; ++static int loaded; ++static void *kernel_mem; ++static grub_uint64_t kernel_size; ++static grub_uint8_t *initrd_mem; ++static grub_uint32_t handover_offset; ++struct linux_kernel_params *params; ++static char *linux_cmdline; ++ ++#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12) ++ ++#define SHIM_LOCK_GUID \ ++ { 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23} } ++ ++struct grub_efi_shim_lock ++{ ++ grub_efi_status_t (*verify) (void *buffer, grub_uint32_t size); ++}; ++typedef struct grub_efi_shim_lock grub_efi_shim_lock_t; ++ ++static grub_efi_boolean_t ++grub_linuxefi_secure_validate (void *data, grub_uint32_t size) ++{ ++ grub_efi_guid_t guid = SHIM_LOCK_GUID; ++ grub_efi_shim_lock_t *shim_lock; ++ ++ shim_lock = grub_efi_locate_protocol(&guid, NULL); ++ ++ if (!shim_lock) ++ return 1; ++ ++ if (shim_lock->verify(data, size) == GRUB_EFI_SUCCESS) ++ return 1; ++ ++ return 0; ++} ++ ++typedef void(*handover_func)(void *, grub_efi_system_table_t *, struct linux_kernel_params *); ++ ++static grub_err_t ++grub_linuxefi_boot (void) ++{ ++ handover_func hf; ++ int offset = 0; ++ ++#ifdef __x86_64__ ++ offset = 512; ++#endif ++ ++ hf = (handover_func)((char *)kernel_mem + handover_offset + offset); ++ ++ asm volatile ("cli"); ++ ++ hf (grub_efi_image_handle, grub_efi_system_table, params); ++ ++ /* Not reached */ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_linuxefi_unload (void) ++{ ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ if (initrd_mem) ++ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(params->ramdisk_size)); ++ if (linux_cmdline) ++ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(params->cmdline_size + 1)); ++ if (kernel_mem) ++ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); ++ if (params) ++ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ grub_file_t *files = 0; ++ int i, nfiles = 0; ++ grub_size_t size = 0; ++ grub_uint8_t *ptr; ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ if (!loaded) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("you need to load the kernel first")); ++ goto fail; ++ } ++ ++ files = grub_zalloc (argc * sizeof (files[0])); ++ if (!files) ++ goto fail; ++ ++ for (i = 0; i < argc; i++) ++ { ++ grub_file_filter_disable_compression (); ++ files[i] = grub_file_open (argv[i]); ++ if (! files[i]) ++ goto fail; ++ nfiles++; ++ size += ALIGN_UP (grub_file_size (files[i]), 4); ++ } ++ ++ initrd_mem = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(size)); ++ ++ if (!initrd_mem) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate initrd")); ++ goto fail; ++ } ++ ++ params->ramdisk_size = size; ++ params->ramdisk_image = (grub_uint32_t)(grub_uint64_t) initrd_mem; ++ ++ ptr = initrd_mem; ++ ++ for (i = 0; i < nfiles; i++) ++ { ++ grub_ssize_t cursize = grub_file_size (files[i]); ++ if (grub_file_read (files[i], ptr, cursize) != cursize) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), ++ argv[i]); ++ goto fail; ++ } ++ ptr += cursize; ++ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4)); ++ ptr += ALIGN_UP_OVERHEAD (cursize, 4); ++ } ++ ++ params->ramdisk_size = size; ++ ++ fail: ++ for (i = 0; i < nfiles; i++) ++ grub_file_close (files[i]); ++ grub_free (files); ++ ++ if (initrd_mem && grub_errno) ++ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(size)); ++ ++ return grub_errno; ++} ++ ++static grub_err_t ++grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ grub_file_t file = 0; ++ struct linux_kernel_header lh; ++ grub_ssize_t len, start, filelen; ++ void *kernel; ++ ++ grub_dl_ref (my_mod); ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ file = grub_file_open (argv[0]); ++ if (! file) ++ goto fail; ++ ++ filelen = grub_file_size (file); ++ ++ kernel = grub_malloc(filelen); ++ ++ if (!kernel) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("cannot allocate kernel buffer")); ++ goto fail; ++ } ++ ++ if (grub_file_read (file, kernel, filelen) != filelen) ++ { ++ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("Can't read kernel %s"), argv[0]); ++ goto fail; ++ } ++ ++ if (! grub_linuxefi_secure_validate (kernel, filelen)) ++ { ++ grub_error (GRUB_ERR_INVALID_COMMAND, N_("%s has invalid signature"), argv[0]); ++ grub_free (kernel); ++ goto fail; ++ } ++ ++ grub_file_seek (file, 0); ++ ++ grub_free(kernel); ++ ++ params = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(16384)); ++ ++ if (! params) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate kernel parameters"); ++ goto fail; ++ } ++ ++ memset (params, 0, 16384); ++ ++ if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ goto fail; ++ } ++ ++ if (lh.boot_flag != grub_cpu_to_le16 (0xaa55)) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("invalid magic number")); ++ goto fail; ++ } ++ ++ if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("too many setup sectors")); ++ goto fail; ++ } ++ ++ if (lh.version < grub_cpu_to_le16 (0x020b)) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("kernel too old")); ++ goto fail; ++ } ++ ++ if (!lh.handover_offset) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("kernel doesn't support EFI handover")); ++ goto fail; ++ } ++ ++ linux_cmdline = grub_efi_allocate_pages_max(0x3fffffff, ++ BYTES_TO_PAGES(lh.cmdline_size + 1)); ++ ++ if (!linux_cmdline) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate cmdline")); ++ goto fail; ++ } ++ ++ grub_memcpy (linux_cmdline, LINUX_IMAGE, sizeof (LINUX_IMAGE)); ++ grub_create_loader_cmdline (argc, argv, ++ linux_cmdline + sizeof (LINUX_IMAGE) - 1, ++ lh.cmdline_size - (sizeof (LINUX_IMAGE) - 1)); ++ ++ lh.cmd_line_ptr = (grub_uint32_t)(grub_uint64_t)linux_cmdline; ++ ++ handover_offset = lh.handover_offset; ++ ++ start = (lh.setup_sects + 1) * 512; ++ len = grub_file_size(file) - start; ++ ++ kernel_mem = grub_efi_allocate_pages(lh.pref_address, ++ BYTES_TO_PAGES(lh.init_size)); ++ ++ if (!kernel_mem) ++ kernel_mem = grub_efi_allocate_pages_max(0x3fffffff, ++ BYTES_TO_PAGES(lh.init_size)); ++ ++ if (!kernel_mem) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate kernel")); ++ goto fail; ++ } ++ ++ if (grub_file_seek (file, start) == (grub_off_t) -1) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ goto fail; ++ } ++ ++ if (grub_file_read (file, kernel_mem, len) != len && !grub_errno) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ } ++ ++ if (grub_errno == GRUB_ERR_NONE) ++ { ++ grub_loader_set (grub_linuxefi_boot, grub_linuxefi_unload, 0); ++ loaded = 1; ++ lh.code32_start = (grub_uint32_t)(grub_uint64_t) kernel_mem; ++ } ++ ++ memcpy(params, &lh, 2 * 512); ++ ++ params->type_of_loader = 0x21; ++ ++ fail: ++ ++ if (file) ++ grub_file_close (file); ++ ++ if (grub_errno != GRUB_ERR_NONE) ++ { ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ } ++ ++ if (linux_cmdline && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(lh.cmdline_size + 1)); ++ ++ if (kernel_mem && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); ++ ++ if (params && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); ++ ++ return grub_errno; ++} ++ ++static grub_command_t cmd_linux, cmd_initrd; ++ ++GRUB_MOD_INIT(linuxefi) ++{ ++ cmd_linux = ++ grub_register_command ("linuxefi", grub_cmd_linux, ++ 0, N_("Load Linux.")); ++ cmd_initrd = ++ grub_register_command ("initrdefi", grub_cmd_initrd, ++ 0, N_("Load initrd.")); ++ my_mod = mod; ++} ++ ++GRUB_MOD_FINI(linuxefi) ++{ ++ grub_unregister_command (cmd_linux); ++ grub_unregister_command (cmd_initrd); ++} +Index: b/include/grub/efi/efi.h +=================================================================== +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -40,6 +40,9 @@ + void * + EXPORT_FUNC(grub_efi_allocate_pages) (grub_efi_physical_address_t address, + grub_efi_uintn_t pages); ++void * ++EXPORT_FUNC(grub_efi_allocate_pages_max) (grub_efi_physical_address_t max, ++ grub_efi_uintn_t pages); + void EXPORT_FUNC(grub_efi_free_pages) (grub_efi_physical_address_t address, + grub_efi_uintn_t pages); + int +Index: b/include/grub/i386/linux.h +=================================================================== +--- a/include/grub/i386/linux.h ++++ b/include/grub/i386/linux.h +@@ -141,6 +141,7 @@ + grub_uint64_t setup_data; + grub_uint64_t pref_address; + grub_uint32_t init_size; ++ grub_uint32_t handover_offset; + } __attribute__ ((packed)); + + /* Boot parameters for Linux based on 2.6.12. This is used by the setup --- grub2-1.99.orig/debian/patches/ubuntu_blacklist_1440x900x32.patch +++ grub2-1.99/debian/patches/ubuntu_blacklist_1440x900x32.patch @@ -0,0 +1,26 @@ +Description: Blacklist 1440x900x32 from VBE preferred mode handling +Author: Colin Watson +Bug-Ubuntu: https://bugs.launchpad.net/bugs/701111 +Forwarded: no +Last-Update: 2011-03-04 + +Index: b/grub-core/video/i386/pc/vbe.c +=================================================================== +--- a/grub-core/video/i386/pc/vbe.c ++++ b/grub-core/video/i386/pc/vbe.c +@@ -873,6 +873,15 @@ + || vbe_mode_info.y_resolution > height) + /* Resolution exceeds that of preferred mode. */ + continue; ++ ++ /* Blacklist 1440x900x32 from preferred mode handling until a ++ better solution is available. This mode causes problems on ++ many Thinkpads. See: ++ https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/701111 */ ++ if (vbe_mode_info.x_resolution == 1440 && ++ vbe_mode_info.y_resolution == 900 && ++ vbe_mode_info.bits_per_pixel == 32) ++ continue; + } + else + { --- grub2-1.99.orig/debian/kernel/zz-update-grub +++ grub2-1.99/debian/kernel/zz-update-grub @@ -0,0 +1,19 @@ +#! /bin/sh +set -e + +which update-grub >/dev/null 2>&1 || exit 0 + +set -- $DEB_MAINT_PARAMS +mode="${1#\'}" +mode="${mode%\'}" +case $0:$mode in + # Only run on postinst configure and postrm remove, to avoid wasting + # time by calling update-grub multiple times on upgrade and removal. + # Also run if we have no DEB_MAINT_PARAMS, in order to work with old + # kernel packages. + */postinst.d/*:|*/postinst.d/*:configure|*/postrm.d/*:|*/postrm.d/*:remove) + exec update-grub + ;; +esac + +exit 0 --- grub2-1.99.orig/debian/grub.d/05_debian_theme +++ grub2-1.99/debian/grub.d/05_debian_theme @@ -0,0 +1,162 @@ +#!/bin/sh +set -e + +# grub-mkconfig helper script. +# Copyright (C) 2010 Alexander Kurtz +# +# GRUB 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 3 of the License, or +# (at your option) any later version. +# +# GRUB 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 GRUB. If not, see . + +# Include the GRUB helper library for grub-mkconfig. +. /usr/lib/grub/grub-mkconfig_lib + +# We want to work in /boot/grub/ only. +test -d "${GRUB_PREFIX}"; cd "${GRUB_PREFIX}" + +# Set the location of a possibly necessary cache file for the background image. +# NOTE: This MUST BE A DOTFILE to avoid confusing it with user-defined images. +BACKGROUND_CACHE=".background_cache" + +set_default_theme(){ + # Set a monochromatic theme for Ubuntu. + echo "${1}set menu_color_normal=white/black" + echo "${1}set menu_color_highlight=black/light-gray" + + if [ -e /lib/plymouth/themes/default.grub ]; then + sed "s/^/${1}/" /lib/plymouth/themes/default.grub + fi +} + +set_background_image(){ + # Step #1: Search all available output modes ... + local output + for output in ${GRUB_TERMINAL_OUTPUT}; do + if [ "x$output" = "xgfxterm" ]; then + break + fi + done + + # ... and check if we are able to display a background image at all. + if ! [ "x${output}" = "xgfxterm" ]; then + return 1 + fi + + # Step #2: Check if the specified background image exists. + if ! [ -f "${1}" ]; then + return 2 + fi + + # Step #3: Search the correct GRUB module for our background image. + local reader + case "${1}" in + *.jpg|*.JPG|*.jpeg|*.JPEG) reader="jpeg";; + *.png|*.PNG) reader="png";; + *.tga|*.TGA) reader="tga";; + *) return 3;; # Unknown image type. + esac + + # Step #4: Check if the necessary GRUB module is available. + if ! [ -f "${reader}.mod" ]; then + return 4 + fi + + # Step #5: Check if GRUB can read the background image directly. + # If so, we can remove the cache file (if any). Otherwise the backgound + # image needs to be cached under /boot/grub/. + if is_path_readable_by_grub "${1}"; then + rm --force "${BACKGROUND_CACHE}.jpeg" \ + "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga" + elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then + set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}" + else + return 5 + fi + + # Step #6: Prepare GRUB to read the background image. + if ! prepare_grub_to_access_device "`${grub_probe} --target=device "${1}"`"; then + return 6 + fi + + # Step #7: Everything went fine, print out a message to stderr ... + echo "Found background image: ${1}" >&2 + + # ... and write our configuration snippet to stdout. Use the colors + # desktop-base specified. If we're using a user-defined background, use + # the default colors since we've got no idea how the image looks like. + # If loading the background image fails, use the default theme. + echo "insmod ${reader}" + echo "if background_image `make_system_path_relative_to_its_root "${1}"`; then" + if [ -n "${2}" ]; then + echo " set color_normal=${2}" + fi + if [ -n "${3}" ]; then + echo " set color_highlight=${3}" + fi + if [ -z "${2}" ] && [ -z "${3}" ]; then + echo " true" + fi + echo "else" + set_default_theme " " + echo "fi" +} + +# Earlier versions of grub-pc copied the default background image to /boot/grub +# during postinst. Remove those obsolete images if they haven't been touched by +# the user. They are still available under /usr/share/images/desktop-base/ if +# desktop-base is installed. +while read checksum background; do + if [ -f "${background}" ] && [ "x`sha1sum "${background}"`" = "x${checksum} ${background}" ]; then + echo "Removing old background image: ${background}" >&2 + rm "${background}" + fi +done < /dev/null || echo Debian` +GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" +GRUB_CMDLINE_LINUX="" + +# Uncomment to enable BadRAM filtering, modify to suit your needs +# This works with Linux (no patch required) and with any kernel that obtains +# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) +#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" + +# Uncomment to disable graphical terminal (grub-pc only) +#GRUB_TERMINAL=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `vbeinfo' +#GRUB_GFXMODE=640x480 + +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +#GRUB_DISABLE_RECOVERY="true" + +# Uncomment to get a beep at grub start +#GRUB_INIT_TUNE="480 440 1" --- grub2-1.99.orig/debian/legacy/update-grub +++ grub2-1.99/debian/legacy/update-grub @@ -0,0 +1,1095 @@ +#!/bin/bash +# +# Insert a list of installed kernels in a grub config file +# Copyright 2001 Wichert Akkerman +# Copyright (C) 2007,2008 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 3 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 GRUB. If not, see . +# +# Contributors: +# Jason Thomas +# David B.Harris +# Marc Haber +# Crispin Flowerday + +# Abort on errors +set -e + +host_os=`uname -s | tr '[A-Z]' '[a-z]'` + +abort() { + message=$@ + + echo >&2 + echo -e "$message" >&2 + echo >&2 + exit 1 +} + +find_grub_dir () +{ + echo -n "Searching for GRUB installation directory ... " >&2 + + for d in /boot/grub /boot/boot/grub ; do + if [ -d "$d" ] ; then + grub_dir="$d" + break + fi + done + + if [ -z "$grub_dir" ] ; then + abort "No GRUB directory found.\n To create a template run 'mkdir /boot/grub' first.\n To install grub, install it manually or try the 'grub-install' command.\n ### Warning, grub-install is used to change your MBR. ###" + else + echo "found: $grub_dir" >&2 + fi + + echo $grub_dir +} + +# This function was borrowed from grub2/util/update-grub_lib.in +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 + + # This function never prints trailing slashes (so that its output can be + # appended a slash unconditionally). Each slash in $dir is considered a + # preceding slash, and therefore the root directory is an empty string. + if [ "$dir" = "/" ] ; then + dir="" + fi + + echo $path | sed -e "s,^$dir,,g" +} + +# The grub installation directory +grub_dir=$(find_grub_dir) + +# Full path to the device.map +device_map=$grub_dir/device.map + +find_device () +{ + if ! test -e ${device_map} ; then + echo quit | grub --batch --no-floppy --device-map=${device_map} > /dev/null + fi + grub-probe --device-map=${device_map} -t device $1 2> /dev/null +} + +# Usage: convert_raid1 os_device +# Checks if os_device is a software raid1. +# If so, converts to first physical device in array. +convert_raid1 () +{ + case $1 in + /dev/md[0-9] | /dev/md/[0-9]) + : ;; # Continue + *) + return 1 ;; + esac + + [ -x /sbin/mdadm ] || return 1 + + # Check that the raid device is raid1 + raidlevel=$(mdadm -D -b $1 | grep "^ARRAY" | \ + sed "s/^.*level=//" | cut -d" " -f1) + [ "$raidlevel" = "raid1" ] || return 1 + + # Take only the first device that makes up the raid + raiddev=$(mdadm -D $1 | grep -A1 "Number" | grep "dev" \ + | sed "s/^.*\(\/dev\/.*\)$/\1/") + [ -n "$raiddev" ] || return 1 + + echo $raiddev + return 0 +} + +# Usage: convert os_device +# Convert an OS device to the corresponding GRUB drive. +convert () { + if ! test -e ${device_map} ; then + echo quit | grub --batch --no-floppy --device-map=${device_map} > /dev/null + fi + GRUB_LEGACY_0_BASED_PARTITIONS=1 grub-probe --device-map=${device_map} -t drive -d "$1" 2> /dev/null || { + echo "warning: grub-probe can't find drive for $1." >&2 + tmp_map=$(mktemp -t device.map.XXXXXXXX) + grub-mkdevicemap --device-map=${tmp_map} --no-floppy >/dev/null 2>&1 || true + GRUB_LEGACY_0_BASED_PARTITIONS=1 grub-probe --device-map=${tmp_map} -t drive -d "$1" || { + rm -f ${tmp_map} + return 1 + } + echo "Please check ${device_map}, you might have to regenerate it with grub-mkdevicemap." >&2 + rm -f ${tmp_map} + } +} + +# Usage: convert_default os_device +# Convert an OS device to the corresponding GRUB drive. +convert_default () { + # Check if device is software raid1 array + if tmp_dev=$(convert_raid1 $1 2>/dev/null) ; then + : # Use device returned by convert_raid1 + else + tmp_dev=$1 + fi + + convert $tmp_dev +} + +## Configuration Options + +# Full path to the menu.lst +menu_file_basename=menu.lst +menu_file=$grub_dir/$menu_file_basename + +# Full path to the default file +default_file_basename=default +default_file=$grub_dir/$default_file_basename + +# the device for the / filesystem +root_device=$(find_device "/") + +# loop-AES arranges things so that /dev/loop/X can be our root device, but +# the initrds that Linux uses don't like that. +case ${root_device} in + /dev/loop/*|/dev/loop[0-9]) + root_device=`losetup ${root_device} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` + ;; +esac + +# the device for the /boot filesystem +boot_device=$(find_device "/boot") + +# where grub looks for the kernels at boot time +kernel_dir=`make_system_path_relative_to_its_root /boot` + +# the "-t abstraction" check is a workaround untill #484297 is fixed +if abstraction=`grub-probe -t abstraction --device ${root_device} 2> /dev/null` && [ "$abstraction" = "" ] && \ + root_uuid=`grub-probe --device-map=${device_map} --device ${root_device} --target=fs_uuid 2> /dev/null` && \ + test -e "/dev/disk/by-uuid/${root_uuid}" ; then + linux_root_device=UUID=${root_uuid} +else + linux_root_device=${root_device} +fi + +# Default kernel options, overidden by the kopt statement in the menufile. +kopt="root=$linux_root_device ro" + +# Title +title=$(lsb_release --short --description 2>/dev/null) || title="Ubuntu" + +# should update-grub remember the default entry +updatedefaultentry="false" + +# Drive(in GRUB terms) where the kernel is located. Overridden by the +# groot statement in menufile. +grub_root_device=$(convert_default "$boot_device") + +# should grub create the alternative boot options in the menu + alternative="true" + +# should grub lock the alternative boot options in the menu + lockalternative="false" + +# additional options to use with the default boot option, but not with the +# alternatives + defoptions="quiet splash" + +# should grub lock the old kernels + lockold="false" + +# Xen hypervisor options to use with the default Xen boot option + xenhopt="" + +# Xen Linux kernel options to use with the default Xen boot option + xenkopt="console=tty0" + +# options to use with the alternative boot options + altoptions="(recovery mode) single" + +# controls howmany kernels are listed in the config file, +# this does not include the alternative kernels + howmany="all" + +# should grub create a memtest86 entry + memtest86="true" + +# should grub add "savedefault" to default boot options + savedefault="false" + +# stores the command line arguments + command_line_arguments=$1 + +# does this version of grub support the quiet option? +if [ -f ${grub_dir}/installed-version ] && dpkg --compare-versions `cat ${grub_dir}/installed-version` ge 0.97-11ubuntu4; then + supports_quiet=true +else + supports_quiet=false +fi + +# read user configuration +if test -f "/etc/default/grub" ; then + . /etc/default/grub +fi + +# Default options to use in a new config file. This will only be used if $menu_file +# doesn't already exist. Only edit the lines between the two "EOF"s. The others are +# part of the script. +newtemplate=$(tempfile) +cat > "$newtemplate" <&2 +if [ -f "$default_file" ] ; then + echo "found: $default_file" >&2 +else + echo "Generating $default_file file and setting the default boot entry to 0" >&2 + if [ -f /usr/lib/grub-legacy/grub-set-default ] ; then + /usr/lib/grub-legacy/grub-set-default $1 + else + grub-set-default $1 + fi +fi + +# Make sure we use the standard sorting order +LC_COLLATE=C +# Magic markers we use +start="### BEGIN AUTOMAGIC KERNELS LIST" +end="### END DEBIAN AUTOMAGIC KERNELS LIST" + +startopt="## ## Start Default Options ##" +endopt="## ## End Default Options ##" + +# Extract options from config file +ExtractMenuOpt() +{ + opt=$1 + + sed -ne "/^$start\$/,/^$end\$/ { + /^$startopt\$/,/^$endopt\$/ { + /^# $opt=/ { + s/^# $opt=\(.*\)\$/\1/ + p + } + } + }" $menu +} + +GetMenuOpts() +{ + opt=$1 + + sed -ne "/^$start\$/,/^$end\$/ { + /^$startopt\$/,/^$endopt\$/ { + /^# $opt=/ { + p + } + } + }" $menu +} + +ExtractMenuOpts() +{ + opt=$1 + + GetMenuOpts $opt | sed "s/^# $opt=\(.*\)\$/\1=\"\2\"/" +} + +GetMenuOpt() +{ + opt=$1 + value=$2 + + [ -z "$(GetMenuOpts "$opt")" ] || value=$(ExtractMenuOpt "$opt") + + echo $value +} + +# Compares two version strings A and B +# Returns -1 if AB +# This compares version numbers of the form +# 2.4.14.2 > 2.4.14 +# 2.4.14random = 2.4.14-random > 2.4.14-ac10 > 2.4.14 > 2.4.14-pre2 > +# 2.4.14-pre1 > 2.4.13-ac99 +CompareVersions() +{ + local sedexp="s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|trunk\)/~\1/g" + local a=`echo $1 | sed -e "$sedexp"` + local b=`echo $2 | sed -e "$sedexp"` + if [ "$a" = "$b" ] ; then + echo 0 + elif dpkg --compare-versions "$a" gt "$b" ; then + echo 1 + else + echo -1 + fi +} + +# looks in the directory specified for an initrd image with the version specified +FindInitrdName() +{ + # strip trailing slashes + directory=$(echo $1 | sed -e 's#/*$##') + version=$2 + + # initrd + # initrd.img + # initrd-lvm + # .*.gz + + initrdName="" + names="initrd initrd.img initrd-lvm" + compressed="gz" + + for n in $names ; do + # make sure we haven't already found it + if [ -z "$initrdName" ] ; then + if [ -f "$directory/$n$version" ] ; then + initrdName="$n$version" + break + else + for c in $compressed ; do + if [ -f "$directory/$n$version.$c" ] ; then + initrdName="$n$version.$c" + break + fi + done + fi + else + break + fi + done + + # return the result + echo $initrdName +} + +FindXenHypervisorVersions () +{ + version=$1 + + if [ -f "/var/lib/linux-image-$version/xen-versions" ]; then + ret="$(cat /var/lib/linux-image-$version/xen-versions)" + fi + + echo $ret +} + +get_kernel_opt() +{ + kernel_version=$1 + + version=$(echo $kernel_version | sed 's/^[^0-9]*//') + version=$(echo $version | sed 's/[-\+\.]/_/g') + if [ -n "$version" ] ; then + while [ -n "$version" ] ; do + currentOpt="$(eval "echo \${kopt_$version}")" + if [ -n "$currentOpt" ] ; then + break + fi + version=$(echo $version | sed 's/_\?[^_]*$//') + done + fi + + if [ -z "$currentOpt" ] ; then + currentOpt=$kopt + fi + + echo $currentOpt +} + +write_kernel_entry() +{ + local kernel_version; kernel_version=$1; shift + local recovery_desc; recovery_desc=$1; shift + local lock_alternative; lock_alternative=$1; shift + local grub_root_device; grub_root_device=$1; shift + local kernel; kernel=$1; shift + local kernel_options; kernel_options=$1; shift + local recovery_suffix; recovery_suffix=$1; shift + local initrd; initrd=$1; shift + local savedefault; savedefault=$1; shift + local lockold; lockold=$1; shift + local hypervisor + if [ -n "$1" ]; then + # Hypervisor. + hypervisor=$1; shift + local hypervisor_image; hypervisor_image=$1; shift + local hypervisor_version; hypervisor_version=$1; shift + local hypervisor_options; hypervisor_options=$1; shift + fi + + local grub_root_type + case "$grub_root_device" in + [^A-Za-z0-9]*) grub_root_type='root' ;; + *) grub_root_type='uuid' ;; + esac + + echo -n "title " >> $buffer + + if [ -n "$hypervisor" ]; then + echo -n "$hypervisor $hypervisor_version / " >> $buffer + fi + + echo -n "$title" >> $buffer + if [ -n "$kernel_version" ]; then + echo -n ", " >> $buffer + # memtest86 is not strictly a kernel + if ! echo "$kernel_version" | grep -q ^memtest86; then + echo -n "kernel " >> $buffer + fi + echo -n "$kernel_version" >> $buffer + fi + if [ -n "$recovery_desc" ]; then + echo -n " $recovery_desc" >> $buffer + fi + echo >> $buffer + + # lock the alternative options + if test x"$lock_alternative" = x"true" ; then + echo "lock" >> $buffer + fi + # lock the old entries + if test x"$lockold" = x"true" ; then + echo "lock" >> $buffer + fi + + echo "$grub_root_type $grub_root_device" >> $buffer + + echo -n "kernel " >> $buffer + if [ -n "$hypervisor" ]; then + echo -n "$hypervisor_image" >> $buffer + if [ -n "$hypervisor_options" ]; then + echo -n " $hypervisor_options" >> $buffer + fi + echo >> $buffer + echo -n "module " >> $buffer + fi + echo -n "$kernel" >> $buffer + if [ -n "$kernel_options" ]; then + echo -n " $kernel_options" >> $buffer + fi + if [ -n "$recovery_desc" ]; then + echo -n " $recovery_suffix" >> $buffer + fi + echo >> $buffer + + if [ -n "$initrd" ]; then + if [ -n "$hypervisor" ]; then + echo -n "module " >> $buffer + else + echo -n "initrd " >> $buffer + fi + echo "$initrd" >> $buffer + fi + + if [ ! -n "$recovery_desc" -a x"$supports_quiet" = x"true" ]; then + echo "quiet" >> $buffer + fi + + if test x"$savedefault" = x"true" ; then + echo "savedefault" >> $buffer + fi + echo >> $buffer +} + + +echo -n "Testing for an existing GRUB $menu_file_basename file ... " >&2 + +# Test if our menu file exists +if [ -f "$menu_file" ] ; then + menu="$menu_file" + rm -f $newtemplate + unset newtemplate + echo "found: $menu_file" >&2 + cp -f "$menu_file" "$menu_file~" +else + # if not ask user if they want us to create one + menu="$menu_file" + echo >&2 + echo >&2 + if [ "-y" = "$command_line_arguments" ] ; then + echo "Warning: ignoring deprecated -y option." >&2 + fi + echo >&2 + echo "Generating $menu_file" >&2 + cat "$newtemplate" > $menu_file + rm -f $newtemplate + unset newtemplate +fi + +# Extract the kernel options to use +kopt=$(GetMenuOpt "kopt" "$kopt") + +# Set the kernel 2.6 option only for fresh install +test -z "$(GetMenuOpt "kopt" "")" && kopt_2_6="root=$linux_root_device ro" + +# Extract options for specific kernels +opts="$(ExtractMenuOpts "\(kopt_[[:alnum:]_]\+\)")" +test -z "$opts" || eval "$opts" +CustomKopts=$(GetMenuOpts "\(kopt_[[:alnum:]_]\+\)") + +# Extract the grub root +grub_root_device=$(GetMenuOpt "groot" "$grub_root_device") + +# Extract the old recovery value +alternative=$(GetMenuOpt "recovery" "$alternative") + +# Extract the alternative value +alternative=$(GetMenuOpt "alternative" "$alternative") + +# Extract the lockalternative value +lockalternative=$(GetMenuOpt "lockalternative" "$lockalternative") + +# Extract the additional default options +defoptions=$(GetMenuOpt "defoptions" "$defoptions") + +# Extract the lockold value +lockold=$(GetMenuOpt "lockold" "$lockold") + +# Extract Xen hypervisor options +xenhopt=$(GetMenuOpt "xenhopt" "$xenhopt") + +# Extract Xen Linux kernel options +xenkopt=$(GetMenuOpt "xenkopt" "$xenkopt") + +# Extract the howmany value +howmany=$(GetMenuOpt "howmany" "$howmany") + +# Extract the memtest86 value +memtest86=$(GetMenuOpt "memtest86" "$memtest86") + + +# Extract the updatedefaultentry option +updatedefaultentry=$(GetMenuOpt "updatedefaultentry" "$updatedefaultentry") + +# Extract the savedefault option +savedefault=$(GetMenuOpt "savedefault" "$savedefault") + +# Generate the menu options we want to insert +buffer=$(tempfile) +echo $start >> $buffer +echo "## lines between the AUTOMAGIC KERNELS LIST markers will be modified" >> $buffer +echo "## by the debian update-grub script except for the default options below" >> $buffer +echo >> $buffer +echo "## DO NOT UNCOMMENT THEM, Just edit them to your needs" >> $buffer +echo >> $buffer +echo "## ## Start Default Options ##" >> $buffer + +echo "## default kernel options" >> $buffer +echo "## default kernel options for automagic boot options" >> $buffer +echo "## If you want special options for specific kernels use kopt_x_y_z" >> $buffer +echo "## where x.y.z is kernel version. Minor versions can be omitted." >> $buffer +echo "## e.g. kopt=root=/dev/hda1 ro" >> $buffer +echo "## kopt_2_6_8=root=/dev/hdc1 ro" >> $buffer +echo "## kopt_2_6_8_2_686=root=/dev/hdc2 ro" >> $buffer +echo "# kopt=$kopt" >> $buffer +if [ -n "$CustomKopts" ] ; then + echo "$CustomKopts" >> $buffer +elif [ -n "$kopt_2_6" ] && [ "$kopt" != "$kopt_2_6" ]; then + echo "# kopt_2_6=$kopt_2_6" >> $buffer +fi +echo >> $buffer + +echo "## default grub root device" >> $buffer +echo "## e.g. groot=(hd0,0)" >> $buffer +echo "# groot=$grub_root_device" >> $buffer +echo >> $buffer + +echo "## should update-grub create alternative automagic boot options" >> $buffer +echo "## e.g. alternative=true" >> $buffer +echo "## alternative=false" >> $buffer +echo "# alternative=$alternative" >> $buffer +echo >> $buffer + +echo "## should update-grub lock alternative automagic boot options" >> $buffer +echo "## e.g. lockalternative=true" >> $buffer +echo "## lockalternative=false" >> $buffer +echo "# lockalternative=$lockalternative" >> $buffer +echo >> $buffer + +echo "## additional options to use with the default boot option, but not with the" >> $buffer +echo "## alternatives" >> $buffer +echo "## e.g. defoptions=vga=791 resume=/dev/hda5" >> $buffer +echo "# defoptions=$defoptions" >> $buffer +echo >> $buffer + +echo "## should update-grub lock old automagic boot options" >> $buffer +echo "## e.g. lockold=false" >> $buffer +echo "## lockold=true" >> $buffer +echo "# lockold=$lockold" >> $buffer +echo >> $buffer + +echo "## Xen hypervisor options to use with the default Xen boot option" >> $buffer +echo "# xenhopt=$xenhopt" >> $buffer +echo >> $buffer + +echo "## Xen Linux kernel options to use with the default Xen boot option" >> $buffer +echo "# xenkopt=$xenkopt" >> $buffer +echo >> $buffer + +echo "## altoption boot targets option" >> $buffer +echo "## multiple altoptions lines are allowed" >> $buffer +echo "## e.g. altoptions=(extra menu suffix) extra boot options" >> $buffer +echo "## altoptions=(recovery) single" >> $buffer + +if ! grep -q "^# altoptions" $menu ; then + echo "# altoptions=$altoptions" >> $buffer +else + grep "^# altoptions" $menu >> $buffer +fi +echo >> $buffer + +echo "## controls how many kernels should be put into the $menu_file_basename" >> $buffer +echo "## only counts the first occurence of a kernel, not the" >> $buffer +echo "## alternative kernel options" >> $buffer +echo "## e.g. howmany=all" >> $buffer +echo "## howmany=7" >> $buffer +echo "# howmany=$howmany" >> $buffer +echo >> $buffer + + +echo "## should update-grub create memtest86 boot option" >> $buffer +echo "## e.g. memtest86=true" >> $buffer +echo "## memtest86=false" >> $buffer +echo "# memtest86=$memtest86" >> $buffer +echo >> $buffer + +echo "## should update-grub adjust the value of the default booted system" >> $buffer +echo "## can be true or false" >> $buffer +echo "# updatedefaultentry=$updatedefaultentry" >> $buffer +echo >> $buffer + +echo "## should update-grub add savedefault to the default options" >> $buffer +echo "## can be true or false" >> $buffer +echo "# savedefault=$savedefault" >> $buffer +echo >> $buffer + +echo "## ## End Default Options ##" >> $buffer +echo >> $buffer + +echo -n "Searching for splash image ... " >&2 +current_splash=`grep '^splashimage=' ${menu_file} || true` +grub_dir_rel=`make_system_path_relative_to_its_root $grub_dir` +splashimage_path="splashimage=${grub_root_device}/${grub_dir_rel##${kernel_dir}}/splash.xpm.gz" +if [ `sed -e "/^$start/,/^$end/d" $menu_file | grep -c '^splashimage='` != "0" ] ; then + #checks for splashscreen defined outside the autoupdated part + splashimage=$(grep '^splashimage=' ${menu_file}) + echo "found: ${splashimage##*=}" >&2 + echo >&2 +elif [ -f "${grub_dir}/splash.xpm.gz" ] && [ "$current_splash" = "" ]; then + echo "found: /boot/grub/splash.xpm.gz" >&2 + echo "$splashimage_path" >> $buffer + echo >> $buffer +elif [ -f "${grub_dir}/splash.xpm.gz" ] && [ "$current_splash" = "$splashimage_path" ]; then + echo "found: /boot/grub/splash.xpm.gz" >&2 + echo "$splashimage_path" >> $buffer + echo >> $buffer +elif [ "$current_splash" != "" ] && [ "$current_splash" != "$splashimage_path" ]; then + echo "found but preserving previous setting: $(grep '^splashimage=' ${menu_file})" >&2 + echo "$current_splash" >> $buffer + echo >> $buffer +else + echo "none found, skipping ..." >&2 +fi + +xen0Kernels="" +# First kernels with xen0 support. +for ver in `grep -l CONFIG_XEN=y /boot/config* | sed -e s%/boot/config-%%`; do + if ! grep -q CONFIG_XEN_PRIVILEGED_GUEST=y /boot/config-$ver ; then + continue + fi + # ver is a kernel version + kern="/boot/vmlinuz-$ver" + if [ -r $kern ] ; then + newerKernels="" + for i in $xen0Kernels ; do + res=$(CompareVersions "$kern" "$i") + if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then + newerKernels="$newerKernels $kern $i" + kern="" + else + newerKernels="$newerKernels $i" + fi + done + if [ "$kern" != "" ] ; then + newerKernels="$newerKernels $kern" + fi + xen0Kernels="$newerKernels" + fi +done + +sortedKernels="" +for kern in $(/bin/ls -1vr /boot | grep -v "dpkg-*" | grep "^vmlinuz-") ; do + kern="/boot/$kern" + newerKernels="" + for i in $sortedKernels ; do + res=$(CompareVersions "$kern" "$i") + if [ "$kern" != "" ] && [ "$res" -gt 0 ] ; then + newerKernels="$newerKernels $kern $i" + kern="" + else + newerKernels="$newerKernels $i" + fi + done + if [ "$kern" != "" ] ; then + newerKernels="$newerKernels $kern" + fi + sortedKernels="$newerKernels" +done + +if test -f "/boot/vmlinuz.old" ; then + sortedKernels="/boot/vmlinuz.old $sortedKernels" +fi +if test -f "/boot/vmlinuz" ; then + sortedKernels="/boot/vmlinuz $sortedKernels" +fi + +hypervisors="" +for hyp in /boot/xen-*.gz; do + if [ ! -h "$hyp" ] && [ -f "$hyp" ]; then + hypervisors="$hypervisors `basename "$hyp"`" + fi +done + +#Finding the value the default line +use_grub_set_default="false" +if test "$updatedefaultentry" = "true" ; then + defaultEntryNumber=$(sed -ne 's/^[[:blank:]]*default[[:blank:]]*\(.*\).*/\1/p' $menu) + + if [ "$defaultEntryNumber" = "saved" ] ; then + defaultEntryNumber=$(sed 'q' "$grub_dir/default") + use_grub_set_default="true" + fi + + if test -n "$defaultEntryNumber"; then + defaultEntryNumberPlusOne=$(expr $defaultEntryNumber \+ 1); + defaultEntry=$(grep "^[[:blank:]]*title" $menu | sed -ne "${defaultEntryNumberPlusOne}p" | sed -ne ";s/^[[:blank:]]*title[[:blank:]]*//p") + defaultEntry=$(echo $defaultEntry | sed -e "s/[[:blank:]]*$//") # don't trust trailing blanks + else + notChangeDefault="yes" + fi +else + notChangeDefault="yes" +fi + +## heres where we start writing out the kernel entries +counter=0 + +case "$grub_root_device" in +[^A-Za-z0-9]*) grub_root_type='root' ;; +*) grub_root_type='uuid' ;; +esac + +grub2name="${kernel_dir}/grub/core.img" +if [ "$LET_US_TRY_GRUB_2" = "true" ] \ + && test -f /boot/grub/core.img ; then + echo "Found GRUB 2: $grub2name" >&2 + cat >> $buffer << EOF +title Chainload into GRUB 2 +$grub_root_type $grub_root_device +kernel $grub2name + +title `echo ───────────────────────────────────────────────────────────────────── | iconv -f utf-8 -t cp437` +root + +title When you have verified GRUB 2 works, you can use this command to +root + +title complete the upgrade: upgrade-from-grub-legacy +root + +title `echo ───────────────────────────────────────────────────────────────────── | iconv -f utf-8 -t cp437` +root + +EOF +fi + + +# Xen entries first. +for kern in $xen0Kernels ; do + if test ! x"$howmany" = x"all" ; then + if [ $counter -gt $howmany ] ; then + break + fi + fi + + kernelName=$(basename $kern) + kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//') + + initrdName=$(FindInitrdName "/boot" "$kernelVersion") + initrd="" + + kernel=$kernel_dir/$kernelName + if [ -n "$initrdName" ] ; then + initrd=$kernel_dir/$initrdName + fi + + kernelVersion=$(echo $kernelVersion | sed -e 's/^-//') + currentOpt=$(get_kernel_opt $kernelVersion) + + hypervisorVersions=$(FindXenHypervisorVersions "$kernelVersion") + + found= + for hypervisorVersion in $hypervisorVersions; do + hypervisor="$kernel_dir/xen-$hypervisorVersion.gz" + if [ -e "$hypervisor" ]; then + found=1 + + echo "Found Xen hypervisor $hypervisorVersion, kernel: $kernel" >&2 + + write_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \ + "$kernel" "$currentOpt $xenkopt" '' "$initrd" "$savedefault" '' \ + Xen "$hypervisor" "$hypervisorVersion" "$xenhopt" + counter=$(($counter + 1)) + fi + done + + if [ -z $found ]; then + for hypervisor in $hypervisors; do + hypVersion=`basename "$hypervisor" .gz | sed s%xen-%%` + + echo "Found Xen hypervisor $hypVersion, kernel: $kernel" >&2 + + write_kernel_entry "$kernelVersion" '' '' "$grub_root_device" \ + "$kernel" "$currentOpt $xenkopt" '' "$initrd" "$savedefault" '' \ + Xen "$kernel_dir/$hypervisor" "$hypVersion" "$xenhopt" + counter=$(($counter + 1)) + done + fi +done + +for kern in $sortedKernels ; do + counter=$(($counter + 1)) + if test ! x"$howmany" = x"all" ; then + if [ $counter -gt $howmany ] ; then + break + fi + fi + kernelName=$(basename $kern) + kernelVersion=$(echo $kernelName | sed -e 's/vmlinuz//') + initrdName=$(FindInitrdName "/boot" "$kernelVersion") + initrd="" + + kernel=$kernel_dir/$kernelName + if [ -n "$initrdName" ] ; then + initrd=$kernel_dir/$initrdName + fi + + echo "Found kernel: $kernel" >&2 + + if [ "$kernelName" = "vmlinuz" ]; then + if [ -L "/boot/$kernelName" ]; then + kernelVersion=`readlink -f "/boot/$kernelName"` + kernelVersion=$(echo $kernelVersion | sed -e 's/.*vmlinuz-//') + kernelVersion="$kernelVersion Default" + else + kernelVersion="Default" + fi + fi + if [ "$kernelName" = "vmlinuz.old" ]; then + if [ -L "/boot/$kernelName" ]; then + kernelVersion=`readlink -f "/boot/$kernelName"` + kernelVersion=$(echo $kernelVersion | sed -e 's/.*vmlinuz-//') + kernelVersion="$kernelVersion Previous" + else + kernelVersion="Previous" + fi + fi + kernelVersion=$(echo $kernelVersion | sed -e 's/^-//') + + currentOpt=$(get_kernel_opt $kernelVersion) + + do_lockold=$lockold + # do not lockold for the first entry + [ $counter -eq 1 ] && do_lockold=false + + write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" "$kernel" \ + "$currentOpt $defoptions" "" "$initrd" "$savedefault" "$do_lockold" + + # insert the alternative boot options + if test ! x"$alternative" = x"false" ; then + # for each altoptions line do this stuff + sed -ne 's/# altoptions=\(.*\)/\1/p' $buffer | while read line; do + descr=$(echo $line | sed -ne 's/\(([^)]*)\)[[:space:]]\(.*\)/\1/p') + suffix=$(echo $line | sed -ne 's/\(([^)]*)\)[[:space:]]\(.*\)/\2/p') + + test x"$lockalternative" = x"true" && do_lockold=false + write_kernel_entry "$kernelVersion" "$descr" "$lockalternative" \ + "$grub_root_device" "$kernel" "$currentOpt" "$suffix" "$initrd" \ + "$savedefault" "$do_lockold" + + done + fi +done + +memtest86names="memtest86 memtest86+" + +if test ! x"$memtest86" = x"false" ; then + for name in $memtest86names ; do + if test -f "/boot/$name.bin" ; then + kernelVersion="$name" + kernel="$kernel_dir/$name.bin" + currentOpt= + initrd= + + echo "Found kernel: $kernel" >&2 + + write_kernel_entry "$kernelVersion" "" "" "$grub_root_device" \ + "$kernel" "$currentOpt" "" "$initrd" "false" "" + fi + done +fi + +echo $end >> $buffer + +echo -n "Updating $menu ... " >&2 +# Insert the new options into the menu +if ! grep -q "^$start" $menu ; then + cat $buffer >> $menu + rm -f $buffer +else + umask 077 + sed -e "/^$start/,/^$end/{ + /^$start/r $buffer + d + } + " $menu > $menu.new + cat $menu.new > $menu + rm -f $buffer $menu.new +fi + +# Function to update the default value +set_default_value() { + if [ "$use_grub_set_default" = "true" ] ; then + if [ -f /usr/lib/grub-legacy/grub-set-default ] ; then + /usr/lib/grub-legacy/grub-set-default $1 + else + grub-set-default $1 + fi + else + value="$1" + newmenu=$(tempfile) + sed -e "s/^[[:blank:]]*default[[:blank:]]*[[:digit:]]*\(.*\)/default ${value}\1/;b" $menu > $newmenu + cat $newmenu > $menu + rm -f $newmenu + unset newmenu + fi +} + +#Updating the default number +if [ "$LET_US_TRY_GRUB_2" = "true" ] && test -f /boot/grub/core.img ; then + set_default_value "0" +elif test -z "$notChangeDefault"; then + newDefaultNumberPlusOne=$(grep "^[[:blank:]]*title[[:blank:]]*" $menu | grep -n "${defaultEntry}" | cut -f1 -d ":" | sed -ne "1p") + if test -z "$newDefaultNumberPlusOne"; then + echo "Previous default entry removed, resetting to 0">&2 + set_default_value "0" + elif test -z "$defaultEntry"; then + echo "Value of default value matches no entry, resetting to 0" >&2 + set_default_value "0" + else + if test "$newDefaultNumberPlusOne" = "1"; then + newDefaultNumber="0" + else + newDefaultNumber=$(expr $newDefaultNumberPlusOne - 1) + fi + echo "Updating the default booting kernel">&2 + set_default_value "$newDefaultNumber" + fi +fi + +echo "done" >&2 +echo >&2 --- grub2-1.99.orig/debian/legacy/upgrade-from-grub-legacy +++ grub2-1.99/debian/legacy/upgrade-from-grub-legacy @@ -0,0 +1,42 @@ +#!/bin/bash -e + +if test ! -f /boot/grub/core.img ; then + echo -e "\ncore.img doesn't exist, trying to create it.\n" >&2 + grub-install --no-floppy --grub-setup=/bin/true "(hd0)" > /dev/null +fi + +echo RESET grub-pc/install_devices | debconf-communicate >/dev/null + +# Pretend we're upgrading grub-pc. This will make our postinst DTRT. +UPGRADE_FROM_GRUB_LEGACY=1 \ + /var/lib/dpkg/info/grub-pc.postinst configure dummy-version + +if test ! -f /boot/grub/grub.cfg ; then + echo -e "\nCalling update-grub to generate grub.cfg\n" >&2 + update-grub || cat << EOF +Failed to generate /boot/grub/grub.cfg but GRUB2 has been already installed to +your MBR. +THIS MEANS YOU HAVE CURRENTLY AN UNBOOTABLE SYSTEM. +Either fix the error from update-grub and run $0 again +or install old grub again and run grub-install from it to have again +grub-legacy in your MBR. +EOF +fi + +# These never contain any valuable information, and they aren't useful for +# boot anymore, since we just overwrote MBR/PBR. +rm -f /boot/grub/{{xfs,reiserfs,e2fs,fat,jfs,minix}_stage1_5,stage{1,2}} +# Remove marker file used to indicate that grub-install was run rather than +# this script. Since stage2 has been removed, we don't need this any more. +rm -f /boot/grub/grub2-installed + +cat << EOF + +GRUB Legacy has been removed, but its configuration files have been preserved, +since this script cannot determine if they contain valuable information. If +you would like to remove the configuration files as well, use the following +command: + + rm -f /boot/grub/menu.lst* + +EOF