Reapply fix from 2008-07-28 which was accidentally reverted; also
perform the same fix to a similar check in same function.
* disk/raid.c (grub_raid_scan_device): Do not abort when two disks
with the same number are found, just use issue a warning with
grub_dprintf(), as this error has been reported to be non-fatal.
* fs/hfs.c (grub_hfs_strncasecmp): Integrate into ...
(grub_hfs_cmp_catkeys): ... this. Don't assume strings to be
zero-terminated, rely only on the strlen value. Fix comparison
of strings differing in length.
* loader/i386/linux.c (grub_cmd_linux): Check for zImage before
checking for abi version. Improve error messages on BIOS to notify
user about `linux16' command.
Leak fixes
* kern/disk.c (grub_disk_cache_store): Invalidate previous cache
in case of collision
* disk/scsi.c (grub_scsi_open): free scsi in case of error
* loader/i386/linux.c (grub_cmd_linux): Parse "vga=" parameter and
set `vid_mode' accordingly.
(grub_linux_boot): Process `vid_mode' and set video mode.
Make the format of Environment Block plain text. The boot loader
part is not tested well yet.
* util/grub-editenv.c (DEFAULT_ENVBLK_SIZE): New macro.
(buffer): Removed.
(envblk): Likewise.
(usage): Remove "info" and "clear". Add "unset". Update the
description of "set", as this does not delete variables any
longer.
(create_envblk_file): Complete rewrite.
(open_envblk_file): Likewise.
(cmd_info): Removed.
(cmd_list): Likewise.
(cmd_set): Likewise.
(cmd_clear): Likewise.
(list_variables): New function.
(write_envblk): Likewise.
(set_variables): Likewise.
(unset_variables): Likewise.
(main): Complete rewrite.
* commands/loadenv.c (buffer): Removed.
(envblk): Likewise.
(open_envblk_file): New function.
(read_envblk_file): Complete rewrite.
(grub_cmd_load_env): Likewise.
(grub_cmd_list_env): Likewise.
(struct blocklist): New struct.
(free_blocklists): New function.
(check_blocklists): Likewise.
(write_blocklists): Likewise.
(grub_cmd_save_env): Complete rewrite.
* include/grub/lib/envblk.h (GRUB_ENVBLK_SIGNATURE): Replaced with
a plain text signature.
(GRUB_ENVBLK_MAXLEN): Removed.
(struct grub_envblk): Complete rewrite.
(grub_envblk_find): Removed.
(grub_envblk_insert): Likewise.
(grub_envblk_open): New prototype.
(grub_envblk_set): Likewise.
(grub_envblk_delete): Put const to VALUE.
(grub_envblk_iterate): Put const to NAME and VALUE.
(grub_envblk_close): New prototype.
(grub_envblk_buffer): New inline function.
(grub_envblk_size): Likewise.
* lib/envblk.c: Include grub/mm.h.
(grub_env_find): Removed.
(grub_envblk_open): New function.
(grub_envblk_close): Likewise.
(escaped_value_len): Likewise.
(find_next_line): Likewise.
(grub_envblk_insert): Removed.
(grub_envblk_set): New function.
(grub_envblk_delete): Complete rewrite.
(grub_envblk_iterate): Likewise.
* kern/env.c (grub_env_context_open): Added an argument to specify
whether a new context inherits exported variables from current
one. This is useful when making a sandbox to interpret a config
file.
All callers updated.
* include/grub/env.h (grub_env_context_open): Updated the prototype.
* normal/main.c (grub_normal_execute): Added an argument
BATCH to specify if an interactive interface should be provided
after reading a config file.
All callers updated.
(read_command_list): Prevent being executed twice.
(read_fs_list): Likewise.
* include/grub/normal.h (grub_normal_execute):
Bugfixes in multiboot for bugs uncovered by solaris kernel.
* loader/i386/multiboot_elfxx.c (grub_multiboot_load_elf): Corrected
limit detection.
Use vaddr of correct segment for entry_point.
* util/hostdisk.c (read_device_map): Use grub_util_get_disk_size
instead of stat in mingw environment.
* util/misc.c (grub_millisleep): Use Sleep in mingw environment.
* aclocal.m4 (grub_CHECK_LINK_DIR): New function.
* configure.ac: Use grub_CHECK_LINK_DIR to determine whether to use
AC_CONFIG_LINKS.
* loader/i386/linux.c: Include `<grub/video.h>' and
`<grub/i386/pc/vbe.h>'..
(grub_linux_setup_video): New function. Loosely based on the EFI one.
(grub_linux32_boot): Attempt to configure video settings with
grub_linux_setup_video().
(grub_rescue_cmd_linux): Set noreturn=0 in grub_loader_set, in order
to avoid grub_console_fini() which would step out of graphical mode
unconditionally.
* term/gfxterm.c (draw_cursor): Ensure character is redrawn.
(grub_gfxterm_putchar): Extract pairs of identical calls to
draw_cursor out of conditional blocks.
* loader/i386/multiboot.c (code_size): New variable.
(grub_multiboot): Define offsets by adding to `code_size' rather
than substracting from `grub_multiboot_payload_size'. Provide
4-byte alignment to MBI and others by increasing
`boot_loader_name_length' appropiately.
* loader/i386/multiboot_elfxx.c
(CONCAT(grub_multiboot_load_elf, XX)): Initialize `code_size'.
Fix display issue on terminals with screen size other than 80x25
(e.g. gfxterm with resolution higher than 640x480).
* normal/main.c (grub_normal_init_page): Display title text in a
position relative to the center of the terminal instead of reliing
on a hardcoded offset.
Filter /etc/grub.d/10_* so that only add-ons for native kernels are
installed.
* Makefile.in (host_kernel): New variable.
* conf/common.rmk (grub-mkconfig_SCRIPTS): Conditionalize all 10_*.in
scripts instead of just the windows one.
* configure.ac: Initialize and AC_SUBST `host_kernel'.
* partmap/pc.c (pc_partition_map_iterate): Skip over invalid BSD partitions
or if there's no space for the disk label and print the partition number on a
invalid magic.
* configure.ac: Only test -mcmodel=large option in x86_64-efi, also add
another option -mno-red-zone.
* commands/handler.c: Change module description.
* kern/handler.c: Add missing space at the end of description line.
* kern/list.c: Likewise.
Move more components to the relocation area, and fix mbi pointer
handling to use the destination rather than the origin (thanks to
Vladimir Serbinenko for spotting).
* loader/i386/multiboot.c (mbi_dest): New variable.
(grub_multiboot_boot): Use `mbi_dest' instead of `mbi'.
(grub_multiboot): Put cmdline, boot_loader_name and mbi in the
relocation area.