Merge branch 'mainline' into relocator

This commit is contained in:
phcoder 2009-09-20 19:38:16 +02:00
commit 8f2e29a2a3
99 changed files with 3333 additions and 732 deletions

684
ChangeLog
View file

@ -1,3 +1,683 @@
2009-09-16 Vladimir Serbinenko <phcoder@gmail.com>
* mmap/mmap.c (grub_cmd_badram): Fix off-by-one error.
2009-09-16 Robert Millan <rmh.grub@aybabtu.com>
* aclocal.m4 (AC_LANG_PROGRAM): New macro. Overrides stock
AC_LANG_PROGRAM from autoconf.
(grub_ASM_USCORE, grub_PROG_OBJCOPY_ABSOLUTE): Add missing
prototypes (fixes warning).
* configure.ac: Add `-Werror' to TARGET_CFLAGS unless
`--disable-werror' was used.
2009-09-16 Robert Millan <rmh.grub@aybabtu.com>
* partmap/msdos.c (pc_partition_map_iterate): Fix possible use of
uninitialized `lastaddr'.
2009-09-15 Vladimir Serbinenko <phcoder@gmail.com>
* partmap/msdos.c (pc_partition_map_iterate): Detect and break loops.
2009-09-14 Colin Watson <cjwatson@ubuntu.com>
* commands/test.c (get_fileinfo): Return immediately if
grub_fs_probe fails.
2009-09-14 José Martínez <xosemp@gmail.com>
* commands/acpi.c (grub_cmd_acpi): Fix loading ACPI tables from file.
2009-09-14 Colin Watson <cjwatson@ubuntu.com>
* util/grub.d/30_os-prober.in: Cope with Windows 7 in os-prober
output.
2009-09-13 Robert Millan <rmh.grub@aybabtu.com>
* configure.ac: Remove --enable-grub-pe2elf. Only build
grub-pe2elf when needed by the build system itself.
* conf/common.rmk: Remove $(enable_grub_pe2elf) check.
2009-09-12 Robert Millan <rmh.grub@aybabtu.com>
* configure.ac: Bump version to 1.97~beta3.
* docs/version.texi: Likewise.
2009-09-12 Robert Millan <rmh.grub@aybabtu.com>
* video/i386/pc/vbe.c (grub_vbe_get_video_mode_info): Move packed
mode special handling (grub_vbe_bios_set_dac_palette_width() call)
from here ...
* loader/i386/linux.c [GRUB_MACHINE_PCBIOS]
(grub_linux_setup_video): ... to here (with some adjustments).
2009-09-12 Robert Millan <rmh.grub@aybabtu.com>
Fix memory corruption issue (spotted by Colin Watson).
* kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette): Fix bug
causing returned size to be stored in an incorrect memory location.
Fix use of uninitialized value when storing the returned size.
2009-09-12 Yves Blusseau <blusseau@zetam.org>
Change clean rules to properly remove files
* genmk.rb: add new clean rules
* Makefile.in (clean): add the new targets
(mostlyclean): likewise
2009-09-11 Colin Watson <cjwatson@ubuntu.com>
* include/grub/ntfs.h (struct grub_fshelp_node): Change `size'
to grub_uint64_t.
* fs/ntfs.c (init_file): Understand 64-bit sizes for
non-resident files.
2009-09-11 Colin Watson <cjwatson@ubuntu.com>
* configure.ac: Don't look for help2man when cross-compiling. Fixes
part of bug #27349.
2009-09-10 Felix Zielcke <fzielcke@z-51.de>
* util/grub-mkconfig.in: Make the created config mode 400 and
print a warning if it fails.
2009-09-10 Robert Millan <rmh.grub@aybabtu.com>
* util/grub.d/40_custom.in: Ask user to type custom entries below
comment, rather than below 'exec tail' line.
2009-09-10 Colin Watson <cjwatson@ubuntu.com>
* util/grub.d/40_custom.in: Make sure that the explanatory text is
visible in grub.cfg.
2009-09-10 Colin Watson <cjwatson@ubuntu.com>
* util/grub.d/40_custom.in: Make it a little clearer how to use this
file.
2009-09-10 Felix Zielcke <fzielcke@z-51.de>
* docs/grub.cfg: Add an example menu entry for memtest86+.
2009-09-09 Felix Zielcke <fzielcke@z-51.de>
* config.guess: Update to latest version from config git.
* config.sub: Likewise.
2009-09-08 Colin Watson <cjwatson@ubuntu.com>
* script/sh/execute.c (grub_script_execute_cmdline): Set "?" in
unknown-command case. Fixes bug #27320.
2009-09-08 Felix Zielcke <fzielcke@z-51.de>
* kern/rescue_parser.c (grub_rescue_parse_line): Only suggest to try
`help' if the command exists.
2009-09-06 Robert Millan <rmh.grub@aybabtu.com>
* INSTALL: Require GCC 4.1.3 or later.
2009-09-06 Yves Blusseau <blusseau@zetam.org>
* Makefile.in (RMKFILES): add i386-qemu.rmk
(MAINTAINER_CLEANFILES): add $(srcdir)/DISTLIST $(srcdir)/config.h.in
$(srcdir)/stamp-h.in
2009-09-05 Robert Millan <rmh.grub@aybabtu.com>
* util/grub-probe.c (probe): Comment out buggy codepath, which
was unexpectedly enabled by Colin Watson's 2009-09-02 fix. This
should be re-enabled after 1.97.
2009-09-05 Felix Zielcke <fzielcke@z-51.de>
* gendistlist.sh: Add `grub-dumpdevtree' and `*.lua' to the list
find searches for.
2009-09-04 Vladimir Serbinenko <phcoder@gmail.com>
* loader/i386/xnu.c (grub_cpu_xnu_fill_devicetree): Remove
unnecessary calls to grub_error.
2009-09-04 Colin Watson <cjwatson@ubuntu.com>
* NEWS: Mention `keystatus' and Unicode fonts.
2009-09-04 Robert Millan <rmh.grub@aybabtu.com>
* configure.ac: Bump version to 1.97~beta2.
* docs/version.texi: Likewise.
2009-09-03 Colin Watson <cjwatson@ubuntu.com>
* configure.ac: By default, GCC 4.4 generates .eh_frame sections
containing unwind information in some cases where it previously did
not. Use -fno-dwarf2-cfi-asm if available to restore the old
behaviour. See http://patchwork.kernel.org/patch/8555/ for related
discussion.
2009-09-02 Yves BLUSSEAU <blusseau@zetam.org>
Embedding loadenv module into grub-emu
* conf/i386-pc.rmk (grub_emu_SOURCES): add lib/envblk.c and
commands/loadenv.c
* conf/i386-coreboot.rmk (grub_emu_SOURCES): Likewise
* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise
* conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise
* conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise
* conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise
2009-09-03 Magnus Granberg <zorry@ume.nu>
* aclocal.m4: Add grub_CHECK_PIE. It check if the compiler
include -fPIE in the default specs.
* configure.ac: Check if pie_possible is yes and add -fno-PIE
to TARGET_CFLAGS.
2009-09-03 Felix Zielcke <fzielcke@z-51.de>
* INSTALL: Note that GNU Bison 2.3 or later is required.
2009-09-03 Colin Watson <cjwatson@ubuntu.com>
* kern/i386/pc/startup.S: Fix typo.
2009-09-02 Vladimir Serbinenko <phcoder@gmail.com>
* efiemu/loadcore.c (SUFFIX (grub_efiemu_loadcore_load)): Fix style
according to GCS.
2009-09-02 Colin Watson <cjwatson@ubuntu.com>
* docs/grub.texi (Naming convention): Describe one-based partition
numbering.
(Device syntax): Likewise.
(File name syntax): Likewise.
(Block list syntax): Likewise.
(Making a GRUB bootable CD-ROM): Talk about grub.cfg rather than
menu.lst.
(File name syntax): Likewise.
(Command-line and menu entry commands): Document acpi, blocklist,
crc, export, insmod, keystatus, ls, set, and unset commands.
2009-09-02 Colin Watson <cjwatson@ubuntu.com>
* commands/keystatus.c (GRUB_MOD_INIT (keystatus)): Adjust summary
to avoid implying that only one of --shift, --ctrl, or --alt may be
used.
2009-09-02 Colin Watson <cjwatson@ubuntu.com>
* util/grub-probe.c (probe): Test st.st_mode using S_ISREG macro
rather than comparing against S_IFREG, which will almost never work.
2009-09-01 Vladimir Serbinenko <phcoder@gmail.com>
* commands/loadenv.c (check_blocklists): Fix off-by-one error.
(write_blocklists): Likewise.
2009-09-01 Colin Watson <cjwatson@ubuntu.com>
* script/lua/grub_lua.h (fputs): Supply a format string as the first
argument to grub_printf.
2009-09-01 Felix Zielcke <fzielcke@z-51.de>
* genmk.rb: Add quotes around $(TARGET_OBJ2ELF) to cope with
non GNU test.
2009-08-30 Vladimir Serbinenko <phcoder@gmail.com>
* kern/file.c (grub_file_read): Spelling fix
2009-08-30 Vladimir Serbinenko <phcoder@gmail.com>
* loader/i386/bsdXX.c (SUFFIX (grub_freebsd_load_elfmodule)): Fix
loading of headers in some cases.
2009-08-30 Robert Millan <rmh.grub@aybabtu.com>
* configure.ac: Bump version to 1.97~beta1.
* docs/version.texi: Likewise.
2009-08-29 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/i386/xnu.h: Add license header.
include grub/err.h explicitly.
2009-08-29 Robert Millan <rmh.grub@aybabtu.com>
* util/grub.d/10_freebsd.in: Detect `ufs1' and `ufs2' and map them
to `ufs' in the vfs.root.mountfrom kernel parameter.
2009-08-29 Robert Millan <rmh.grub@aybabtu.com>
* term/i386/pc/serial.c: Include `<grub/machine/memory.h>'.
[GRUB_MACHINE_PCBIOS] (serial_hw_io_addr): Macroify initialization
value (0x0400 -> GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR).
[! GRUB_MACHINE_PCBIOS] (GRUB_SERIAL_PORT_NUM): Calculate using
`ARRAY_SIZE' macro.
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
* kern/file.c (grub_file_read): Check offset.
* fs/hfs.c (grub_hfs_read_file): Remove unnecessary offset check.
* fs/jfs.c (grub_jfs_read_file): Likewise.
* fs/ntfs.c (grub_ntfs_read): Likewise.
* fs/reiserfs.c (grub_reiserfs_read): Likewise.
* fs/minix.c (grub_minix_read_file): Correct offset check.
* fs/ufs.c (grub_ufs_read_file): Likewise.
2009-08-28 Colin Watson <cjwatson@ubuntu.com>
* term/i386/pc/console.c (bios_data_area): Cast
GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR explicitly.
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
1-bit optimised blitters.
* include/grub/fbblit.h (grub_video_fbblit_replace_32bit_1bit): New
prototype.
(grub_video_fbblit_replace_24bit_1bit): Likewise.
(grub_video_fbblit_replace_16bit_1bit): Likewise.
(grub_video_fbblit_replace_8bit_1bit): Likewise.
(grub_video_fbblit_blend_XXXA8888_1bit): Likewise.
(grub_video_fbblit_blend_XXX888_1bit): Likewise.
(grub_video_fbblit_blend_XXX565_1bit): Likewise.
* video/fb/fbblit.c (grub_video_fbblit_replace_32bit_1bit): New
function.
(grub_video_fbblit_replace_24bit_1bit): Likewise.
(grub_video_fbblit_replace_16bit_1bit): Likewise.
(grub_video_fbblit_replace_8bit_1bit): Likewise.
(grub_video_fbblit_blend_XXXA8888_1bit): Likewise.
(grub_video_fbblit_blend_XXX888_1bit): Likewise.
(grub_video_fbblit_blend_XXX565_1bit): Likewise.
* video/fb/video_fb.c (common_blitter): Use 1-bit optimised blitters
when possible.
* video/video.c (grub_video_get_blit_format): Return
GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED if bpp = 1.
2009-08-28 Colin Watson <cjwatson@ubuntu.com>
* normal/cmdline.c (grub_cmdline_get): Supply a format string as
the first argument to grub_printf.
2009-08-28 Colin Watson <cjwatson@ubuntu.com>
2009-08-28 Robert Millan <rmh.grub@aybabtu.com>
Add `getkeystatus' terminal method. Add a new `keystatus' command
to query it.
* include/grub/term.h (GRUB_TERM_STATUS_SHIFT,
GRUB_TERM_STATUS_CTRL, GRUB_TERM_STATUS_ALT): Definitions for
modifier key bitmasks.
(struct grub_term_input): Add `getkeystatus' member.
(grub_getkeystatus): Add prototype.
* kern/term.c (grub_getkeystatus): New function.
* include/grub/i386/pc/memory.h
(GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR): New macro.
(struct grub_machine_bios_data_area): Define necessary parts of BIOS
Data Area layout.
* term/i386/pc/console.c (grub_console_getkeystatus): New function.
(grub_console_term_input): Set `getkeystatus' member.
* term/usb_keyboard.c (grub_usb_hid): Macroify HID protocol
constants.
(grub_usb_keyboard_getreport): Likewise.
(grub_usb_keyboard_checkkey): Likewise.
(grub_usb_keyboard_getkeystatus): New function.
(grub_usb_keyboard_term): Set `getkeystatus' member.
* commands/keystatus.c: New file.
* conf/common.rmk (pkglib_MODULES): Add keystatus.mod.
(keystatus_mod_SOURCES): New variable.
(keystatus_mod_CFLAGS): Likewise.
(keystatus_mod_LDFLAGS): Likewise.
* conf/i386-coreboot.rmk (grub_emu_SOURCES): Add
commands/keystatus.c.
* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Likewise.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise.
2009-08-28 Vladimir Serbinenko <phcoder@gmail.com>
Split befs.mod and afs.mod into *_be.mod and *.mod
* conf/common.rmk (grub_probe_SOURCES): Add afs_be.c and befs_be.c.
(grub_fstest_SOURCES): Likewise.
(pkglib_MODULES): Add afs_be.mod and befs_be.mod.
(afs_be_mod_SOURCES): New variable.
(afs_be_mod_CFLAGS): Likewise.
(afs_be_mod_LDFLAGS): Likewise.
(befs_be_mod_SOURCES): Likewise.
(befs_be_mod_CFLAGS): Likewise.
(befs_be_mod_LDFLAGS): Likewise.
* conf/i386-coreboot.rmk (grub_emu_SOURCES): Add afs_be.c and befs_be.c.
* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-pc.rmk (grub_setup_SOURCES): Likewise.
(grub_emu_SOURCES): Likewise.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise.
* fs/afs_be.c: New file.
* fs/befs_be.c: New file.
* fs/afs.c (GRUB_AFS_FSNAME_SUFFIX): New definition.
(GRUB_AFS_FSNAME): Use GRUB_AFS_FSNAME_SUFFIX.
(U16): Replaced with ...
(grub_afs_to_cpu16): ...this. All users updated.
(U32): Replaced with ...
(grub_afs_to_cpu32): ...this. All users updated.
(U64): Replaced with ...
(grub_afs_to_cpu64): ...this. All users updated.
(GRUB_AFS_BO_LITTLE_ENDIAN): Remove.
(GRUB_AFS_BO_BIG_ENDIAN): Likewise.
(grub_afs_validate_sblock): Check only one endianness.
(GRUB_MOD_INIT (befs)) [MODE_BIGENDIAN && MODE_BFS]: Rename to ..
(GRUB_MOD_INIT (befs_be)) [MODE_BIGENDIAN && MODE_BFS]: ... this.
(GRUB_MOD_INIT (afs)) [MODE_BIGENDIAN && !MODE_BFS]: Rename to ..
(GRUB_MOD_INIT (afs_be)) [MODE_BIGENDIAN && !MODE_BFS]: ... this.
(GRUB_MOD_FINI (befs)) [MODE_BIGENDIAN && MODE_BFS]: Rename to ..
(GRUB_MOD_FINI (befs_be)) [MODE_BIGENDIAN && MODE_BFS]: ... this.
(GRUB_MOD_FINI (afs)) [MODE_BIGENDIAN && !MODE_BFS]: Rename to ..
(GRUB_MOD_FINI (afs_be)) [MODE_BIGENDIAN && !MODE_BFS]: ... this.
2009-08-26 Bean <bean123ch@gmail.com>
* fs/xfs.c (GRUB_XFS_INO_INOINAG): Replace 1L with 1LL to support
64-bit number.
(GRUB_XFS_FSB_TO_BLOCK): Likewise.
(grub_xfs_inode_block): Change return type to grub_uint64_t.
(grub_xfs_read_inode): Change type of block to grub_uint64_t.
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
NetBSD memory map support.
* include/grub/i386/bsd.h (NETBSD_BTINFO_MEMMAP): New definition.
(grub_netbsd_btinfo_mmap_header): New structure.
(grub_netbsd_btinfo_mmap_entry): Likewise.
* loader/i386/bsd.c (grub_netbsd_boot): Pass memory map.
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
Enable bsd.mod on coreboot.
* conf/i386-coreboot.rmk (pkglib_MODULES): Add bsd.mod.
(bsd_mod_SOURCES): New variable.
(bsd_mod_CFLAGS): Likewise.
(bsd_mod_LDFLAGS): Likewise.
(bsd_mod_ASFLAGS): Likewise.
* loader/i386/bsd.c [!GRUB_MACHINE_PCBIOS]: Fix includes.
(grub_bsd_get_device) [!GRUB_MACHINE_PCBIOS]: Set *biosdev to 0xff.
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
Cleanup NetBSD root support.
* loader/i386/bsd.c (grub_netbsd_boot): Remove call to
grub_bsd_get_device.
Fix typo.
2009-08-25 Felix Zielcke <fzielcke@z-51.de>
* util/grub.d/00_header.in: Move check for the video backend of
gfxterm from here ...
* util/grub-mkconfig.in: ... to here. Enable gfxterm if there's
a suitable video backend.
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
Fix breakage in grub-setup.
* util/i386/pc/grub-setup.c (setup): Use "part_msdos" instead of
"msdos_partition_map".
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
Fix breakage in normal/auth.c.
* normal/auth.c (grub_iswordseparator): New function.
2009-08-25 Vladimir Serbinenko <phcoder@gmail.com>
Authentication support.
* commands/password.c: New file.
* conf/common.rmk (pkglib_MODULES): Add password.mod.
(password_mod_SOURCES): New variable.
(password_mod_CFLAGS): Likewise.
(password_mod_LDFLAGS): Likewise.
(normal_mod_SOURCES): Add normal/auth.c.
* conf/i386-coreboot.rmk (grub_emu_SOURCES): Add commands/password.c and
normal/auth.c.
* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/i386-pc.rmk (grub_emu_SOURCES): Likewise.
* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/sparc64-ieee1275.rmk (grub_emu_SOURCES): Likewise.
* conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise.
* include/grub/auth.h: New file.
* include/grub/err.h (grub_err_t): New enum value
GRUB_ERR_ACCESS_DENIED.
* include/grub/menu.h (grub_menu_entry): New fields 'restricted' and
'users'.
* include/grub/normal.h (grub_cmdline_get): New argument 'history'.
* normal/cmdline.c (grub_cmdline_get): New argument 'history'. All
users updated.
* normal/auth.c: New file.
* normal/main.c (grub_normal_add_menu_entry): Handle --users option.
(grub_cmdline_run): Don't allow to go to command line without
authentication.
* normal/menu.c (grub_menu_execute_entry): Handle restricted entries.
* normal/menu_entry.c (grub_menu_entry_run): Don't allow editing
menuentry without superuser rights.
* normal/menu_viewer.c (grub_menu_viewer_show_menu): Don't exit if
user isn't a superuser.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Save space by inlining misc.c functions.
* kern/misc.c (grub_iswordseparator): Made static.
* kern/misc.c (grub_strcat): Moved from here ...
* include/grub/misc.h (grub_strcat): ... here. Inlined.
* kern/misc.c (grub_strncat): Moved from here ...
* include/grub/misc.h (grub_strncat): ... here. Inlined.
* kern/misc.c (grub_strcasecmp): Moved from here ...
* include/grub/misc.h (grub_strcasecmp): ... here. Inlined.
* kern/misc.c (grub_strncasecmp): Moved from here ...
* include/grub/misc.h (grub_strncasecmp): ... here. Inlined.
* kern/misc.c (grub_isalpha): Moved from here ...
* include/grub/misc.h (grub_isalpha): ... here. Inlined.
* kern/misc.c (grub_isdigit): Moved from here ...
* include/grub/misc.h (grub_isdigit): ... here. Inlined.
* kern/misc.c (grub_isgraph): Moved from here ...
* include/grub/misc.h (grub_isgraph): ... here. Inlined.
* kern/misc.c (grub_tolower): Moved from here ...
* include/grub/misc.h (grub_tolower): ... here. Inlined.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
* script/sh/function.c (grub_script_function_find): Cut error message
not to flood terminal.
* script/sh/lexer.c (grub_script_yylex): Remove command line length
limit.
* script/sh/script.c (grub_script_arg_add): Duplicate string.
2009-08-24 Colin Watson <cjwatson@ubuntu.com>
* term/usb_keyboard.c (grub_usb_keyboard_getreport): Make
`report' grub_uint8_t *.
(grub_usb_keyboard_checkkey): Make `data' elements grub_uint8_t.
Use a 50-millisecond timeout rather than just repeating
grub_usb_keyboard_getreport 50 times.
(grub_usb_keyboard_getkey): Make `data' elements grub_uint8_t.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Rename *_partition_map to part_*
* partmap/acorn.c (grub_acorn_partition_map): Set name to 'part_acorn'.
* partmap/amiga.c (grub_amiga_partition_map): Set name to 'part_amiga'.
* partmap/apple.c (grub_apple_partition_map): Set name to 'part_apple'.
* partmap/gpt.c (grub_gpt_partition_map): Set name to 'part_gpt'.
All users updated.
* partmap/msdos.c (grub_msdos_partition_map): Set name to 'part_msdos'.
All users updated.
* partmap/sun.c (grub_sun_partition_map): Set name to 'part_sun'.
* util/grub-probe.c (probe_partmap): Don't transform partition name
to get module name.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Fix OpenBSD and NetBSD support.
* include/grub/i386/bsd.h (GRUB_BSD_TEMP_BUFFER): Change to resolve
memory address conflict.
(OPENBSD_MMAP_ACPI): New definition.
(OPENBSD_MMAP_NVS): Likewise.
* loader/i386/bsd.c (grub_openbsd_boot): Support OPENBSD_MMAP_ACPI
and OPENBSD_MMAP_NVS.
Add memory map terminator
Explicit cast when calling grub_unix_real_boot.
(grub_netbsd_boot): Explicit cast when calling grub_unix_real_boot.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Let user specify NetBSD root device.
* loader/i386/bsd.c (netbsd_root): New variable.
(netbsd_opts): New option 'root'.
(NETBSD_ROOT_ARG): New macro.
(grub_netbsd_boot): Use 'netbsd_root'.
(grub_bsd_unload): Free 'netbsd_root'.
(grub_cmd_netbsd): Fill 'netbsd_root'.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Support for 64-bit NetBSD.
* loader/i386/bsd.c (grub_bsd_load_elf): Apply correct mask to entry
point when booting non-FreeBSD.
2009-08-24 Vladimir Serbinenko <phcoder@gmail.com>
Support --no-smp and --no-acpi for NetBSD.
* include/grub/i386/bsd.h (NETBSD_AB_NOSMP): New definition.
(NETBSD_AB_NOACPI): Likewise.
* loader/i386/bsd.c (netbsd_opts): New entries no-smp and no-acpi.
(netbsd_flags): Add NETBSD_AB_NOSMP, NETBSD_AB_NOACPI.
2009-08-23 Vladimir Serbinenko <phcoder@gmail.com>
* fs/hfsplus.c (grub_hfsplus_mount): Don't ignore grub_hfsplus_read_file
errors.
(grub_hfsplus_btree_iterate_node): Don't ignore grub_hfsplus_read_file
errors. Call grub_error when needed.
2009-08-23 Vladimir Serbinenko <phcoder@gmail.com>
* commands/search.c (search_fs): Try searching without autoload first.
* util/grub-mkconfig_lib.in (prepare_grub_to_access_device): Load
filesystem module explicitly for faster booting.
2009-08-23 Colin Watson <cjwatson@ubuntu.com>
* util/grub-mkconfig.in: Export GRUB_DISABLE_OS_PROBER.
2009-08-23 Colin Watson <cjwatson@ubuntu.com>
* util/grub.d/30_os-prober.in: Disable os-prober if
`GRUB_DISABLE_OS_PROBER' was set to true.
2009-08-23 Robert Millan <rmh.grub@aybabtu.com>
* partmap/pc.c: Rename to ...
* partmap/msdos.c: ... this. Update all users.
(grub_pc_partition_map): Rename to ...
(grub_msdos_partition_map): ... this. Update all users.
* parttool/pcpart.c: Rename to ...
* parttool/msdospart.c: ... this. Update all users.
* include/grub/pc_partition.h: Rename to ...
* include/grub/msdos_partition.h: ... this. Update all users.
(grub_pc_partition_bsd_entry): Rename to ...
(grub_msdos_partition_bsd_entry): ... this. Update all users.
(grub_pc_partition_disk_label): Rename to ...
(grub_msdos_partition_disk_label): ... this. Update all users.
(grub_pc_partition_entry): Rename to ...
(grub_msdos_partition_entry): ... this. Update all users.
(grub_pc_partition_mbr): Rename to ...
(grub_msdos_partition_mbr): ... this. Update all users.
(grub_pc_partition): Rename to ...
(grub_msdos_partition): ... this. Update all users.
(grub_pc_partition_is_empty): Rename to ...
(grub_msdos_partition_is_empty): ... this. Update all users.
(grub_pc_partition_is_extended): Rename to ...
(grub_msdos_partition_is_extended): ... this. Update all users.
(grub_pc_partition_is_bsd): Rename to ...
(grub_msdos_partition_is_bsd): ... this. Update all users.
* conf/common.rmk (amiga_mod_SOURCES, amiga_mod_CFLAGS)
(amiga_mod_LDFLAGS, apple_mod_SOURCES, apple_mod_CFLAGS)
(apple_mod_LDFLAGS, msdos_mod_SOURCES, msdos_mod_CFLAGS)
(msdos_mod_LDFLAGS, sun_mod_SOURCES, sun_mod_CFLAGS)
(sun_mod_LDFLAGS, acorn_mod_SOURCES, acorn_mod_CFLAGS)
(acorn_mod_LDFLAGS, gpt_mod_SOURCES, gpt_mod_CFLAGS)
(gpt_mod_LDFLAGS): Rename to ...
(part_amiga_mod_SOURCES, part_amiga_mod_CFLAGS, part_amiga_mod_LDFLAGS)
(part_apple_mod_SOURCES, part_apple_mod_CFLAGS, part_apple_mod_LDFLAGS)
(part_msdos_mod_SOURCES, part_msdos_mod_CFLAGS, part_msdos_mod_LDFLAGS)
(part_sun_mod_SOURCES, part_sun_mod_CFLAGS, part_sun_mod_LDFLAGS)
(part_acorn_mod_SOURCES, part_acorn_mod_CFLAGS, part_acorn_mod_LDFLAGS)
(part_gpt_mod_SOURCES, part_gpt_mod_CFLAGS)
(part_gpt_mod_LDFLAGS): ... this.
(pkglib_MODULES): Prefix partition modules with `part_'. Rename
`pcpart.mod' to `msdospart.mod'.
(pcpart_mod_SOURCES, pcpart_mod_CFLAGS, pcpart_mod_LDFLAGS): Rename
to ...
(msdospart_mod_SOURCES, msdospart_mod_CFLAGS)
(msdospart_mod_LDFLAGS): ... this.
2009-08-23 Vladimir Serbinenko <phcoder@gmail.com>
* loader/i386/bsd.c (freebsd_opts): Rewritten to use extcmd.
(openbsd_opts): Likewise.
(netbsd_opts): Likewise.
(freebsd_flags): Added 0 terminator.
(openbsd_flags): Likewise.
(netbsd_flags): Likewise.
(grub_bsd_parse_flags): Rewritten to use extcmd. All users updated.
(grub_cmd_freebsd): Transformed into extended command.
(grub_cmd_openbsd): Likewise.
(grub_cmd_netbsd): Likewise.
(cmd_freebsd): Changed type to grub_extcmd_t.
(cmd_openbsd): Likewise.
(cmd_netbsd): Likewise.
(GRUB_MOD_INIT (bsd)): Register grub_cmd_freebsd, grub_cmd_netbsd and
grub_cmd_openbsd as extended commands.
(GRUB_MOD_FINI (bsd)): Use grub_unregister_extcmd for cmd_freebsd,
cmd_netbsd and cmd_openbsd
2009-08-22 Vladimir Serbinenko <phcoder@gmail.com> 2009-08-22 Vladimir Serbinenko <phcoder@gmail.com>
* commands/xnu_uuid.c (transform): Use grub_memcpy instead of memcpy. * commands/xnu_uuid.c (transform): Use grub_memcpy instead of memcpy.
@ -438,7 +1118,7 @@
2009-07-30 Vladimir Serbinenko <phcoder@gmail.com> 2009-07-30 Vladimir Serbinenko <phcoder@gmail.com>
* util/i386/pc/grub-setup.c (setup): Check that no partition is in * util/i386/pc/grub-setup.c (setup): Check that no partition is in
embeding zone, not only the first one. embedding zone, not only the first one.
2009-07-29 Joe Auricchio <jauricchio@gmail.com> 2009-07-29 Joe Auricchio <jauricchio@gmail.com>
@ -511,7 +1191,7 @@
instead of WORDS_BIGENDIAN. Use grub_le_to_cpu32(), so that the instead of WORDS_BIGENDIAN. Use grub_le_to_cpu32(), so that the
case of little endian words becomes just an optimization. case of little endian words becomes just an optimization.
Respect const modifier. Respect const modifier.
(md5_final): Use code that doesn't depend on endianess. (md5_final): Use code that doesn't depend on endianness.
* include/grub/misc.h (ALIGN_UP): Cast align to the type of addr * include/grub/misc.h (ALIGN_UP): Cast align to the type of addr
to avoid loss of upper bits if align is unsigned and shorter to avoid loss of upper bits if align is unsigned and shorter

View file

@ -11,9 +11,9 @@ GRUB depends on some software packages installed into your system. If
you don't have any of them, please obtain and install them before you don't have any of them, please obtain and install them before
configuring the GRUB. configuring the GRUB.
* GCC 2.95 or later * GCC 4.1.3 or later
* GNU Make * GNU Make
* GNU Bison * GNU Bison 2.3 or later
* GNU binutils 2.9.1.0.23 or later * GNU binutils 2.9.1.0.23 or later
* Other standard GNU/Unix tools * Other standard GNU/Unix tools
* Ruby 1.6 or later * Ruby 1.6 or later

View file

@ -111,7 +111,7 @@ enable_efiemu = @enable_efiemu@
### General variables. ### General variables.
RMKFILES = $(addprefix conf/,common.rmk i386-coreboot.rmk i386-efi.rmk \ RMKFILES = $(addprefix conf/,common.rmk i386-coreboot.rmk i386-efi.rmk \
i386-ieee1275.rmk i386-pc.rmk i386.rmk powerpc-ieee1275.rmk \ i386-qemu.rmk i386-ieee1275.rmk i386-pc.rmk i386.rmk powerpc-ieee1275.rmk \
sparc64-ieee1275.rmk x86_64-efi.rmk) sparc64-ieee1275.rmk x86_64-efi.rmk)
MKFILES = $(patsubst %.rmk,%.mk,$(RMKFILES)) MKFILES = $(patsubst %.rmk,%.mk,$(RMKFILES))
@ -128,7 +128,8 @@ MOSTLYCLEANFILES =
DISTCLEANFILES = config.status config.cache config.log config.h \ DISTCLEANFILES = config.status config.cache config.log config.h \
Makefile stamp-h include/grub/cpu include/grub/machine \ Makefile stamp-h include/grub/cpu include/grub/machine \
gensymlist.sh genkernsyms.sh build_env.mk gensymlist.sh genkernsyms.sh build_env.mk
MAINTAINER_CLEANFILES = $(srcdir)/configure $(addprefix $(srcdir)/,$(MKFILES)) MAINTAINER_CLEANFILES = $(srcdir)/configure $(addprefix $(srcdir)/,$(MKFILES)) \
$(srcdir)/DISTLIST $(srcdir)/config.h.in $(srcdir)/stamp-h.in
# The default target. # The default target.
all: all-local all: all-local
@ -325,10 +326,10 @@ uninstall:
rm -f $(DESTDIR)$(libdir)/grub/$$dest; \ rm -f $(DESTDIR)$(libdir)/grub/$$dest; \
done done
clean: clean: $(CLEAN_IMAGE_TARGETS) $(CLEAN_MODULE_TARGETS) $(CLEAN_UTILITY_TARGETS)
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
mostlyclean: clean mostlyclean: clean $(MOSTLYCLEAN_IMAGE_TARGETS) $(MOSTLYCLEAN_MODULE_TARGETS) $(MOSTLYCLEAN_UTILITY_TARGETS)
-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
distclean: mostlyclean distclean: mostlyclean

4
NEWS
View file

@ -1,5 +1,9 @@
New in 1.97 - : New in 1.97 - :
* Add `keystatus' command.
* Unicode fonts are now used by default.
* Add `hdparm' command. * Add `hdparm' command.
* Add support for getting the current date and time from CMOS as variables. * Add support for getting the current date and time from CMOS as variables.

45
aclocal.m4 vendored
View file

@ -1,3 +1,18 @@
dnl Redefine AC_LANG_PROGRAM with a "-Wstrict-prototypes -Werror"-friendly
dnl version. Patch submitted to bug-autoconf in 2009-09-16.
m4_define([AC_LANG_PROGRAM(C)],
[$1
int
main (void)
{
dnl Do *not* indent the following line: there may be CPP directives.
dnl Don't move the `;' right after for the same reason.
$2
;
return 0;
}])
dnl Check whether target compiler is working dnl Check whether target compiler is working
AC_DEFUN(grub_PROG_TARGET_CC, AC_DEFUN(grub_PROG_TARGET_CC,
[AC_MSG_CHECKING([whether target compiler is working]) [AC_MSG_CHECKING([whether target compiler is working])
@ -26,6 +41,7 @@ AC_DEFUN(grub_ASM_USCORE,
AC_MSG_CHECKING([if C symbols get an underscore after compilation]) AC_MSG_CHECKING([if C symbols get an underscore after compilation])
AC_CACHE_VAL(grub_cv_asm_uscore, AC_CACHE_VAL(grub_cv_asm_uscore,
[cat > conftest.c <<\EOF [cat > conftest.c <<\EOF
int func (int *);
int int
func (int *list) func (int *list)
{ {
@ -63,6 +79,7 @@ AC_DEFUN(grub_PROG_OBJCOPY_ABSOLUTE,
[AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) [AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses])
AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
[cat > conftest.c <<\EOF [cat > conftest.c <<\EOF
void cmain (void);
void void
cmain (void) cmain (void)
{ {
@ -413,3 +430,31 @@ else
[fi [fi
rm -rf testdir] rm -rf testdir]
]) ])
dnl Check if the C compiler supports `-fPIE'.
AC_DEFUN(grub_CHECK_PIE,[
[# Position independent executable.
pie_possible=yes]
AC_MSG_CHECKING([whether `$CC' has `-fPIE' as default])
# Is this a reliable test case?
AC_LANG_CONFTEST([[
#ifdef __PIE__
int main() {
return 0;
}
#else
#error NO __PIE__ DEFINED
#endif
]])
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
# `ac_compile' like this correct, after all?
if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then]
AC_MSG_RESULT([yes])
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
rm -f conftest.s
else
pie_possible=no]
AC_MSG_RESULT([no])
[fi]
])

View file

@ -74,7 +74,7 @@ grub_usb_control_msg (grub_usb_device_t dev,
return grub_errno; return grub_errno;
} }
/* Build a Setup packet. XXX: Endianess. */ /* Build a Setup packet. XXX: Endianness. */
setupdata.reqtype = reqtype; setupdata.reqtype = reqtype;
setupdata.request = request; setupdata.request = request;
setupdata.value = value; setupdata.value = value;

View file

@ -681,6 +681,9 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
table->size = size; table->size = size;
table->addr = buf; table->addr = buf;
playground_size += table->size; playground_size += table->size;
table->next = acpi_tables;
acpi_tables = table;
} }
} }

View file

@ -22,7 +22,7 @@
#include <grub/dl.h> #include <grub/dl.h>
#include <grub/device.h> #include <grub/device.h>
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/misc.h> #include <grub/misc.h>
#include <grub/mm.h> #include <grub/mm.h>
@ -60,7 +60,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
int argc, char **args) int argc, char **args)
{ {
grub_device_t dev; grub_device_t dev;
struct grub_pc_partition_mbr mbr; struct grub_msdos_partition_mbr mbr;
struct grub_partition *partition; struct grub_partition *partition;
grub_disk_addr_t first_sector; grub_disk_addr_t first_sector;
int numactive = 0; int numactive = 0;

81
commands/keystatus.c Normal file
View file

@ -0,0 +1,81 @@
/* keystatus.c - Command to check key modifier status. */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 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 <http://www.gnu.org/licenses/>.
*/
#include <grub/dl.h>
#include <grub/misc.h>
#include <grub/extcmd.h>
#include <grub/term.h>
static const struct grub_arg_option options[] =
{
{"shift", 's', 0, "check Shift key", 0, 0},
{"ctrl", 'c', 0, "check Control key", 0, 0},
{"alt", 'a', 0, "check Alt key", 0, 0},
{0, 0, 0, 0, 0, 0}
};
#define grub_cur_term_input grub_term_get_current_input ()
static grub_err_t
grub_cmd_keystatus (grub_extcmd_t cmd,
int argc __attribute__ ((unused)),
char **args __attribute__ ((unused)))
{
struct grub_arg_list *state = cmd->state;
int expect_mods = 0;
int mods;
if (state[0].set)
expect_mods |= GRUB_TERM_STATUS_SHIFT;
if (state[1].set)
expect_mods |= GRUB_TERM_STATUS_CTRL;
if (state[2].set)
expect_mods |= GRUB_TERM_STATUS_ALT;
/* Without arguments, just check whether getkeystatus is supported at
all. */
if (!grub_cur_term_input->getkeystatus)
return grub_error (GRUB_ERR_TEST_FAILURE, "false");
grub_dprintf ("keystatus", "expect_mods: %d\n", expect_mods);
if (!expect_mods)
return 0;
mods = grub_getkeystatus ();
grub_dprintf ("keystatus", "mods: %d\n", mods);
if (mods >= 0 && (mods & expect_mods) != 0)
return 0;
else
return grub_error (GRUB_ERR_TEST_FAILURE, "false");
}
static grub_extcmd_t cmd;
GRUB_MOD_INIT(keystatus)
{
cmd = grub_register_extcmd ("keystatus", grub_cmd_keystatus,
GRUB_COMMAND_FLAG_BOTH,
"keystatus [--shift] [--ctrl] [--alt]",
"Check key modifier status",
options);
}
GRUB_MOD_FINI(keystatus)
{
grub_unregister_extcmd (cmd);
}

View file

@ -242,7 +242,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
part_start = 0; part_start = 0;
buf = grub_envblk_buffer (envblk); buf = grub_envblk_buffer (envblk);
for (p = blocklists, index = 0; p; p = p->next, index += p->length) for (p = blocklists, index = 0; p; index += p->length, p = p->next)
{ {
char blockbuf[GRUB_DISK_SECTOR_SIZE]; char blockbuf[GRUB_DISK_SECTOR_SIZE];
@ -278,7 +278,7 @@ write_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
part_start = 0; part_start = 0;
index = 0; index = 0;
for (p = blocklists; p; p = p->next, index += p->length) for (p = blocklists; p; index += p->length, p = p->next)
{ {
if (grub_disk_write (disk, p->sector - part_start, if (grub_disk_write (disk, p->sector - part_start,
p->offset, p->length, buf + index)) p->offset, p->length, buf + index))

86
commands/password.c Normal file
View file

@ -0,0 +1,86 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 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 <http://www.gnu.org/licenses/>.
*/
#include <grub/auth.h>
#include <grub/list.h>
#include <grub/mm.h>
#include <grub/misc.h>
#include <grub/env.h>
#include <grub/normal.h>
#include <grub/dl.h>
static grub_dl_t my_mod;
static grub_err_t
check_password (const char *user,
void *password)
{
char entered[1024];
grub_memset (entered, 0, sizeof (entered));
if (!GRUB_GET_PASSWORD (entered, sizeof (entered) - 1))
return GRUB_ACCESS_DENIED;
if (grub_auth_strcmp (entered, password) != 0)
return GRUB_ACCESS_DENIED;
grub_auth_authenticate (user);
return GRUB_ERR_NONE;
}
static grub_err_t
grub_cmd_password (grub_command_t cmd __attribute__ ((unused)),
int argc, char **args)
{
grub_err_t err;
char *pass;
if (argc != 2)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Two arguments expected.");
pass = grub_strdup (args[1]);
if (!pass)
return grub_errno;
err = grub_auth_register_authentication (args[0], check_password, pass);
if (err)
{
grub_free (pass);
return err;
}
grub_dl_ref (my_mod);
return GRUB_ERR_NONE;
}
static grub_command_t cmd;
GRUB_MOD_INIT(password)
{
my_mod = mod;
cmd = grub_register_command ("password", grub_cmd_password,
"password USER PASSWORD",
"Set user password (plaintext). "
"Unrecommended and insecure.");
}
GRUB_MOD_FINI(password)
{
grub_unregister_command (cmd);
}

View file

@ -51,6 +51,7 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type)
{ {
int count = 0; int count = 0;
char *buf = NULL; char *buf = NULL;
grub_fs_autoload_hook_t saved_autoload;
auto int iterate_device (const char *name); auto int iterate_device (const char *name);
int iterate_device (const char *name) int iterate_device (const char *name)
@ -131,7 +132,22 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type)
return (found && var); return (found && var);
} }
grub_device_iterate (iterate_device); /* First try without autoloading if we're setting variable. */
if (var)
{
saved_autoload = grub_fs_autoload_hook;
grub_fs_autoload_hook = 0;
grub_device_iterate (iterate_device);
/* Restore autoload hook. */
grub_fs_autoload_hook = saved_autoload;
/* Retry with autoload if nothing found. */
if (grub_errno == GRUB_ERR_NONE && count == 0)
grub_device_iterate (iterate_device);
}
else
grub_device_iterate (iterate_device);
grub_free (buf); grub_free (buf);

View file

@ -88,6 +88,13 @@ test_parse (char **args, int *argn, int argc)
} }
fs = grub_fs_probe (dev); fs = grub_fs_probe (dev);
if (! fs)
{
grub_free (device_name);
grub_device_close (dev);
return;
}
pathname = grub_strchr (path, ')'); pathname = grub_strchr (path, ')');
if (! pathname) if (! pathname)
pathname = path; pathname = path;

View file

@ -17,9 +17,10 @@ grub_probe_SOURCES = util/grub-probe.c \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
partmap/pc.c partmap/apple.c partmap/sun.c partmap/gpt.c\ partmap/msdos.c partmap/apple.c partmap/sun.c partmap/gpt.c\
kern/fs.c kern/env.c fs/fshelp.c \ kern/fs.c kern/env.c fs/fshelp.c \
disk/raid.c disk/mdraid_linux.c disk/lvm.c grub_probe_init.c disk/raid.c disk/mdraid_linux.c disk/lvm.c grub_probe_init.c
@ -38,9 +39,10 @@ grub_fstest_SOURCES = util/grub-fstest.c util/hostfs.c util/misc.c \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c fs/befs.c \
fs/befs_be.c fs/tar.c \
\ \
kern/partition.c partmap/pc.c partmap/apple.c partmap/sun.c \ kern/partition.c partmap/msdos.c partmap/apple.c partmap/sun.c \
partmap/gpt.c \ partmap/gpt.c \
kern/fs.c kern/env.c fs/fshelp.c disk/raid.c \ kern/fs.c kern/env.c fs/fshelp.c disk/raid.c \
disk/raid5_recover.c disk/raid6_recover.c \ disk/raid5_recover.c disk/raid6_recover.c \
@ -117,21 +119,14 @@ bin_UTILITIES += grub-editenv
grub_editenv_SOURCES = util/grub-editenv.c lib/envblk.c util/misc.c kern/misc.c kern/err.c grub_editenv_SOURCES = util/grub-editenv.c lib/envblk.c util/misc.c kern/misc.c kern/err.c
CLEANFILES += grub-editenv CLEANFILES += grub-editenv
# for grub-pe2elf # Needed for genmk.rb to work
ifeq ($(enable_grub_pe2elf), yes) ifeq (0,1)
bin_UTILITIES += grub-pe2elf bin_UTILITIES += grub-macho2img grub-pe2elf
endif endif
grub_pe2elf_SOURCES = util/grub-pe2elf.c util/misc.c grub_pe2elf_SOURCES = util/grub-pe2elf.c util/misc.c
CLEANFILES += grub-pe2elf CLEANFILES += grub-pe2elf
# grub_macho2img assumes a lot about source file.
# So installing it definitively is useless
# But adding to bin_UTILITIES is needed for
# genmk.rb to work
ifeq (0,1)
bin_UTILITIES += grub-macho2img
endif
grub_macho2img_SOURCES = util/grub-macho2img.c grub_macho2img_SOURCES = util/grub-macho2img.c
CLEANFILES += grub-macho2img CLEANFILES += grub-macho2img
@ -177,7 +172,7 @@ CLEANFILES += grub-dumpbios
pkglib_MODULES += fshelp.mod fat.mod ufs1.mod ufs2.mod ext2.mod ntfs.mod \ pkglib_MODULES += fshelp.mod fat.mod ufs1.mod ufs2.mod ext2.mod ntfs.mod \
ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \ ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \
affs.mod sfs.mod hfsplus.mod reiserfs.mod cpio.mod tar.mod \ affs.mod sfs.mod hfsplus.mod reiserfs.mod cpio.mod tar.mod \
udf.mod afs.mod befs.mod udf.mod afs.mod afs_be.mod befs.mod befs_be.mod
# For fshelp.mod. # For fshelp.mod.
fshelp_mod_SOURCES = fs/fshelp.c fshelp_mod_SOURCES = fs/fshelp.c
@ -279,43 +274,52 @@ afs_mod_SOURCES = fs/afs.c
afs_mod_CFLAGS = $(COMMON_CFLAGS) afs_mod_CFLAGS = $(COMMON_CFLAGS)
afs_mod_LDFLAGS = $(COMMON_LDFLAGS) afs_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For afs_be.mod.
afs_be_mod_SOURCES = fs/afs_be.c
afs_be_mod_CFLAGS = $(COMMON_CFLAGS)
afs_be_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For befs.mod. # For befs.mod.
befs_mod_SOURCES = fs/befs.c befs_mod_SOURCES = fs/befs.c
befs_mod_CFLAGS = $(COMMON_CFLAGS) befs_mod_CFLAGS = $(COMMON_CFLAGS)
befs_mod_LDFLAGS = $(COMMON_LDFLAGS) befs_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For befs_be.mod.
befs_be_mod_SOURCES = fs/befs_be.c
befs_be_mod_CFLAGS = $(COMMON_CFLAGS)
befs_be_mod_LDFLAGS = $(COMMON_LDFLAGS)
# Partition maps. # Partition maps.
pkglib_MODULES += amiga.mod apple.mod pc.mod sun.mod acorn.mod gpt.mod
# For amiga.mod pkglib_MODULES += part_amiga.mod
amiga_mod_SOURCES = partmap/amiga.c part_amiga_mod_SOURCES = partmap/amiga.c
amiga_mod_CFLAGS = $(COMMON_CFLAGS) part_amiga_mod_CFLAGS = $(COMMON_CFLAGS)
amiga_mod_LDFLAGS = $(COMMON_LDFLAGS) part_amiga_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For apple.mod pkglib_MODULES += part_apple.mod
apple_mod_SOURCES = partmap/apple.c part_apple_mod_SOURCES = partmap/apple.c
apple_mod_CFLAGS = $(COMMON_CFLAGS) part_apple_mod_CFLAGS = $(COMMON_CFLAGS)
apple_mod_LDFLAGS = $(COMMON_LDFLAGS) part_apple_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For pc.mod pkglib_MODULES += part_msdos.mod
pc_mod_SOURCES = partmap/pc.c part_msdos_mod_SOURCES = partmap/msdos.c
pc_mod_CFLAGS = $(COMMON_CFLAGS) part_msdos_mod_CFLAGS = $(COMMON_CFLAGS)
pc_mod_LDFLAGS = $(COMMON_LDFLAGS) part_msdos_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For sun.mod pkglib_MODULES += part_sun.mod
sun_mod_SOURCES = partmap/sun.c part_sun_mod_SOURCES = partmap/sun.c
sun_mod_CFLAGS = $(COMMON_CFLAGS) part_sun_mod_CFLAGS = $(COMMON_CFLAGS)
sun_mod_LDFLAGS = $(COMMON_LDFLAGS) part_sun_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For acorn.mod pkglib_MODULES += part_acorn.mod
acorn_mod_SOURCES = partmap/acorn.c part_acorn_mod_SOURCES = partmap/acorn.c
acorn_mod_CFLAGS = $(COMMON_CFLAGS) part_acorn_mod_CFLAGS = $(COMMON_CFLAGS)
acorn_mod_LDFLAGS = $(COMMON_LDFLAGS) part_acorn_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For gpt.mod pkglib_MODULES += part_gpt.mod
gpt_mod_SOURCES = partmap/gpt.c part_gpt_mod_SOURCES = partmap/gpt.c
gpt_mod_CFLAGS = $(COMMON_CFLAGS) part_gpt_mod_CFLAGS = $(COMMON_CFLAGS)
gpt_mod_LDFLAGS = $(COMMON_LDFLAGS) part_gpt_mod_LDFLAGS = $(COMMON_LDFLAGS)
# Special disk structures and generic drivers # Special disk structures and generic drivers
@ -363,8 +367,14 @@ pkglib_MODULES += minicmd.mod extcmd.mod hello.mod handler.mod \
fs_file.mod fs_uuid.mod configfile.mod echo.mod \ fs_file.mod fs_uuid.mod configfile.mod echo.mod \
terminfo.mod test.mod blocklist.mod hexdump.mod \ terminfo.mod test.mod blocklist.mod hexdump.mod \
read.mod sleep.mod loadenv.mod crc.mod parttool.mod \ read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
pcpart.mod memrw.mod normal.mod sh.mod lua.mod \ msdospart.mod memrw.mod normal.mod sh.mod lua.mod \
gptsync.mod true.mod probe.mod gptsync.mod true.mod probe.mod password.mod \
keystatus.mod
# For password.mod.
password_mod_SOURCES = commands/password.c
password_mod_CFLAGS = $(COMMON_CFLAGS)
password_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For gptsync.mod. # For gptsync.mod.
gptsync_mod_SOURCES = commands/gptsync.c gptsync_mod_SOURCES = commands/gptsync.c
@ -391,10 +401,10 @@ parttool_mod_SOURCES = commands/parttool.c
parttool_mod_CFLAGS = $(COMMON_CFLAGS) parttool_mod_CFLAGS = $(COMMON_CFLAGS)
parttool_mod_LDFLAGS = $(COMMON_LDFLAGS) parttool_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For pcpart.mod. # For msdospart.mod.
pcpart_mod_SOURCES = parttool/pcpart.c msdospart_mod_SOURCES = parttool/msdospart.c
pcpart_mod_CFLAGS = $(COMMON_CFLAGS) msdospart_mod_CFLAGS = $(COMMON_CFLAGS)
pcpart_mod_LDFLAGS = $(COMMON_LDFLAGS) msdospart_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For handler.mod. # For handler.mod.
handler_mod_SOURCES = commands/handler.c handler_mod_SOURCES = commands/handler.c
@ -506,9 +516,14 @@ probe_mod_SOURCES = commands/probe.c
probe_mod_CFLAGS = $(COMMON_CFLAGS) probe_mod_CFLAGS = $(COMMON_CFLAGS)
probe_mod_LDFLAGS = $(COMMON_LDFLAGS) probe_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For keystatus.mod.
keystatus_mod_SOURCES = commands/keystatus.c
keystatus_mod_CFLAGS = $(COMMON_CFLAGS)
keystatus_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For normal.mod. # For normal.mod.
normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \ normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \
normal/autofs.c normal/handler.c \ normal/auth.c normal/autofs.c normal/handler.c \
normal/color.c normal/completion.c normal/datetime.c normal/menu.c \ normal/color.c normal/completion.c normal/datetime.c normal/menu.c \
normal/menu_entry.c normal/menu_text.c normal/menu_viewer.c \ normal/menu_entry.c normal/menu_text.c normal/menu_viewer.c \
normal/misc.c normal/misc.c

View file

@ -32,7 +32,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \
symlist.c symlist.c
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
machine/boot.h machine/console.h machine/init.h \ machine/boot.h machine/console.h machine/init.h \
machine/memory.h machine/loader.h list.h handler.h command.h machine/memory.h machine/loader.h list.h handler.h command.h
kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_CFLAGS = $(COMMON_CFLAGS)
@ -75,7 +75,7 @@ kernel_img_SOURCES = kern/i386/qemu/startup.S \
symlist.c symlist.c
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
machine/boot.h machine/console.h machine/init.h \ machine/boot.h machine/console.h machine/init.h \
machine/memory.h machine/loader.h list.h handler.h command.h machine/memory.h machine/loader.h list.h handler.h command.h
kernel_img_CFLAGS = $(COMMON_CFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR) kernel_img_CFLAGS = $(COMMON_CFLAGS) -DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)
@ -110,13 +110,16 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/handler.c commands/ls.c commands/test.c \ commands/handler.c commands/ls.c commands/test.c \
commands/search.c commands/blocklist.c commands/hexdump.c \ commands/search.c commands/blocklist.c commands/hexdump.c \
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \ commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
commands/password.c commands/keystatus.c \
lib/hexdump.c commands/i386/cpuid.c \ lib/hexdump.c commands/i386/cpuid.c \
lib/envblk.c commands/loadenv.c \
disk/host.c disk/loopback.c \ disk/host.c disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
fs/fshelp.c \ fs/fshelp.c \
io/gzio.c \ io/gzio.c \
@ -127,21 +130,21 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/partition.c kern/reader.c kern/term.c \ kern/partition.c kern/reader.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \ kern/rescue_reader.c kern/rescue_parser.c \
lib/arg.c normal/cmdline.c normal/misc.c \ lib/arg.c normal/cmdline.c normal/misc.c \
normal/handler.c normal/autofs.c \ normal/handler.c normal/auth.c normal/autofs.c \
normal/completion.c normal/datetime.c normal/main.c \ normal/completion.c normal/datetime.c normal/main.c \
normal/menu_text.c \ normal/menu_text.c \
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \ normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c grub_script.tab.c \ script/sh/lexer.c script/sh/script.c grub_script.tab.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \ partmap/acorn.c partmap/gpt.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_emu_init.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)
@ -203,6 +206,13 @@ aout_mod_SOURCES = loader/aout.c
aout_mod_CFLAGS = $(COMMON_CFLAGS) aout_mod_CFLAGS = $(COMMON_CFLAGS)
aout_mod_LDFLAGS = $(COMMON_LDFLAGS) aout_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For bsd.mod
pkglib_MODULES += bsd.mod
bsd_mod_SOURCES = loader/i386/bsd.c loader/i386/bsd32.c loader/i386/bsd64.c loader/i386/bsd_helper.S loader/i386/bsd_trampoline.S
bsd_mod_CFLAGS = $(COMMON_CFLAGS)
bsd_mod_LDFLAGS = $(COMMON_LDFLAGS)
bsd_mod_ASFLAGS = $(COMMON_ASFLAGS)
# For play.mod. # For play.mod.
play_mod_SOURCES = commands/i386/pc/play.c play_mod_SOURCES = commands/i386/pc/play.c
play_mod_CFLAGS = $(COMMON_CFLAGS) play_mod_CFLAGS = $(COMMON_CFLAGS)

View file

@ -23,7 +23,7 @@ util/i386/efi/grub-mkimage.c_DEPENDENCIES = Makefile
#grub_setup_SOURCES = util/i386/pc/grub-setup.c util/hostdisk.c \ #grub_setup_SOURCES = util/i386/pc/grub-setup.c util/hostdisk.c \
# util/misc.c util/getroot.c kern/device.c kern/disk.c \ # util/misc.c util/getroot.c kern/device.c kern/disk.c \
# kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c \ # kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c \
# fs/sfs.c kern/parser.c kern/partition.c partmap/pc.c \ # fs/sfs.c kern/parser.c kern/partition.c partmap/msdos.c \
# fs/ufs.c fs/ufs2.c fs/minix.c fs/hfs.c fs/jfs.c fs/hfsplus.c kern/file.c \ # fs/ufs.c fs/ufs2.c fs/minix.c fs/hfs.c fs/jfs.c fs/hfsplus.c kern/file.c \
# kern/fs.c kern/env.c fs/fshelp.c # kern/fs.c kern/env.c fs/fshelp.c
@ -37,14 +37,17 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/configfile.c commands/help.c \ commands/configfile.c commands/help.c \
commands/handler.c commands/ls.c commands/test.c \ commands/handler.c commands/ls.c commands/test.c \
commands/search.c commands/hexdump.c lib/hexdump.c \ commands/search.c commands/hexdump.c lib/hexdump.c \
commands/halt.c commands/reboot.c \ commands/halt.c commands/reboot.c commands/keystatus.c \
commands/i386/cpuid.c \ commands/i386/cpuid.c \
commands/password.c \
lib/envblk.c commands/loadenv.c \
disk/loopback.c \ disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
io/gzio.c \ io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \ kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
@ -54,21 +57,21 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/partition.c kern/reader.c kern/term.c \ kern/partition.c kern/reader.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \ kern/rescue_reader.c kern/rescue_parser.c \
lib/arg.c normal/cmdline.c normal/command.c normal/datetime.c \ lib/arg.c normal/cmdline.c normal/command.c normal/datetime.c \
normal/autofs.c \ normal/auth.c normal/autofs.c \
normal/completion.c normal/context.c normal/main.c \ normal/completion.c normal/context.c normal/main.c \
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \ normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
normal/menu_text.c \ normal/menu_text.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c grub_script.tab.c \ script/sh/lexer.c script/sh/script.c grub_script.tab.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \ partmap/acorn.c partmap/gpt.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_emu_init.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)
@ -100,7 +103,7 @@ kernel_mod_SOURCES = kern/i386/efi/startup.S kern/main.c kern/device.c \
kern/generic/millisleep.c kern/generic/millisleep.c
kernel_mod_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_mod_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
efi/efi.h efi/time.h efi/disk.h i386/pit.h list.h handler.h command.h efi/efi.h efi/time.h efi/disk.h i386/pit.h list.h handler.h command.h
kernel_mod_CFLAGS = $(COMMON_CFLAGS) kernel_mod_CFLAGS = $(COMMON_CFLAGS)
kernel_mod_ASFLAGS = $(COMMON_ASFLAGS) kernel_mod_ASFLAGS = $(COMMON_ASFLAGS)

View file

@ -31,7 +31,7 @@ kernel_img_SOURCES = kern/i386/ieee1275/startup.S \
symlist.c symlist.c
kernel_img_HEADERS = cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
ieee1275/ieee1275.h machine/kernel.h machine/loader.h machine/memory.h \ ieee1275/ieee1275.h machine/kernel.h machine/loader.h machine/memory.h \
list.h handler.h command.h list.h handler.h command.h
kernel_img_CFLAGS = $(COMMON_CFLAGS) kernel_img_CFLAGS = $(COMMON_CFLAGS)
@ -64,14 +64,17 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/handler.c commands/ls.c commands/test.c \ commands/handler.c commands/ls.c commands/test.c \
commands/search.c commands/blocklist.c commands/hexdump.c \ commands/search.c commands/blocklist.c commands/hexdump.c \
lib/hexdump.c commands/halt.c commands/reboot.c \ lib/hexdump.c commands/halt.c commands/reboot.c \
lib/envblk.c commands/loadenv.c \
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \ commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
commands/i386/cpuid.c \ commands/i386/cpuid.c \
commands/password.c commands/keystatus.c \
disk/host.c disk/loopback.c \ disk/host.c disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c fs/befs.c \
fs/befs_be.c fs/tar.c \
\ \
fs/fshelp.c \ fs/fshelp.c \
io/gzio.c \ io/gzio.c \
@ -82,13 +85,13 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/partition.c kern/reader.c kern/term.c \ kern/partition.c kern/reader.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \ kern/rescue_reader.c kern/rescue_parser.c \
lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \ lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \
normal/handler.c normal/autofs.c \ normal/handler.c normal/auth.c normal/autofs.c \
normal/completion.c normal/main.c normal/menu_text.c \ normal/completion.c normal/main.c normal/menu_text.c \
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \ normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c grub_script.tab.c \ script/sh/lexer.c script/sh/script.c grub_script.tab.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \ partmap/acorn.c partmap/gpt.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \

View file

@ -61,7 +61,7 @@ kernel_img_SOURCES = kern/i386/pc/startup.S \
symlist.c symlist.c
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \ machine/biosdisk.h machine/boot.h machine/console.h machine/init.h \
machine/memory.h machine/loader.h machine/vga.h machine/vbe.h \ machine/memory.h machine/loader.h machine/vga.h machine/vbe.h \
machine/kernel.h machine/pxe.h i386/pit.h list.h handler.h command.h machine/kernel.h machine/pxe.h i386/pit.h list.h handler.h command.h
@ -102,9 +102,10 @@ grub_setup_SOURCES = util/i386/pc/grub-setup.c util/hostdisk.c \
fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
partmap/pc.c partmap/gpt.c \ partmap/msdos.c partmap/gpt.c \
\ \
disk/raid.c disk/mdraid_linux.c disk/lvm.c \ disk/raid.c disk/mdraid_linux.c disk/lvm.c \
util/raid.c util/lvm.c \ util/raid.c util/lvm.c \
@ -121,8 +122,10 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/handler.c commands/ls.c commands/test.c \ commands/handler.c commands/ls.c commands/test.c \
commands/search.c commands/blocklist.c commands/hexdump.c \ commands/search.c commands/blocklist.c commands/hexdump.c \
lib/hexdump.c commands/i386/pc/halt.c commands/reboot.c \ lib/hexdump.c commands/i386/pc/halt.c commands/reboot.c \
lib/envblk.c commands/loadenv.c \
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \ commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
commands/i386/cpuid.c \ commands/i386/cpuid.c \
commands/password.c commands/keystatus.c \
disk/host.c disk/loopback.c disk/scsi.c \ disk/host.c disk/loopback.c disk/scsi.c \
fs/fshelp.c \ fs/fshelp.c \
\ \
@ -134,26 +137,27 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/partition.c kern/reader.c kern/term.c \ kern/partition.c kern/reader.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \ kern/rescue_reader.c kern/rescue_parser.c \
lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \ lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \
normal/handler.c normal/autofs.c \ normal/handler.c normal/auth.c normal/autofs.c \
normal/completion.c normal/main.c normal/color.c \ normal/completion.c normal/main.c normal/color.c \
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \ normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
normal/menu_text.c \ normal/menu_text.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c grub_script.tab.c \ script/sh/lexer.c script/sh/script.c grub_script.tab.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \ partmap/acorn.c partmap/gpt.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_emu_init.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)

View file

@ -16,7 +16,7 @@ DEFSYMFILES += kernel_syms.lst
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h reader.h \ env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h reader.h \
symbol.h term.h time.h types.h powerpc/libgcc.h loader.h partition.h \ symbol.h term.h time.h types.h powerpc/libgcc.h loader.h partition.h \
pc_partition.h ieee1275/ieee1275.h machine/kernel.h handler.h list.h \ msdos_partition.h ieee1275/ieee1275.h machine/kernel.h handler.h list.h \
command.h command.h
symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh
@ -45,13 +45,16 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/search.c commands/handler.c commands/test.c \ commands/search.c commands/handler.c commands/test.c \
commands/ls.c commands/blocklist.c commands/hexdump.c \ commands/ls.c commands/blocklist.c commands/hexdump.c \
lib/hexdump.c commands/halt.c commands/reboot.c \ lib/hexdump.c commands/halt.c commands/reboot.c \
lib/envblk.c commands/loadenv.c \
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \ commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
commands/password.c commands/keystatus.c \
disk/loopback.c \ disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
io/gzio.c \ io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \ kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
@ -62,21 +65,21 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/command.c kern/corecmd.c commands/extcmd.c \ kern/command.c kern/corecmd.c commands/extcmd.c \
lib/arg.c normal/cmdline.c normal/datetime.c \ lib/arg.c normal/cmdline.c normal/datetime.c \
normal/completion.c normal/misc.c \ normal/completion.c normal/misc.c \
normal/handler.c normal/autofs.c normal/main.c \ normal/handler.c normal/auth.c normal/autofs.c normal/main.c \
normal/menu.c \ normal/menu.c \
normal/menu_text.c \ normal/menu_text.c \
normal/menu_entry.c normal/menu_viewer.c \ normal/menu_entry.c normal/menu_viewer.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c \ script/sh/lexer.c script/sh/script.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c \ partmap/acorn.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_script.tab.c grub_emu_init.c grub_script.tab.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)

View file

@ -28,7 +28,7 @@ DEFSYMFILES += kernel_syms.lst
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
list.h handler.h command.h \ list.h handler.h command.h \
sparc64/libgcc.h ieee1275/ieee1275.h machine/kernel.h \ sparc64/libgcc.h ieee1275/ieee1275.h machine/kernel.h \
sparc64/ieee1275/ieee1275.h sparc64/ieee1275/ieee1275.h
@ -78,9 +78,10 @@ grub_setup_SOURCES = util/sparc64/ieee1275/grub-setup.c util/hostdisk.c \
fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/ext2.c fs/fat.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
partmap/amiga.c partmap/apple.c partmap/pc.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c \
partmap/sun.c partmap/acorn.c \ partmap/sun.c partmap/acorn.c \
\ \
disk/raid.c disk/mdraid_linux.c disk/lvm.c \ disk/raid.c disk/mdraid_linux.c disk/lvm.c \
@ -102,13 +103,16 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/search.c commands/handler.c commands/test.c \ commands/search.c commands/handler.c commands/test.c \
commands/ls.c commands/blocklist.c commands/hexdump.c \ commands/ls.c commands/blocklist.c commands/hexdump.c \
lib/hexdump.c commands/halt.c commands/reboot.c \ lib/hexdump.c commands/halt.c commands/reboot.c \
lib/envblk.c commands/loadenv.c \
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \ commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
commands/password.c commands/keystatus.c \
disk/loopback.c \ disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/befs.c fs/tar.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
fs/befs.c fs/befs_be.c fs/tar.c \
\ \
io/gzio.c \ io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \ kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
@ -119,21 +123,21 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/command.c kern/corecmd.c commands/extcmd.c \ kern/command.c kern/corecmd.c commands/extcmd.c \
lib/arg.c normal/cmdline.c normal/datetime.c \ lib/arg.c normal/cmdline.c normal/datetime.c \
normal/completion.c normal/misc.c \ normal/completion.c normal/misc.c \
normal/handler.c normal/autofs.c normal/main.c \ normal/handler.c normal/auth.c normal/autofs.c normal/main.c \
normal/menu.c \ normal/menu.c \
normal/menu_text.c \ normal/menu_text.c \
normal/menu_entry.c normal/menu_viewer.c \ normal/menu_entry.c normal/menu_viewer.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c \ script/sh/lexer.c script/sh/script.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c \ partmap/acorn.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_script.tab.c grub_emu_init.c grub_script.tab.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)

View file

@ -22,7 +22,7 @@ grub_mkimage_SOURCES = util/i386/efi/grub-mkimage.c util/misc.c \
#grub_setup_SOURCES = util/i386/pc/grub-setup.c util/hostdisk.c \ #grub_setup_SOURCES = util/i386/pc/grub-setup.c util/hostdisk.c \
# util/misc.c util/getroot.c kern/device.c kern/disk.c \ # util/misc.c util/getroot.c kern/device.c kern/disk.c \
# kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c \ # kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c \
# fs/sfs.c kern/parser.c kern/partition.c partmap/pc.c \ # fs/sfs.c kern/parser.c kern/partition.c partmap/msdos.c \
# fs/ufs.c fs/ufs2.c fs/minix.c fs/hfs.c fs/jfs.c fs/hfsplus.c kern/file.c \ # fs/ufs.c fs/ufs2.c fs/minix.c fs/hfs.c fs/jfs.c fs/hfsplus.c kern/file.c \
# kern/fs.c kern/env.c fs/fshelp.c # kern/fs.c kern/env.c fs/fshelp.c
@ -37,12 +37,14 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
commands/search.c commands/hexdump.c lib/hexdump.c \ commands/search.c commands/hexdump.c lib/hexdump.c \
commands/halt.c commands/reboot.c \ commands/halt.c commands/reboot.c \
commands/i386/cpuid.c \ commands/i386/cpuid.c \
commands/password.c commands/keystatus.c \
lib/envblk.c commands/loadenv.c \
disk/loopback.c \ disk/loopback.c \
\ \
fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \ fs/affs.c fs/cpio.c fs/fat.c fs/ext2.c fs/hfs.c \
fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \ fs/hfsplus.c fs/iso9660.c fs/udf.c fs/jfs.c fs/minix.c \
fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \ fs/ntfs.c fs/ntfscomp.c fs/reiserfs.c fs/sfs.c \
fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c \ fs/ufs.c fs/ufs2.c fs/xfs.c fs/afs.c fs/afs_be.c \
\ \
io/gzio.c \ io/gzio.c \
kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \ kern/device.c kern/disk.c kern/dl.c kern/elf.c kern/env.c \
@ -50,7 +52,8 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
kern/command.c kern/corecmd.c commands/extcmd.c kern/file.c \ kern/command.c kern/corecmd.c commands/extcmd.c kern/file.c \
kern/fs.c commands/boot.c kern/main.c kern/misc.c kern/parser.c \ kern/fs.c commands/boot.c kern/main.c kern/misc.c kern/parser.c \
kern/partition.c kern/readerescue.c kern/term.c \ kern/partition.c kern/readerescue.c kern/term.c \
lib/arg.c normal/cmdline.c normal/misc.c normal/autofs.c \ lib/arg.c normal/cmdline.c normal/misc.c normal/auth.c \
normal/autofs.c \
normal/completion.c normal/datetime.c normal/context.c \ normal/completion.c normal/datetime.c normal/context.c \
normal/main.c \ normal/main.c \
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \ normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
@ -58,14 +61,14 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
normal/color.c \ normal/color.c \
script/sh/main.c script/sh/execute.c script/sh/function.c \ script/sh/main.c script/sh/execute.c script/sh/function.c \
script/sh/lexer.c script/sh/script.c grub_script.tab.c \ script/sh/lexer.c script/sh/script.c grub_script.tab.c \
partmap/amiga.c partmap/apple.c partmap/pc.c partmap/sun.c \ partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
partmap/acorn.c partmap/gpt.c \ partmap/acorn.c partmap/gpt.c \
util/console.c util/hostfs.c util/grub-emu.c util/misc.c \ util/console.c util/hostfs.c util/grub-emu.c util/misc.c \
util/hostdisk.c util/getroot.c \ util/hostdisk.c util/getroot.c \
\ \
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \ disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \ disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
commands/parttool.c parttool/pcpart.c \ commands/parttool.c parttool/msdospart.c \
grub_emu_init.c grub_emu_init.c
grub_emu_LDFLAGS = $(LIBCURSES) grub_emu_LDFLAGS = $(LIBCURSES)
@ -97,7 +100,7 @@ kernel_mod_SOURCES = kern/x86_64/efi/startup.S kern/x86_64/efi/callwrap.S \
term/efi/console.c disk/efi/efidisk.c term/efi/console.c disk/efi/efidisk.c
kernel_mod_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \ kernel_mod_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \ env.h err.h file.h fs.h kernel.h loader.h misc.h mm.h net.h parser.h \
partition.h pc_partition.h reader.h symbol.h term.h time.h types.h \ partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
efi/efi.h efi/time.h efi/disk.h machine/loader.h i386/pit.h list.h \ efi/efi.h efi/time.h efi/disk.h machine/loader.h i386/pit.h list.h \
handler.h command.h handler.h command.h
kernel_mod_CFLAGS = $(COMMON_CFLAGS) kernel_mod_CFLAGS = $(COMMON_CFLAGS)

81
config.guess vendored
View file

@ -1,10 +1,10 @@
#! /bin/sh #! /bin/sh
# Attempt to guess a canonical system name. # Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
timestamp='2008-12-19' timestamp='2009-08-19'
# This file is free software; you can redistribute it and/or modify it # 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 # under the terms of the GNU General Public License as published by
@ -27,16 +27,16 @@ timestamp='2008-12-19'
# the same distribution terms that you use for the rest of that program. # the same distribution terms that you use for the rest of that program.
# Originally written by Per Bothner <per@bothner.com>. # Originally written by Per Bothner. Please send patches (context
# Please send patches to <config-patches@gnu.org>. Submit a context # diff format) to <config-patches@gnu.org> and include a ChangeLog
# diff and a properly formatted ChangeLog entry. # entry.
# #
# This script attempts to guess a canonical system name similar to # This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and # config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1. # exits with 0. Otherwise, it exits with 1.
# #
# The plan is that this can be called by configure scripts if you # You can get the latest version of this script from:
# don't specify an explicit build system type. # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
me=`echo "$0" | sed -e 's,.*/,,'` me=`echo "$0" | sed -e 's,.*/,,'`
@ -170,7 +170,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm*|i386|m68k|ns32k|sh3*|sparc|vax) arm*|i386|m68k|ns32k|sh3*|sparc|vax)
eval $set_cc_for_build eval $set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep __ELF__ >/dev/null | grep -q __ELF__
then then
# Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
# Return netbsd for either. FIX? # Return netbsd for either. FIX?
@ -324,6 +324,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
case `/usr/bin/uname -p` in case `/usr/bin/uname -p` in
sparc) echo sparc-icl-nx7; exit ;; sparc) echo sparc-icl-nx7; exit ;;
esac ;; esac ;;
s390x:SunOS:*:*)
echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
sun4H:SunOS:5.*:*) sun4H:SunOS:5.*:*)
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;; exit ;;
@ -653,7 +656,7 @@ EOF
# => hppa64-hp-hpux11.23 # => hppa64-hp-hpux11.23
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
grep __LP64__ >/dev/null grep -q __LP64__
then then
HP_ARCH="hppa2.0w" HP_ARCH="hppa2.0w"
else else
@ -819,6 +822,9 @@ EOF
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
echo i${UNAME_MACHINE}-pc-mks echo i${UNAME_MACHINE}-pc-mks
exit ;; exit ;;
8664:Windows_NT:*)
echo x86_64-pc-mks
exit ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*) i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem? # How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@ -879,40 +885,17 @@ EOF
m68*:Linux:*:*) m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;; exit ;;
mips:Linux:*:*) mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c sed 's/^ //' << EOF >$dummy.c
#undef CPU #undef CPU
#undef mips #undef ${UNAME_MACHINE}
#undef mipsel #undef ${UNAME_MACHINE}el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
CPU=mipsel CPU=${UNAME_MACHINE}el
#else #else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
CPU=mips CPU=${UNAME_MACHINE}
#else
CPU=
#endif
#endif
EOF
eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
/^CPU/{
s: ::g
p
}'`"
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
mips64:Linux:*:*)
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#undef CPU
#undef mips64
#undef mips64el
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
CPU=mips64el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
CPU=mips64
#else #else
CPU= CPU=
#endif #endif
@ -944,7 +927,7 @@ EOF
EV67) UNAME_MACHINE=alphaev67 ;; EV67) UNAME_MACHINE=alphaev67 ;;
EV68*) UNAME_MACHINE=alphaev68 ;; EV68*) UNAME_MACHINE=alphaev68 ;;
esac esac
objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
exit ;; exit ;;
@ -998,14 +981,6 @@ EOF
elf32-i386) elf32-i386)
TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
;; ;;
a.out-i386-linux)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
exit ;;
"")
# Either a pre-BFD a.out linker (linux-gnuoldld) or
# one that does not give us useful --help.
echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
exit ;;
esac esac
# Determine whether the default compiler is a.out or elf # Determine whether the default compiler is a.out or elf
eval $set_cc_for_build eval $set_cc_for_build
@ -1071,7 +1046,7 @@ EOF
i*86:syllable:*:*) i*86:syllable:*:*)
echo ${UNAME_MACHINE}-pc-syllable echo ${UNAME_MACHINE}-pc-syllable
exit ;; exit ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
echo i386-unknown-lynxos${UNAME_RELEASE} echo i386-unknown-lynxos${UNAME_RELEASE}
exit ;; exit ;;
i*86:*DOS:*:*) i*86:*DOS:*:*)
@ -1115,8 +1090,11 @@ EOF
pc:*:*:*) pc:*:*:*)
# Left here for compatibility: # Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about # uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386. # the processor, so we play safe by assuming i586.
echo i386-pc-msdosdjgpp # Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configury will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
exit ;; exit ;;
Intel:Mach:3*:*) Intel:Mach:3*:*)
echo i386-pc-mach3 echo i386-pc-mach3
@ -1176,7 +1154,7 @@ EOF
rs6000:LynxOS:2.*:*) rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE} echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit ;; exit ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
echo powerpc-unknown-lynxos${UNAME_RELEASE} echo powerpc-unknown-lynxos${UNAME_RELEASE}
exit ;; exit ;;
SM[BE]S:UNIX_SV:*:*) SM[BE]S:UNIX_SV:*:*)
@ -1350,6 +1328,9 @@ EOF
i*86:rdos:*:*) i*86:rdos:*:*)
echo ${UNAME_MACHINE}-pc-rdos echo ${UNAME_MACHINE}-pc-rdos
exit ;; exit ;;
i*86:AROS:*:*)
echo ${UNAME_MACHINE}-pc-aros
exit ;;
esac esac
#echo '(No uname command or uname output not recognized.)' 1>&2 #echo '(No uname command or uname output not recognized.)' 1>&2

34
config.sub vendored
View file

@ -1,10 +1,10 @@
#! /bin/sh #! /bin/sh
# Configuration validation subroutine script. # Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc. # Free Software Foundation, Inc.
timestamp='2009-01-19' timestamp='2009-08-19'
# This file is (in principle) common to ALL GNU software. # This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software # The presence of a machine in this file suggests that SOME GNU software
@ -32,13 +32,16 @@ timestamp='2009-01-19'
# Please send patches to <config-patches@gnu.org>. Submit a context # Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted ChangeLog entry. # diff and a properly formatted GNU ChangeLog entry.
# #
# Configuration subroutine to validate and canonicalize a configuration type. # Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument. # Supply the specified configuration type as an argument.
# If it is invalid, we print an error message on stderr and exit with code 1. # If it is invalid, we print an error message on stderr and exit with code 1.
# Otherwise, we print the canonical config type on stdout and succeed. # Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
# This file is supposed to be the same for all GNU packages # This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases # and recognize all the CPU types, system types and aliases
# that are meaningful with *any* GNU software. # that are meaningful with *any* GNU software.
@ -149,10 +152,13 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple | -axis | -knuth | -cray) -apple | -axis | -knuth | -cray | -microblaze)
os= os=
basic_machine=$1 basic_machine=$1
;; ;;
-bluegene*)
os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond) -sim | -cisco | -oki | -wec | -winbond)
os= os=
basic_machine=$1 basic_machine=$1
@ -272,6 +278,7 @@ case $basic_machine in
| mipsisa64sr71k | mipsisa64sr71kel \ | mipsisa64sr71k | mipsisa64sr71kel \
| mipstx39 | mipstx39el \ | mipstx39 | mipstx39el \
| mn10200 | mn10300 \ | mn10200 | mn10300 \
| moxie \
| mt \ | mt \
| msp430 \ | msp430 \
| nios | nios2 \ | nios | nios2 \
@ -336,7 +343,7 @@ case $basic_machine in
| lm32-* \ | lm32-* \
| m32c-* | m32r-* | m32rle-* \ | m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \ | mips16-* \
| mips64-* | mips64el-* \ | mips64-* | mips64el-* \
@ -446,6 +453,10 @@ case $basic_machine in
basic_machine=m68k-apollo basic_machine=m68k-apollo
os=-bsd os=-bsd
;; ;;
aros)
basic_machine=i386-pc
os=-aros
;;
aux) aux)
basic_machine=m68k-apple basic_machine=m68k-apple
os=-aux os=-aux
@ -462,6 +473,10 @@ case $basic_machine in
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
os=-linux os=-linux
;; ;;
bluegene*)
basic_machine=powerpc-ibm
os=-cnk
;;
c90) c90)
basic_machine=c90-cray basic_machine=c90-cray
os=-unicos os=-unicos
@ -714,6 +729,9 @@ case $basic_machine in
basic_machine=ns32k-utek basic_machine=ns32k-utek
os=-sysv os=-sysv
;; ;;
microblaze)
basic_machine=microblaze-xilinx
;;
mingw32) mingw32)
basic_machine=i386-pc basic_machine=i386-pc
os=-mingw32 os=-mingw32
@ -1255,11 +1273,11 @@ case $os in
# Each alternative MUST END IN A *, to match a version number. # Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4. # -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -kopensolaris* \ | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* \ | -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
@ -1608,7 +1626,7 @@ case $basic_machine in
-sunos*) -sunos*)
vendor=sun vendor=sun
;; ;;
-aix*) -cnk*|-aix*)
vendor=ibm vendor=ibm
;; ;;
-beos*) -beos*)

View file

@ -31,7 +31,7 @@ dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
dnl type. dnl type.
AC_INIT([GRUB],[1.96],[bug-grub@gnu.org]) AC_INIT([GRUB],[1.97~beta3],[bug-grub@gnu.org])
AC_PREREQ(2.59) AC_PREREQ(2.59)
AC_CONFIG_SRCDIR([include/grub/dl.h]) AC_CONFIG_SRCDIR([include/grub/dl.h])
AC_CONFIG_HEADER([config.h]) AC_CONFIG_HEADER([config.h])
@ -147,7 +147,6 @@ AC_PROG_MAKE_SET
# These are not a "must". # These are not a "must".
AC_PATH_PROG(RUBY, ruby) AC_PATH_PROG(RUBY, ruby)
AC_PATH_PROG(HELP2MAN, help2man)
# #
# Checks for host programs. # Checks for host programs.
@ -171,6 +170,12 @@ if test x$grub_cv_apple_cc = xyes ; then
ASFLAGS="$ASFLAGS -DAPPLE_CC=1" ASFLAGS="$ASFLAGS -DAPPLE_CC=1"
fi fi
if test "x$cross_compiling" = xyes; then
AC_MSG_WARN([cannot generate manual pages while cross compiling])
else
AC_PATH_PROG(HELP2MAN, help2man)
fi
# Check for functions. # Check for functions.
AC_CHECK_FUNCS(posix_memalign memalign asprintf) AC_CHECK_FUNCS(posix_memalign memalign asprintf)
@ -246,6 +251,23 @@ if test "x$TARGET_CFLAGS" = x; then
TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
fi fi
fi fi
# By default, GCC 4.4 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-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_fno_dwarf2_cfi_asm=yes],
[grub_cv_cc_fno_dwarf2_cfi_asm=no])
CFLAGS="$SAVE_CFLAGS"
])
if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
fi
fi fi
grub_apple_target_cc grub_apple_target_cc
@ -346,6 +368,14 @@ fi
# Need __enable_execute_stack() for nested function trampolines? # Need __enable_execute_stack() for nested function trampolines?
grub_CHECK_ENABLE_EXECUTE_STACK grub_CHECK_ENABLE_EXECUTE_STACK
# Position independent executable.
grub_CHECK_PIE
[# Need that, because some distributions ship compilers that include
# `-fPIE' in the default specs.
if [ x"$pie_possible" = xyes ]; then
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
fi]
# Smashing stack protector. # Smashing stack protector.
grub_CHECK_STACK_PROTECTOR grub_CHECK_STACK_PROTECTOR
# Need that, because some distributions ship compilers that include # Need that, because some distributions ship compilers that include
@ -360,6 +390,13 @@ if test x"$sap_possible" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe" TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
fi fi
AC_ARG_ENABLE([werror],
[AS_HELP_STRING([--disable-werror],
[do not use -Werror when building GRUB])])
if test x"$enable_werror" != xno ; then
TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
fi
AC_SUBST(TARGET_CFLAGS) AC_SUBST(TARGET_CFLAGS)
AC_SUBST(TARGET_MODULE_FORMAT) AC_SUBST(TARGET_MODULE_FORMAT)
AC_SUBST(OBJCONV) AC_SUBST(OBJCONV)
@ -527,11 +564,6 @@ enable_grub_fstest=no
fi fi
AC_SUBST([enable_grub_fstest]) AC_SUBST([enable_grub_fstest])
AC_ARG_ENABLE([grub-pe2elf],
[AS_HELP_STRING([--enable-grub-pe2elf],
[build and install the `grub-pe2elf' conversion utility])])
AC_SUBST([enable_grub_pe2elf])
AC_ARG_ENABLE([grub-mkfont], AC_ARG_ENABLE([grub-mkfont],
[AS_HELP_STRING([--enable-grub-mkfont], [AS_HELP_STRING([--enable-grub-mkfont],
[build and install the `grub-mkfont' utility (default=guessed)])]) [build and install the `grub-mkfont' utility (default=guessed)])])
@ -596,13 +628,6 @@ echo With memory debugging: Yes
else else
echo With memory debugging: No echo With memory debugging: No
fi fi
if [ x"$enable_grub_pe2elf" = xyes ]; then
echo grub-pe2elf will be built and installed
elif [ x$TARGET_OBJ2ELF = xgrub-pe2elf ]; then
echo grub-pe2elf will be built but not installed
else
echo grub-pe2elf will not be built
fi
if [ x"$efiemu_excuse" = x ]; then if [ x"$efiemu_excuse" = x ]; then
echo efiemu runtime: Yes echo efiemu runtime: Yes
else else

View file

@ -62,6 +62,12 @@ menuentry "Microsoft Windows" {
chainloader +1 chainloader +1
} }
# For booting Memtest86+
menuentry "Memtest86+" {
set root=(hd0,1)
linux16 /memtest86+.bin
}
# Change the colors. # Change the colors.
menuentry "Change the colors" { menuentry "Change the colors" {
set menu_color_normal=light-green/brown set menu_color_normal=light-green/brown

View file

@ -20,7 +20,7 @@
This manual is for GNU GRUB (version @value{VERSION}, This manual is for GNU GRUB (version @value{VERSION},
@value{UPDATED}). @value{UPDATED}).
Copyright @copyright{} 1999,2000,2001,2002,2004,2006,2008 Free Software Foundation, Inc. Copyright @copyright{} 1999,2000,2001,2002,2004,2006,2008,2009 Free Software Foundation, Inc.
@quotation @quotation
Permission is granted to copy, distribute and/or modify this document Permission is granted to copy, distribute and/or modify this document
@ -356,25 +356,25 @@ disk. The number @samp{0} is the drive number, which is counted from
disk. disk.
@example @example
(hd0,1) (hd0,2)
@end example @end example
Here, @samp{hd} means it is a hard disk drive. The first integer Here, @samp{hd} means it is a hard disk drive. The first integer
@samp{0} indicates the drive number, that is, the first hard disk, while @samp{0} indicates the drive number, that is, the first hard disk, while
the second integer, @samp{1}, indicates the partition number (or the the second integer, @samp{1}, indicates the partition number (or the
@sc{pc} slice number in the BSD terminology). Once again, please note @sc{pc} slice number in the BSD terminology). The partition numbers are
that the partition numbers are counted from @emph{zero}, not from counted from @emph{one}, not from zero (as was the case in previous
one. This expression means the second partition of the first hard disk versions of GRUB). This expression means the second partition of the
drive. In this case, GRUB uses one partition of the disk, instead of the first hard disk drive. In this case, GRUB uses one partition of the
whole disk. disk, instead of the whole disk.
@example @example
(hd0,4) (hd0,5)
@end example @end example
This specifies the first @dfn{extended partition} of the first hard disk This specifies the first @dfn{extended partition} of the first hard disk
drive. Note that the partition numbers for extended partitions are drive. Note that the partition numbers for extended partitions are
counted from @samp{4}, regardless of the actual number of primary counted from @samp{5}, regardless of the actual number of primary
partitions on your hard disk. partitions on your hard disk.
@example @example
@ -383,13 +383,13 @@ partitions on your hard disk.
This means the BSD @samp{a} partition of the second hard disk. If you This means the BSD @samp{a} partition of the second hard disk. If you
need to specify which @sc{pc} slice number should be used, use something need to specify which @sc{pc} slice number should be used, use something
like this: @samp{(hd1,0,a)}. If the @sc{pc} slice number is omitted, like this: @samp{(hd1,1,a)}. If the @sc{pc} slice number is omitted,
GRUB searches for the first @sc{pc} slice which has a BSD @samp{a} GRUB searches for the first @sc{pc} slice which has a BSD @samp{a}
partition. partition.
Of course, to actually access the disks or partitions with GRUB, you Of course, to actually access the disks or partitions with GRUB, you
need to use the device specification in a command, like @samp{root need to use the device specification in a command, like @samp{root
(fd0)} or @samp{unhide (hd0,2)}. To help you find out which number (fd0)} or @samp{unhide (hd0,3)}. To help you find out which number
specifies a partition you want, the GRUB command-line specifies a partition you want, the GRUB command-line
(@pxref{Command-line interface}) options have argument (@pxref{Command-line interface}) options have argument
completion. This means that, for example, you only need to type completion. This means that, for example, you only need to type
@ -413,7 +413,7 @@ Now the question is, how to specify a file? Again, consider an
example: example:
@example @example
(hd0,0)/vmlinuz (hd0,1)/vmlinuz
@end example @end example
This specifies the file named @samp{vmlinuz}, found on the first This specifies the file named @samp{vmlinuz}, found on the first
@ -550,7 +550,7 @@ which can cause compatibility problems.
For booting from a CD-ROM, GRUB uses a special Stage 2 called For booting from a CD-ROM, GRUB uses a special Stage 2 called
@file{stage2_eltorito}. The only GRUB files you need to have in your @file{stage2_eltorito}. The only GRUB files you need to have in your
bootable CD-ROM are this @file{stage2_eltorito} and optionally a config file bootable CD-ROM are this @file{stage2_eltorito} and optionally a config file
@file{menu.lst}. You don't need to use @file{stage1} or @file{stage2}, @file{grub.cfg}. You don't need to use @file{stage1} or @file{stage2},
because El Torito is quite different from the standard boot process. because El Torito is quite different from the standard boot process.
Here is an example of procedures to make a bootable CD-ROM Here is an example of procedures to make a bootable CD-ROM
@ -573,7 +573,7 @@ Copy the file @file{stage2_eltorito}:
$ @kbd{cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub} $ @kbd{cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub}
@end example @end example
If desired, make the config file @file{menu.lst} under @file{iso/boot/grub} If desired, make the config file @file{grub.cfg} under @file{iso/boot/grub}
(@pxref{Configuration}), and copy any files and directories for the disc to the (@pxref{Configuration}), and copy any files and directories for the disc to the
directory @file{iso/}. directory @file{iso/}.
@ -786,7 +786,7 @@ which is a BIOS drive number, so the following are equivalent:
@end example @end example
@var{part-num} represents the partition number of @var{device}, starting @var{part-num} represents the partition number of @var{device}, starting
from zero for primary partitions and from four for extended partitions, from one for primary partitions and from five for extended partitions,
and @var{bsd-subpart-letter} represents the BSD disklabel subpartition, and @var{bsd-subpart-letter} represents the BSD disklabel subpartition,
such as @samp{a} or @samp{e}. such as @samp{a} or @samp{e}.
@ -800,7 +800,7 @@ finds the subpartition @var{bsd-subpart-letter}. Here is an example:
@end example @end example
The syntax @samp{(hd0)} represents using the entire disk (or the The syntax @samp{(hd0)} represents using the entire disk (or the
MBR when installing GRUB), while the syntax @samp{(hd0,0)} MBR when installing GRUB), while the syntax @samp{(hd0,1)}
represents using the first partition of the disk (or the boot sector represents using the first partition of the disk (or the boot sector
of the partition when installing GRUB). of the partition when installing GRUB).
@ -820,12 +820,12 @@ There are two ways to specify files, by @dfn{absolute file name} and by
An absolute file name resembles a Unix absolute file name, using An absolute file name resembles a Unix absolute file name, using
@samp{/} for the directory separator (not @samp{\} as in DOS). One @samp{/} for the directory separator (not @samp{\} as in DOS). One
example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file example is @samp{(hd0,1)/boot/grub/grub.cfg}. This means the file
@file{/boot/grub/menu.lst} in the first partition of the first hard @file{/boot/grub/grub.cfg} in the first partition of the first hard
disk. If you omit the device name in an absolute file name, GRUB uses disk. If you omit the device name in an absolute file name, GRUB uses
GRUB's @dfn{root device} implicitly. So if you set the root device to, GRUB's @dfn{root device} implicitly. So if you set the root device to,
say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then say, @samp{(hd1,1)} by the command @command{root} (@pxref{root}), then
@code{/boot/kernel} is the same as @code{(hd1,0)/boot/kernel}. @code{/boot/kernel} is the same as @code{(hd1,1)/boot/kernel}.
@node Block list syntax @node Block list syntax
@ -846,8 +846,8 @@ the offset is zero.
Like the file name syntax (@pxref{File name syntax}), if a blocklist Like the file name syntax (@pxref{File name syntax}), if a blocklist
does not contain a device name, then GRUB uses GRUB's @dfn{root does not contain a device name, then GRUB uses GRUB's @dfn{root
device}. So @code{(hd0,1)+1} is the same as @code{+1} when the root device}. So @code{(hd0,2)+1} is the same as @code{+1} when the root
device is @samp{(hd0,1)}. device is @samp{(hd0,2)}.
@node Interface @node Interface
@ -1110,17 +1110,56 @@ you forget a command, you can run the command @command{help}
(@pxref{help}). (@pxref{help}).
@menu @menu
* acpi:: Load ACPI tables
* blocklist:: Print a block list
* boot:: Start up your operating system * boot:: Start up your operating system
* cat:: Show the contents of a file * cat:: Show the contents of a file
* chainloader:: Chain-load another boot loader * chainloader:: Chain-load another boot loader
* cmp:: Compare two files * cmp:: Compare two files
* configfile:: Load a configuration file * configfile:: Load a configuration file
* crc:: Calculate CRC32 checksums
* export:: Export an environment variable
* halt:: Shut down your computer * halt:: Shut down your computer
* help:: Show help messages * help:: Show help messages
* insmod:: Insert a module
* keystatus:: Check key modifier status
* ls:: List devices or files
* reboot:: Reboot your computer * reboot:: Reboot your computer
* set:: Set an environment variable
* unset:: Unset an environment variable
@end menu @end menu
@node acpi
@subsection acpi
@deffn Command acpi [@option{-1}|@option{-2}] @
[@option{--exclude=table1,@dots{}}|@option{--load-only=table1,@dots{}}] @
[@option{--oemid=id}] [@option{--oemtable=table}] @
[@option{--oemtablerev=rev}] [@option{--oemtablecreator=creator}] @
[@option{--oemtablecreatorrev=rev}] [@option{--no-ebda}] @
filename @dots{}
Modern BIOS systems normally implement the Advanced Configuration and Power
Interface (ACPI), and define various tables that describe the interface
between an ACPI-compliant operating system and the firmware. In some cases,
the tables provided by default only work well with certain operating
systems, and it may be necessary to replace some of them.
Normally, this command will replace the Root System Description Pointer
(RSDP) in the Extended BIOS Data Area to point to the new tables. If the
@option{--no-ebda} option is used, the new tables will be known only to
GRUB, but may be used by GRUB's EFI emulation.
@end deffn
@node blocklist
@subsection blocklist
@deffn Command blocklist file
Print a block list (@pxref{Block list syntax}) for @var{file}.
@end deffn
@node boot @node boot
@subsection boot @subsection boot
@ -1187,6 +1226,23 @@ Load @var{file} as a configuration file.
@end deffn @end deffn
@node crc
@subsection crc
@deffn Command crc file
Display the CRC32 checksum of @var{file}.
@end deffn
@node export
@subsection export
@deffn Command export envvar
Export the environment variable @var{envvar}. Exported variables are visible
to subsidiary configuration files loaded using @command{configfile}.
@end deffn
@node halt @node halt
@subsection halt @subsection halt
@ -1212,6 +1268,44 @@ about each of the commands which match those @var{patterns}.
@end deffn @end deffn
@node insmod
@subsection insmod
@deffn Command insmod module
Insert the dynamic GRUB module called @var{module}.
@end deffn
@node keystatus
@subsection keystatus
@deffn Command keystatus [@option{--shift}] [@option{--ctrl}] [@option{--alt}]
Return true if the Shift, Control, or Alt modifier keys are held down, as
requested by options. This is useful in scripting, to allow some user
control over behaviour without having to wait for a keypress.
Checking key modifier status is only supported on some platforms. If invoked
without any options, the @command{keystatus} command returns true if and
only if checking key modifier status is supported.
@end deffn
@node ls
@subsection ls
@deffn Command ls [arg]
List devices or files.
With no arguments, print all devices known to GRUB.
If the argument is a device name enclosed in parentheses (@pxref{Device
syntax}), then list all files at the root directory of that device.
If the argument is a directory given as an absolute file name (@pxref{File
name syntax}), then list the contents of that directory.
@end deffn
@node reboot @node reboot
@subsection reboot @subsection reboot
@ -1220,6 +1314,23 @@ Reboot the computer.
@end deffn @end deffn
@node set
@subsection set
@deffn Command set [envvar=value]
Set the environment variable @var{envvar} to @var{value}. If invoked with no
arguments, print all environment variables with their values.
@end deffn
@node unset
@subsection unset
@deffn Command unset envvar
Unset the environment variable @var{envvar}.
@end deffn
@node Invoking grub-install @node Invoking grub-install
@chapter Invoking grub-install @chapter Invoking grub-install

View file

@ -1,4 +1,4 @@
@set UPDATED 7 Ago 2009 @set UPDATED 7 Ago 2009
@set UPDATED-MONTH Ago 2009 @set UPDATED-MONTH Ago 2009
@set EDITION 1.97~snapshot @set EDITION 1.97~beta3
@set VERSION 1.97~snapshot @set VERSION 1.97~beta3

View file

@ -352,13 +352,18 @@ SUFFIX (grub_efiemu_loadcore_load) (void *core,
grub_efiemu_segment_t segments) grub_efiemu_segment_t segments)
{ {
grub_err_t err; grub_err_t err;
if ((err = grub_efiemu_load_segments (segments, core))) err = grub_efiemu_load_segments (segments, core);
if (err)
return err; return err;
if ((err = grub_efiemu_resolve_symbols (segments, core)))
err = grub_efiemu_resolve_symbols (segments, core);
if (err)
return err; return err;
if ((err = SUFFIX (grub_arch_efiemu_relocate_symbols) (segments,
grub_efiemu_elfsyms, err = SUFFIX (grub_arch_efiemu_relocate_symbols) (segments,
core))) grub_efiemu_elfsyms,
core);
if (err)
return err; return err;
return GRUB_ERR_NONE; return GRUB_ERR_NONE;

165
fs/afs.c
View file

@ -26,10 +26,16 @@
#include <grub/types.h> #include <grub/types.h>
#include <grub/fshelp.h> #include <grub/fshelp.h>
#ifdef MODE_BFS #ifdef MODE_BIGENDIAN
#define GRUB_AFS_FSNAME "befs" #define GRUB_AFS_FSNAME_SUFFIX "_be"
#else #else
#define GRUB_AFS_FSNAME "afs" #define GRUB_AFS_FSNAME_SUFFIX ""
#endif
#ifdef MODE_BFS
#define GRUB_AFS_FSNAME "befs" GRUB_AFS_FSNAME_SUFFIX
#else
#define GRUB_AFS_FSNAME "afs" GRUB_AFS_FSNAME_SUFFIX
#endif #endif
#define GRUB_AFS_DIRECT_BLOCK_COUNT 12 #define GRUB_AFS_DIRECT_BLOCK_COUNT 12
@ -65,14 +71,15 @@
#define GRUB_AFS_NULL_VAL ((grub_afs_bvalue_t)-1) #define GRUB_AFS_NULL_VAL ((grub_afs_bvalue_t)-1)
#define U16(sb, u) (((sb)->byte_order == GRUB_AFS_BO_LITTLE_ENDIAN) ? \ #ifdef MODE_BIGENDIAN
grub_le_to_cpu16 (u) : grub_be_to_cpu16 (u)) #define grub_afs_to_cpu16(x) grub_be_to_cpu16 (x)
#define grub_afs_to_cpu32(x) grub_be_to_cpu32 (x)
#define U32(sb, u) (((sb)->byte_order == GRUB_AFS_BO_LITTLE_ENDIAN) ? \ #define grub_afs_to_cpu64(x) grub_be_to_cpu64 (x)
grub_le_to_cpu32 (u) : grub_be_to_cpu32 (u)) #else
#define grub_afs_to_cpu16(x) grub_le_to_cpu16 (x)
#define U64(sb, u) (((sb)->byte_order == GRUB_AFS_BO_LITTLE_ENDIAN) ? \ #define grub_afs_to_cpu32(x) grub_le_to_cpu32 (x)
grub_le_to_cpu64 (u) : grub_be_to_cpu64 (u)) #define grub_afs_to_cpu64(x) grub_le_to_cpu64 (x)
#endif
#ifdef MODE_BFS #ifdef MODE_BFS
#define B_KEY_INDEX_ALIGN 8 #define B_KEY_INDEX_ALIGN 8
@ -90,12 +97,6 @@
((char *) B_KEY_INDEX_OFFSET (node) + \ ((char *) B_KEY_INDEX_OFFSET (node) + \
node->key_count * 2)) node->key_count * 2))
enum
{
GRUB_AFS_BO_LITTLE_ENDIAN,
GRUB_AFS_BO_BIG_ENDIAN
};
typedef grub_uint64_t grub_afs_off_t; typedef grub_uint64_t grub_afs_off_t;
typedef grub_uint64_t grub_afs_bigtime; typedef grub_uint64_t grub_afs_bigtime;
typedef grub_uint64_t grub_afs_bvalue_t; typedef grub_uint64_t grub_afs_bvalue_t;
@ -154,6 +155,9 @@ struct grub_afs_btree
} __attribute__ ((packed)); } __attribute__ ((packed));
#endif #endif
/* Beware that following structure describes AtheFS and if you write code
which uses currently unused fields check it with both AtheFS and BeFS.
*/
struct grub_afs_sblock struct grub_afs_sblock
{ {
char name[32]; char name[32];
@ -227,8 +231,8 @@ static grub_afs_off_t
grub_afs_run_to_num (struct grub_afs_sblock *sb, grub_afs_run_to_num (struct grub_afs_sblock *sb,
struct grub_afs_blockrun *run) struct grub_afs_blockrun *run)
{ {
return ((grub_afs_off_t) U32 (sb, run->group) * sb->block_per_group + return ((grub_afs_off_t) grub_afs_to_cpu32 (run->group)
U16 (sb, run->start)); * sb->block_per_group + grub_afs_to_cpu16 (run->start));
} }
static grub_err_t static grub_err_t
@ -248,25 +252,25 @@ grub_afs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
struct grub_afs_sblock *sb = &node->data->sblock; struct grub_afs_sblock *sb = &node->data->sblock;
struct grub_afs_datastream *ds = &node->inode.stream; struct grub_afs_datastream *ds = &node->inode.stream;
if (fileblock < U64 (sb, ds->max_direct_range)) if (fileblock < grub_afs_to_cpu64 (ds->max_direct_range))
{ {
int i; int i;
for (i = 0; i < GRUB_AFS_DIRECT_BLOCK_COUNT; i++) for (i = 0; i < GRUB_AFS_DIRECT_BLOCK_COUNT; i++)
{ {
if (fileblock < U16 (sb, ds->direct[i].len)) if (fileblock < grub_afs_to_cpu16 (ds->direct[i].len))
return grub_afs_run_to_num (sb, &ds->direct[i]) + fileblock; return grub_afs_run_to_num (sb, &ds->direct[i]) + fileblock;
fileblock -= U16 (sb, ds->direct[i].len); fileblock -= grub_afs_to_cpu16 (ds->direct[i].len);
} }
} }
else if (fileblock < U64 (sb, ds->max_indirect_range)) else if (fileblock < grub_afs_to_cpu64 (ds->max_indirect_range))
{ {
int ptrs_per_blk = sb->block_size / sizeof (struct grub_afs_blockrun); int ptrs_per_blk = sb->block_size / sizeof (struct grub_afs_blockrun);
struct grub_afs_blockrun indir[ptrs_per_blk]; struct grub_afs_blockrun indir[ptrs_per_blk];
grub_afs_off_t blk = grub_afs_run_to_num (sb, &ds->indirect); grub_afs_off_t blk = grub_afs_run_to_num (sb, &ds->indirect);
int i; int i;
fileblock -= U64 (sb, ds->max_direct_range); fileblock -= grub_afs_to_cpu64 (ds->max_direct_range);
for (i = 0; i < ds->indirect.len; i++, blk++) for (i = 0; i < ds->indirect.len; i++, blk++)
{ {
int j; int j;
@ -279,10 +283,10 @@ grub_afs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
for (j = 0; j < ptrs_per_blk; j++) for (j = 0; j < ptrs_per_blk; j++)
{ {
if (fileblock < U16 (sb, indir[j].len)) if (fileblock < grub_afs_to_cpu16 (indir[j].len))
return grub_afs_run_to_num (sb, &indir[j]) + fileblock; return grub_afs_run_to_num (sb, &indir[j]) + fileblock;
fileblock -= U16 (sb, indir[j].len); fileblock -= grub_afs_to_cpu16 (indir[j].len);
} }
} }
} }
@ -292,7 +296,7 @@ grub_afs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
struct grub_afs_blockrun indir[ptrs_per_blk]; struct grub_afs_blockrun indir[ptrs_per_blk];
/* ([idblk][idptr]) ([dblk][dptr]) [blk] */ /* ([idblk][idptr]) ([dblk][dptr]) [blk] */
int cur_pos = fileblock - U64 (sb, ds->max_indirect_range); int cur_pos = fileblock - grub_afs_to_cpu64 (ds->max_indirect_range);
int dptr_size = GRUB_AFS_BLOCKS_PER_DI_RUN; int dptr_size = GRUB_AFS_BLOCKS_PER_DI_RUN;
int dblk_size = dptr_size * ptrs_per_blk; int dblk_size = dptr_size * ptrs_per_blk;
@ -334,8 +338,7 @@ grub_afs_read_file (grub_fshelp_node_t node,
{ {
return grub_fshelp_read_file (node->data->disk, node, read_hook, return grub_fshelp_read_file (node->data->disk, node, read_hook,
pos, len, buf, grub_afs_read_block, pos, len, buf, grub_afs_read_block,
U64 (&node->data->sblock, grub_afs_to_cpu64 (node->inode.stream.size),
node->inode.stream.size),
node->data->sblock.block_shift node->data->sblock.block_shift
- GRUB_DISK_SECTOR_BITS); - GRUB_DISK_SECTOR_BITS);
} }
@ -344,8 +347,7 @@ static char *
grub_afs_read_symlink (grub_fshelp_node_t node) grub_afs_read_symlink (grub_fshelp_node_t node)
{ {
char *ret; char *ret;
struct grub_afs_sblock *sb = &node->data->sblock; grub_afs_off_t size = grub_afs_to_cpu64 (node->inode.stream.size);
grub_afs_off_t size = U64 (sb, node->inode.stream.size);
if (size == 0) if (size == 0)
{ {
@ -374,27 +376,27 @@ grub_afs_iterate_dir (grub_fshelp_node_t dir,
struct grub_afs_btree head; struct grub_afs_btree head;
char node_data [GRUB_AFS_BNODE_SIZE]; char node_data [GRUB_AFS_BNODE_SIZE];
struct grub_afs_bnode *node = (struct grub_afs_bnode *) node_data; struct grub_afs_bnode *node = (struct grub_afs_bnode *) node_data;
struct grub_afs_sblock *sb = &dir->data->sblock;
int i; int i;
if ((dir->inode.stream.size == 0) if ((dir->inode.stream.size == 0)
|| ((U32 (sb, dir->inode.mode) & GRUB_AFS_S_IFMT) != GRUB_AFS_S_IFDIR)) || ((grub_afs_to_cpu32 (dir->inode.mode) & GRUB_AFS_S_IFMT)
!= GRUB_AFS_S_IFDIR))
return 0; return 0;
grub_afs_read_file (dir, 0, 0, sizeof (head), (char *) &head); grub_afs_read_file (dir, 0, 0, sizeof (head), (char *) &head);
if (grub_errno) if (grub_errno)
return 0; return 0;
grub_afs_read_file (dir, 0, U64 (sb, head.root), grub_afs_read_file (dir, 0, grub_afs_to_cpu64 (head.root),
GRUB_AFS_BNODE_SIZE, (char *) node); GRUB_AFS_BNODE_SIZE, (char *) node);
if (grub_errno) if (grub_errno)
return 0; return 0;
for (i = 0; i < (int) U32 (sb, head.tree_depth) - 1; i++) for (i = 0; i < (int) grub_afs_to_cpu32 (head.tree_depth) - 1; i++)
{ {
grub_afs_bvalue_t blk; grub_afs_bvalue_t blk;
blk = U64(sb, B_KEY_VALUE_OFFSET (node) [0]); blk = grub_afs_to_cpu64(B_KEY_VALUE_OFFSET (node) [0]);
grub_afs_read_file (dir, 0, blk, GRUB_AFS_BNODE_SIZE, (char *) node); grub_afs_read_file (dir, 0, blk, GRUB_AFS_BNODE_SIZE, (char *) node);
if (grub_errno) if (grub_errno)
return 0; return 0;
@ -411,8 +413,9 @@ grub_afs_iterate_dir (grub_fshelp_node_t dir,
index = B_KEY_INDEX_OFFSET (node); index = B_KEY_INDEX_OFFSET (node);
key_start = U16 (sb, (cur_key > 0) ? index[cur_key - 1] : 0); key_start = (cur_key > 0)
key_size = U16 (sb, index[cur_key]) - key_start; ? grub_afs_to_cpu16 (index[cur_key - 1]) : 0;
key_size = grub_afs_to_cpu16 (index[cur_key]) - key_start;
if (key_size > 0) if (key_size > 0)
{ {
char filename [key_size + 1]; char filename [key_size + 1];
@ -425,14 +428,15 @@ grub_afs_iterate_dir (grub_fshelp_node_t dir,
fdiro->data = dir->data; fdiro->data = dir->data;
if (grub_afs_read_inode (dir->data, if (grub_afs_read_inode (dir->data,
U64 (sb, B_KEY_VALUE_OFFSET (node) [cur_key]), grub_afs_to_cpu64
(B_KEY_VALUE_OFFSET (node) [cur_key]),
&fdiro->inode)) &fdiro->inode))
return 0; return 0;
grub_memcpy (filename, &node->key_data[key_start], key_size); grub_memcpy (filename, &node->key_data[key_start], key_size);
filename [key_size] = 0; filename [key_size] = 0;
mode = (U32 (sb, fdiro->inode.mode) & GRUB_AFS_S_IFMT); mode = (grub_afs_to_cpu32 (fdiro->inode.mode) & GRUB_AFS_S_IFMT);
if (mode == GRUB_AFS_S_IFDIR) if (mode == GRUB_AFS_S_IFDIR)
type = GRUB_FSHELP_DIR; type = GRUB_FSHELP_DIR;
else if (mode == GRUB_AFS_S_IFREG) else if (mode == GRUB_AFS_S_IFREG)
@ -447,12 +451,12 @@ grub_afs_iterate_dir (grub_fshelp_node_t dir,
} }
cur_key++; cur_key++;
if (cur_key >= U32 (sb, node->key_count)) if (cur_key >= grub_afs_to_cpu32 (node->key_count))
{ {
if (node->right == GRUB_AFS_NULL_VAL) if (node->right == GRUB_AFS_NULL_VAL)
break; break;
grub_afs_read_file (dir, 0, U64 (sb, node->right), grub_afs_read_file (dir, 0, grub_afs_to_cpu64 (node->right),
GRUB_AFS_BNODE_SIZE, (char *) node); GRUB_AFS_BNODE_SIZE, (char *) node);
if (grub_errno) if (grub_errno)
return 0; return 0;
@ -468,47 +472,20 @@ grub_afs_iterate_dir (grub_fshelp_node_t dir,
static int static int
grub_afs_validate_sblock (struct grub_afs_sblock *sb) grub_afs_validate_sblock (struct grub_afs_sblock *sb)
{ {
if (grub_le_to_cpu32 (sb->magic1) == GRUB_AFS_SBLOCK_MAGIC1) if (grub_afs_to_cpu32 (sb->magic1) == GRUB_AFS_SBLOCK_MAGIC1)
{ {
#ifndef MODE_BFS sb->magic2 = grub_afs_to_cpu32 (sb->magic2);
if (grub_le_to_cpu32 (sb->byte_order) != GRUB_AFS_BO_LITTLE_ENDIAN) sb->magic3 = grub_afs_to_cpu32 (sb->magic3);
return 0; sb->block_shift = grub_afs_to_cpu32 (sb->block_shift);
#endif sb->block_size = grub_afs_to_cpu32 (sb->block_size);
sb->used_blocks = grub_afs_to_cpu64 (sb->used_blocks);
sb->byte_order = GRUB_AFS_BO_LITTLE_ENDIAN; sb->num_blocks = grub_afs_to_cpu64 (sb->num_blocks);
sb->magic2 = grub_le_to_cpu32 (sb->magic2); sb->inode_size = grub_afs_to_cpu32 (sb->inode_size);
sb->magic3 = grub_le_to_cpu32 (sb->magic3); sb->alloc_group_count = grub_afs_to_cpu32 (sb->alloc_group_count);
sb->block_shift = grub_le_to_cpu32 (sb->block_shift); sb->alloc_group_shift = grub_afs_to_cpu32 (sb->alloc_group_shift);
sb->block_size = grub_le_to_cpu32 (sb->block_size); sb->block_per_group = grub_afs_to_cpu32 (sb->block_per_group);
sb->used_blocks = grub_le_to_cpu64 (sb->used_blocks); sb->alloc_group_count = grub_afs_to_cpu32 (sb->alloc_group_count);
sb->num_blocks = grub_le_to_cpu64 (sb->num_blocks); sb->log_size = grub_afs_to_cpu32 (sb->log_size);
sb->inode_size = grub_le_to_cpu32 (sb->inode_size);
sb->alloc_group_count = grub_le_to_cpu32 (sb->alloc_group_count);
sb->alloc_group_shift = grub_le_to_cpu32 (sb->alloc_group_shift);
sb->block_per_group = grub_le_to_cpu32 (sb->block_per_group);
sb->alloc_group_count = grub_le_to_cpu32 (sb->alloc_group_count);
sb->log_size = grub_le_to_cpu32 (sb->log_size);
}
else if (grub_be_to_cpu32 (sb->magic1) == GRUB_AFS_SBLOCK_MAGIC1)
{
#ifndef MODE_BFS
if (grub_be_to_cpu32 (sb->byte_order) != GRUB_AFS_BO_BIG_ENDIAN)
return 0;
#endif
sb->byte_order = GRUB_AFS_BO_BIG_ENDIAN;
sb->magic2 = grub_be_to_cpu32 (sb->magic2);
sb->magic3 = grub_be_to_cpu32 (sb->magic3);
sb->block_shift = grub_be_to_cpu32 (sb->block_shift);
sb->block_size = grub_be_to_cpu32 (sb->block_size);
sb->used_blocks = grub_be_to_cpu64 (sb->used_blocks);
sb->num_blocks = grub_be_to_cpu64 (sb->num_blocks);
sb->inode_size = grub_be_to_cpu32 (sb->inode_size);
sb->alloc_group_count = grub_be_to_cpu32 (sb->alloc_group_count);
sb->alloc_group_shift = grub_be_to_cpu32 (sb->alloc_group_shift);
sb->block_per_group = grub_be_to_cpu32 (sb->block_per_group);
sb->alloc_group_count = grub_be_to_cpu32 (sb->alloc_group_count);
sb->log_size = grub_be_to_cpu32 (sb->log_size);
} }
else else
return 0; return 0;
@ -529,8 +506,8 @@ grub_afs_validate_sblock (struct grub_afs_sblock *sb)
|| ((grub_uint32_t) (1 << sb->alloc_group_shift) != || ((grub_uint32_t) (1 << sb->alloc_group_shift) !=
sb->block_per_group * sb->block_size) sb->block_per_group * sb->block_size)
|| (sb->alloc_group_count * sb->block_per_group < sb->num_blocks) || (sb->alloc_group_count * sb->block_per_group < sb->num_blocks)
|| (U16 (sb, sb->log_block.len) != sb->log_size) || (grub_afs_to_cpu16 (sb->log_block.len) != sb->log_size)
|| (U32 (sb, sb->valid_log_blocks) > sb->log_size) || (grub_afs_to_cpu32 (sb->valid_log_blocks) > sb->log_size)
#endif #endif
) )
return 0; return 0;
@ -594,7 +571,7 @@ grub_afs_open (struct grub_file *file, const char *name)
grub_memcpy (data->inode, &fdiro->inode, sizeof (struct grub_afs_inode)); grub_memcpy (data->inode, &fdiro->inode, sizeof (struct grub_afs_inode));
grub_free (fdiro); grub_free (fdiro);
file->size = U64 (&data->sblock, data->inode->stream.size); file->size = grub_afs_to_cpu64 (data->inode->stream.size);
file->data = data; file->data = data;
file->offset = 0; file->offset = 0;
@ -648,10 +625,10 @@ grub_afs_dir (grub_device_t device, const char *path,
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
info.mtimeset = 1; info.mtimeset = 1;
#ifdef MODE_BFS #ifdef MODE_BFS
info.mtime = U64 (&data->sblock, node->inode.modified_time) >> 16; info.mtime = grub_afs_to_cpu64 (node->inode.modified_time) >> 16;
#else #else
info.mtime = grub_divmod64 (U64 (&data->sblock, info.mtime = grub_divmod64 (grub_afs_to_cpu64 (node->inode.modified_time),
node->inode.modified_time), 1000000, 0); 1000000, 0);
#endif #endif
grub_free (node); grub_free (node);
return hook (filename, &info); return hook (filename, &info);
@ -713,8 +690,12 @@ static struct grub_fs grub_afs_fs = {
.next = 0 .next = 0
}; };
#ifdef MODE_BFS #if defined (MODE_BIGENDIAN) && defined (MODE_BFS)
GRUB_MOD_INIT (befs_be)
#elif defined (MODE_BFS)
GRUB_MOD_INIT (befs) GRUB_MOD_INIT (befs)
#elif defined (MODE_BIGENDIAN)
GRUB_MOD_INIT (afs_be)
#else #else
GRUB_MOD_INIT (afs) GRUB_MOD_INIT (afs)
#endif #endif
@ -723,8 +704,12 @@ GRUB_MOD_INIT (afs)
my_mod = mod; my_mod = mod;
} }
#ifdef MODE_BFS #if defined (MODE_BIGENDIAN) && defined (MODE_BFS)
GRUB_MOD_FINI (befs_be)
#elif defined (MODE_BFS)
GRUB_MOD_FINI (befs) GRUB_MOD_FINI (befs)
#elif defined (MODE_BIGENDIAN)
GRUB_MOD_FINI (afs_be)
#else #else
GRUB_MOD_FINI (afs) GRUB_MOD_FINI (afs)
#endif #endif

2
fs/afs_be.c Normal file
View file

@ -0,0 +1,2 @@
#define MODE_BIGENDIAN 1
#include "afs.c"

4
fs/befs_be.c Normal file
View file

@ -0,0 +1,4 @@
/* befs.c - The native BeOS/Haiku file-system. */
#define MODE_BFS 1
#define MODE_BIGENDIAN 1
#include "afs.c"

View file

@ -243,10 +243,6 @@ grub_hfs_read_file (struct grub_hfs_data *data,
int i; int i;
int blockcnt; int blockcnt;
/* Adjust len so it we can't read past the end of the file. */
if (len > grub_le_to_cpu32 (data->size))
len = grub_le_to_cpu32 (data->size);
blockcnt = ((len + pos) blockcnt = ((len + pos)
+ data->blksz - 1) / data->blksz; + data->blksz - 1) / data->blksz;

View file

@ -469,9 +469,9 @@ grub_hfsplus_mount (grub_disk_t disk)
grub_be_to_cpu64 (data->volheader.extents_file.size); grub_be_to_cpu64 (data->volheader.extents_file.size);
/* Read the essential information about the trees. */ /* Read the essential information about the trees. */
if (! grub_hfsplus_read_file (&data->catalog_tree.file, 0, if (grub_hfsplus_read_file (&data->catalog_tree.file, 0,
sizeof (struct grub_hfsplus_btnode), sizeof (struct grub_hfsplus_btnode),
sizeof (header), (char *) &header)) sizeof (header), (char *) &header) <= 0)
goto fail; goto fail;
data->catalog_tree.root = grub_be_to_cpu32 (header.root); data->catalog_tree.root = grub_be_to_cpu32 (header.root);
@ -479,15 +479,15 @@ grub_hfsplus_mount (grub_disk_t disk)
data->case_sensitive = ((magic == GRUB_HFSPLUSX_MAGIC) && data->case_sensitive = ((magic == GRUB_HFSPLUSX_MAGIC) &&
(header.key_compare == GRUB_HFSPLUSX_BINARYCOMPARE)); (header.key_compare == GRUB_HFSPLUSX_BINARYCOMPARE));
if (! grub_hfsplus_read_file (&data->extoverflow_tree.file, 0, if (grub_hfsplus_read_file (&data->extoverflow_tree.file, 0,
sizeof (struct grub_hfsplus_btnode), sizeof (struct grub_hfsplus_btnode),
sizeof (header), (char *) &header)) sizeof (header), (char *) &header) <= 0)
goto fail; goto fail;
data->extoverflow_tree.root = grub_be_to_cpu32 (header.root); data->extoverflow_tree.root = grub_be_to_cpu32 (header.root);
if (! grub_hfsplus_read_file (&data->extoverflow_tree.file, 0, 0, if (grub_hfsplus_read_file (&data->extoverflow_tree.file, 0, 0,
sizeof (node), (char *) &node)) sizeof (node), (char *) &node) <= 0)
goto fail; goto fail;
data->extoverflow_tree.root = grub_be_to_cpu32 (header.root); data->extoverflow_tree.root = grub_be_to_cpu32 (header.root);
@ -608,10 +608,10 @@ grub_hfsplus_btree_iterate_node (struct grub_hfsplus_btree *btree,
if (! first_node->next) if (! first_node->next)
break; break;
if (! grub_hfsplus_read_file (&btree->file, 0, if (grub_hfsplus_read_file (&btree->file, 0,
(grub_be_to_cpu32 (first_node->next) (grub_be_to_cpu32 (first_node->next)
* btree->nodesize), * btree->nodesize),
btree->nodesize, cnode)) btree->nodesize, cnode) <= 0)
return 1; return 1;
/* Don't skip any record in the next iteration. */ /* Don't skip any record in the next iteration. */
@ -647,12 +647,12 @@ grub_hfsplus_btree_search (struct grub_hfsplus_btree *btree,
int match = 0; int match = 0;
/* Read a node. */ /* Read a node. */
if (! grub_hfsplus_read_file (&btree->file, 0, if (grub_hfsplus_read_file (&btree->file, 0,
(long)currnode * (long)btree->nodesize, (long)currnode * (long)btree->nodesize,
btree->nodesize, (char *) node)) btree->nodesize, (char *) node) <= 0)
{ {
grub_free (node); grub_free (node);
return grub_errno; return grub_error (GRUB_ERR_BAD_FS, "Couldn't read i-node.");
} }
nodedesc = (struct grub_hfsplus_btnode *) node; nodedesc = (struct grub_hfsplus_btnode *) node;

View file

@ -544,10 +544,6 @@ grub_jfs_read_file (struct grub_jfs_data *data,
int i; int i;
int blockcnt; int blockcnt;
/* Adjust len so it we can't read past the end of the file. */
if (len > data->currinode.size)
len = data->currinode.size;
blockcnt = ((len + pos + grub_le_to_cpu32 (data->sblock.blksz) - 1) blockcnt = ((len + pos + grub_le_to_cpu32 (data->sblock.blksz) - 1)
/ grub_le_to_cpu32 (data->sblock.blksz)); / grub_le_to_cpu32 (data->sblock.blksz));

View file

@ -193,8 +193,8 @@ grub_minix_read_file (struct grub_minix_data *data,
int blockcnt; int blockcnt;
/* Adjust len so it we can't read past the end of the file. */ /* Adjust len so it we can't read past the end of the file. */
if (len > GRUB_MINIX_INODE_SIZE (data)) if (len + pos > GRUB_MINIX_INODE_SIZE (data))
len = GRUB_MINIX_INODE_SIZE (data); len = GRUB_MINIX_INODE_SIZE (data) - pos;
blockcnt = (len + pos + GRUB_MINIX_BSIZE - 1) / GRUB_MINIX_BSIZE; blockcnt = (len + pos + GRUB_MINIX_BSIZE - 1) / GRUB_MINIX_BSIZE;

View file

@ -543,7 +543,7 @@ init_file (struct grub_ntfs_file *mft, grub_uint32_t mftno)
if (!pa[8]) if (!pa[8])
mft->size = u32at (pa, 0x10); mft->size = u32at (pa, 0x10);
else else
mft->size = u32at (pa, 0x30); mft->size = u64at (pa, 0x30);
if ((mft->attr.flags & AF_ALST) == 0) if ((mft->attr.flags & AF_ALST) == 0)
mft->attr.attr_end = 0; /* Don't jump to attribute list */ mft->attr.attr_end = 0; /* Don't jump to attribute list */
@ -970,15 +970,6 @@ grub_ntfs_read (grub_file_t file, char *buf, grub_size_t len)
if (file->read_hook) if (file->read_hook)
mft->attr.save_pos = 1; mft->attr.save_pos = 1;
if (file->offset > file->size)
{
grub_error (GRUB_ERR_BAD_FS, "Bad offset");
return -1;
}
if (file->offset + len > file->size)
len = file->size - file->offset;
read_attr (&mft->attr, buf, file->offset, len, 1, file->read_hook); read_attr (&mft->attr, buf, file->offset, len, 1, file->read_hook);
return (grub_errno) ? 0 : len; return (grub_errno) ? 0 : len;
} }

View file

@ -1077,9 +1077,6 @@ grub_reiserfs_read (grub_file_t file, char *buf, grub_size_t len)
grub_disk_addr_t block; grub_disk_addr_t block;
grub_off_t offset; grub_off_t offset;
if (file->offset >= file->size)
return 0;
key.directory_id = node->header.key.directory_id; key.directory_id = node->header.key.directory_id;
key.object_id = node->header.key.object_id; key.object_id = node->header.key.object_id;
key.u.v2.offset_type = 0; key.u.v2.offset_type = 0;

View file

@ -290,8 +290,8 @@ grub_ufs_read_file (struct grub_ufs_data *data,
int blockcnt; int blockcnt;
/* Adjust len so it we can't read past the end of the file. */ /* Adjust len so it we can't read past the end of the file. */
if (len > INODE_SIZE (data)) if (len + pos > INODE_SIZE (data))
len = INODE_SIZE (data); len = INODE_SIZE (data) - pos;
blockcnt = (len + pos + UFS_BLKSZ (sblock) - 1) / UFS_BLKSZ (sblock); blockcnt = (len + pos + UFS_BLKSZ (sblock) - 1) / UFS_BLKSZ (sblock);

View file

@ -160,13 +160,13 @@ static grub_dl_t my_mod;
#define GRUB_XFS_INO_AGBITS(data) \ #define GRUB_XFS_INO_AGBITS(data) \
((data)->sblock.log2_agblk + (data)->sblock.log2_inop) ((data)->sblock.log2_agblk + (data)->sblock.log2_inop)
#define GRUB_XFS_INO_INOINAG(data, ino) \ #define GRUB_XFS_INO_INOINAG(data, ino) \
(grub_be_to_cpu64 (ino) & ((1 << GRUB_XFS_INO_AGBITS (data)) - 1)) (grub_be_to_cpu64 (ino) & ((1LL << GRUB_XFS_INO_AGBITS (data)) - 1))
#define GRUB_XFS_INO_AG(data,ino) \ #define GRUB_XFS_INO_AG(data,ino) \
(grub_be_to_cpu64 (ino) >> GRUB_XFS_INO_AGBITS (data)) (grub_be_to_cpu64 (ino) >> GRUB_XFS_INO_AGBITS (data))
#define GRUB_XFS_FSB_TO_BLOCK(data, fsb) \ #define GRUB_XFS_FSB_TO_BLOCK(data, fsb) \
(((fsb) >> (data)->sblock.log2_agblk) * (data)->agsize \ (((fsb) >> (data)->sblock.log2_agblk) * (data)->agsize \
+ ((fsb) & ((1 << (data)->sblock.log2_agblk) - 1))) + ((fsb) & ((1LL << (data)->sblock.log2_agblk) - 1)))
#define GRUB_XFS_EXTENT_OFFSET(exts,ex) \ #define GRUB_XFS_EXTENT_OFFSET(exts,ex) \
((grub_be_to_cpu32 (exts[ex][0]) & ~(1 << 31)) << 23 \ ((grub_be_to_cpu32 (exts[ex][0]) & ~(1 << 31)) << 23 \
@ -185,7 +185,7 @@ static grub_dl_t my_mod;
#define GRUB_XFS_NEXT_DIRENT(pos,len) \ #define GRUB_XFS_NEXT_DIRENT(pos,len) \
(pos) + GRUB_XFS_ROUND_TO_DIRENT (8 + 1 + len + 2) (pos) + GRUB_XFS_ROUND_TO_DIRENT (8 + 1 + len + 2)
static inline int static inline grub_uint64_t
grub_xfs_inode_block (struct grub_xfs_data *data, grub_xfs_inode_block (struct grub_xfs_data *data,
grub_uint64_t ino) grub_uint64_t ino)
{ {
@ -213,7 +213,7 @@ static grub_err_t
grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino, grub_xfs_read_inode (struct grub_xfs_data *data, grub_uint64_t ino,
struct grub_xfs_inode *inode) struct grub_xfs_inode *inode)
{ {
int block = grub_xfs_inode_block (data, ino); grub_uint64_t block = grub_xfs_inode_block (data, ino);
int offset = grub_xfs_inode_offset (data, ino); int offset = grub_xfs_inode_offset (data, ino);
/* Read the inode. */ /* Read the inode. */

2
gendistlist.sh Normal file → Executable file
View file

@ -39,6 +39,6 @@ for dir in $DISTDIRS; do
find $d -maxdepth 1 -name '*.[chSy]' -o -name '*.mk' -o -name '*.rmk' \ find $d -maxdepth 1 -name '*.[chSy]' -o -name '*.mk' -o -name '*.rmk' \
-o -name '*.rb' -o -name '*.in' -o -name '*.tex' -o -name '*.texi' \ -o -name '*.rb' -o -name '*.in' -o -name '*.tex' -o -name '*.texi' \
-o -name 'grub.cfg' -o -name 'README' -o -name '*.sc' -o -name 'mdate-sh' \ -o -name 'grub.cfg' -o -name 'README' -o -name '*.sc' -o -name 'mdate-sh' \
-o -name '*.sh' | sort -o -name '*.sh' -o -name 'grub-dumpdevtree' -o -name '*.lua' | sort
done done
done done

View file

@ -39,11 +39,13 @@ class Image
def initialize(dir, name) def initialize(dir, name)
@dir = dir @dir = dir
@name = name @name = name
@rule_count = 0
end end
attr_reader :dir, :name attr_reader :dir, :name
def rule(sources) def rule(sources)
prefix = @name.to_var prefix = @name.to_var
@rule_count += 1
exe = @name.suffix('exec') exe = @name.suffix('exec')
objs = sources.collect do |src| objs = sources.collect do |src|
raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src
@ -53,8 +55,16 @@ class Image
deps = objs.collect {|obj| obj.suffix('d')} deps = objs.collect {|obj| obj.suffix('d')}
deps_str = deps.join(' ') deps_str = deps.join(' ')
"CLEANFILES += #{@name} #{exe} #{objs_str} "
MOSTLYCLEANFILES += #{deps_str} clean-image-#{@name}.#{@rule_count}:
rm -f #{@name} #{exe} #{objs_str}
CLEAN_IMAGE_TARGETS += clean-image-#{@name}.#{@rule_count}
mostlyclean-image-#{@name}.#{@rule_count}:
rm -f #{deps_str}
MOSTLYCLEAN_IMAGE_TARGETS += mostlyclean-image-#{@name}.#{@rule_count}
ifneq ($(TARGET_APPLE_CC),1) ifneq ($(TARGET_APPLE_CC),1)
#{@name}: #{exe} #{@name}: #{exe}
@ -94,11 +104,13 @@ class PModule
def initialize(dir, name) def initialize(dir, name)
@dir = dir @dir = dir
@name = name @name = name
@rule_count = 0
end end
attr_reader :dir, :name attr_reader :dir, :name
def rule(sources) def rule(sources)
prefix = @name.to_var prefix = @name.to_var
@rule_count += 1
objs = sources.collect do |src| objs = sources.collect do |src|
raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src
prefix + '-' + src.to_obj prefix + '-' + src.to_obj
@ -114,19 +126,30 @@ class PModule
mod_name = File.basename(@name, '.mod') mod_name = File.basename(@name, '.mod')
symbolic_name = mod_name.sub(/\.[^\.]*$/, '') symbolic_name = mod_name.sub(/\.[^\.]*$/, '')
"CLEANFILES += #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym} "
clean-module-#{@name}.#{@rule_count}:
rm -f #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym}
CLEAN_MODULE_TARGETS += clean-module-#{@name}.#{@rule_count}
ifneq ($(#{prefix}_EXPORTS),no) ifneq ($(#{prefix}_EXPORTS),no)
CLEANFILES += #{defsym} clean-module-#{@name}-symbol.#{@rule_count}:
rm -f #{defsym}
CLEAN_MODULE_TARGETS += clean-module-#{@name}-symbol.#{@rule_count}
DEFSYMFILES += #{defsym} DEFSYMFILES += #{defsym}
endif endif
MOSTLYCLEANFILES += #{deps_str} mostlyclean-module-#{@name}.#{@rule_count}:
rm -f #{deps_str}
MOSTLYCLEAN_MODULE_TARGETS += mostlyclean-module-#{@name}.#{@rule_count}
UNDSYMFILES += #{undsym} UNDSYMFILES += #{undsym}
ifneq ($(TARGET_APPLE_CC),1) ifneq ($(TARGET_APPLE_CC),1)
#{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) #{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF)
-rm -f $@ -rm -f $@
$(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} #{mod_obj} $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} #{mod_obj}
if test ! -z $(TARGET_OBJ2ELF); then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi
$(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@ $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@
else else
#{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) #{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF)
@ -164,6 +187,7 @@ endif
" + objs.collect_with_index do |obj, i| " + objs.collect_with_index do |obj, i|
src = sources[i] src = sources[i]
fake_obj = File.basename(src).suffix('o') fake_obj = File.basename(src).suffix('o')
extra_target = obj.sub(/\.[^\.]*$/, '') + '-extra'
command = 'cmd-' + obj.suffix('lst') command = 'cmd-' + obj.suffix('lst')
fs = 'fs-' + obj.suffix('lst') fs = 'fs-' + obj.suffix('lst')
partmap = 'partmap-' + obj.suffix('lst') partmap = 'partmap-' + obj.suffix('lst')
@ -178,7 +202,11 @@ endif
$(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -MD -c -o $@ $< $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -MD -c -o $@ $<
-include #{dep} -include #{dep}
CLEANFILES += #{command} #{fs} #{partmap} #{handler} #{parttool} clean-module-#{extra_target}.#{@rule_count}:
rm -f #{command} #{fs} #{partmap} #{handler} #{parttool}
CLEAN_MODULE_TARGETS += clean-module-#{extra_target}.#{@rule_count}
COMMANDFILES += #{command} COMMANDFILES += #{command}
FSFILES += #{fs} FSFILES += #{fs}
PARTTOOLFILES += #{parttool} PARTTOOLFILES += #{parttool}
@ -219,6 +247,7 @@ class Utility
def initialize(dir, name) def initialize(dir, name)
@dir = dir @dir = dir
@name = name @name = name
@rule_count = 0
end end
def print_tail() def print_tail()
prefix = @name.to_var prefix = @name.to_var
@ -231,6 +260,7 @@ class Utility
def rule(sources) def rule(sources)
prefix = @name.to_var prefix = @name.to_var
@rule_count += 1
objs = sources.collect do |src| objs = sources.collect do |src|
raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src
prefix + '-' + src.to_obj prefix + '-' + src.to_obj
@ -239,8 +269,17 @@ class Utility
deps = objs.collect {|obj| obj.suffix('d')} deps = objs.collect {|obj| obj.suffix('d')}
deps_str = deps.join(' '); deps_str = deps.join(' ');
"CLEANFILES += #{@name}$(EXEEXT) #{objs_str} "
MOSTLYCLEANFILES += #{deps_str} clean-utility-#{@name}.#{@rule_count}:
rm -f #{@name}$(EXEEXT) #{objs_str}
CLEAN_UTILITY_TARGETS += clean-utility-#{@name}.#{@rule_count}
mostlyclean-utility-#{@name}.#{@rule_count}:
rm -f #{deps_str}
MOSTLYCLEAN_UTILITY_TARGETS += mostlyclean-utility-#{@name}.#{@rule_count}
#{prefix}_OBJECTS += #{objs_str} #{prefix}_OBJECTS += #{objs_str}
" + objs.collect_with_index do |obj, i| " + objs.collect_with_index do |obj, i|

45
include/grub/auth.h Normal file
View file

@ -0,0 +1,45 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 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 <http://www.gnu.org/licenses/>.
*/
#ifndef GRUB_AURH_HEADER
#define GRUB_AUTH_HEADER 1
#include <grub/err.h>
/* Macros for indistinguishibility. */
#define GRUB_ACCESS_DENIED grub_error (GRUB_ERR_ACCESS_DENIED, "Access denied.")
#define GRUB_GET_PASSWORD(string, len) grub_cmdline_get ("Enter password: ", \
string, len, \
'*', 0, 0)
/* Like strcmp but untimeable. Accepts NULL as second argument. */
int grub_auth_strcmp (const char *user_input, const char *template);
/* Like strcmp but untimeable and ignores commas in needle. */
int grub_auth_strword (const char *haystack, const char *needle);
typedef grub_err_t (*grub_auth_callback_t) (const char*, void *);
grub_err_t grub_auth_register_authentication (const char *user,
grub_auth_callback_t callback,
void *arg);
grub_err_t grub_auth_unregister_authentication (const char *user);
grub_err_t grub_auth_authenticate (const char *user);
grub_err_t grub_auth_deauthenticate (const char *user);
grub_err_t grub_auth_check_authentication (const char *userlist);
#endif /* ! GRUB_AUTH_HEADER */

View file

@ -53,7 +53,8 @@ typedef enum
GRUB_ERR_BAD_GZIP_DATA, GRUB_ERR_BAD_GZIP_DATA,
GRUB_ERR_MENU, GRUB_ERR_MENU,
GRUB_ERR_TIMEOUT, GRUB_ERR_TIMEOUT,
GRUB_ERR_IO GRUB_ERR_IO,
GRUB_ERR_ACCESS_DENIED
} }
grub_err_t; grub_err_t;

View file

@ -131,4 +131,52 @@ grub_video_fbblit_blend_index_RGBA8888 (struct grub_video_fbblit_info *dst,
int width, int height, int width, int height,
int offset_x, int offset_y); int offset_x, int offset_y);
void
grub_video_fbblit_replace_32bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_replace_16bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_replace_8bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_blend_XXXA8888_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
void
grub_video_fbblit_blend_XXX565_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y);
#endif /* ! GRUB_FBBLIT_HEADER */ #endif /* ! GRUB_FBBLIT_HEADER */

View file

@ -29,7 +29,7 @@ enum bsd_kernel_types
KERNEL_TYPE_NETBSD, KERNEL_TYPE_NETBSD,
}; };
#define GRUB_BSD_TEMP_BUFFER 0x68000 #define GRUB_BSD_TEMP_BUFFER 0x80000
#define FREEBSD_RB_ASKNAME (1 << 0) /* ask for file name to reboot from */ #define FREEBSD_RB_ASKNAME (1 << 0) /* ask for file name to reboot from */
#define FREEBSD_RB_SINGLE (1 << 1) /* reboot to single user only */ #define FREEBSD_RB_SINGLE (1 << 1) /* reboot to single user only */
@ -157,6 +157,8 @@ struct grub_openbsd_bios_mmap
grub_uint64_t len; grub_uint64_t len;
#define OPENBSD_MMAP_AVAILABLE 1 #define OPENBSD_MMAP_AVAILABLE 1
#define OPENBSD_MMAP_RESERVED 2 #define OPENBSD_MMAP_RESERVED 2
#define OPENBSD_MMAP_ACPI 3
#define OPENBSD_MMAP_NVS 4
grub_uint32_t type; grub_uint32_t type;
}; };
@ -189,6 +191,8 @@ struct grub_openbsd_bootargs
#define NETBSD_AB_VERBOSE (1 << 17) /* boot verbosely */ #define NETBSD_AB_VERBOSE (1 << 17) /* boot verbosely */
#define NETBSD_AB_SILENT (1 << 18) /* boot silently */ #define NETBSD_AB_SILENT (1 << 18) /* boot silently */
#define NETBSD_AB_DEBUG (1 << 19) /* boot with debug messages */ #define NETBSD_AB_DEBUG (1 << 19) /* boot with debug messages */
#define NETBSD_AB_NOSMP (1 << 28) /* Boot without SMP support. */
#define NETBSD_AB_NOACPI (1 << 29) /* Boot without ACPI support. */
struct grub_netbsd_bootinfo struct grub_netbsd_bootinfo
{ {
@ -199,6 +203,7 @@ struct grub_netbsd_bootinfo
#define NETBSD_BTINFO_BOOTPATH 0 #define NETBSD_BTINFO_BOOTPATH 0
#define NETBSD_BTINFO_ROOTDEVICE 1 #define NETBSD_BTINFO_ROOTDEVICE 1
#define NETBSD_BTINFO_BOOTDISK 3 #define NETBSD_BTINFO_BOOTDISK 3
#define NETBSD_BTINFO_MEMMAP 9
struct grub_netbsd_btinfo_common struct grub_netbsd_btinfo_common
{ {
@ -206,6 +211,23 @@ struct grub_netbsd_btinfo_common
int type; int type;
}; };
struct grub_netbsd_btinfo_mmap_header
{
struct grub_netbsd_btinfo_common common;
grub_uint32_t count;
};
struct grub_netbsd_btinfo_mmap_entry
{
grub_uint64_t addr;
grub_uint64_t len;
#define NETBSD_MMAP_AVAILABLE 1
#define NETBSD_MMAP_RESERVED 2
#define NETBSD_MMAP_ACPI 3
#define NETBSD_MMAP_NVS 4
grub_uint32_t type;
};
struct grub_netbsd_btinfo_bootpath struct grub_netbsd_btinfo_bootpath
{ {
struct grub_netbsd_btinfo_common common; struct grub_netbsd_btinfo_common common;

View file

@ -77,8 +77,19 @@
/* The data segment of the pseudo real mode. */ /* The data segment of the pseudo real mode. */
#define GRUB_MEMORY_MACHINE_PSEUDO_REAL_DSEG 0x20 #define GRUB_MEMORY_MACHINE_PSEUDO_REAL_DSEG 0x20
#define GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR 0x400
#ifndef ASM_FILE #ifndef ASM_FILE
/* See http://heim.ifi.uio.no/~stanisls/helppc/bios_data_area.html for a
description of the BIOS Data Area layout. */
struct grub_machine_bios_data_area
{
grub_uint8_t unused1[0x17];
grub_uint8_t keyboard_flag_lower; /* 0x17 */
grub_uint8_t unused2[0xf0 - 0x18];
};
struct grub_machine_mmap_entry struct grub_machine_mmap_entry
{ {
grub_uint32_t size; grub_uint32_t size;

View file

@ -1,6 +1,26 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 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 <http://www.gnu.org/licenses/>.
*/
#ifndef GRUB_CPU_XNU_H #ifndef GRUB_CPU_XNU_H
#define GRUB_CPU_XNU_H 1 #define GRUB_CPU_XNU_H 1
#include <grub/err.h>
#define GRUB_XNU_PAGESIZE 4096 #define GRUB_XNU_PAGESIZE 4096
typedef grub_uint32_t grub_xnu_ptr_t; typedef grub_uint32_t grub_xnu_ptr_t;

View file

@ -32,6 +32,12 @@ struct grub_menu_entry
/* The title name. */ /* The title name. */
const char *title; const char *title;
/* If set means not everybody is allowed to boot this entry. */
int restricted;
/* Allowed users. */
const char *users;
/* The classes associated with the menu entry: /* The classes associated with the menu entry:
used to choose an icon or other style attributes. used to choose an icon or other style attributes.
This is a dummy head node for the linked list, so for an entry E, This is a dummy head node for the linked list, so for an entry E,

View file

@ -37,8 +37,42 @@ void *EXPORT_FUNC(grub_memmove) (void *dest, const void *src, grub_size_t n);
char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_strcpy) (char *dest, const char *src);
char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c); char *EXPORT_FUNC(grub_strncpy) (char *dest, const char *src, int c);
char *EXPORT_FUNC(grub_stpcpy) (char *dest, const char *src); char *EXPORT_FUNC(grub_stpcpy) (char *dest, const char *src);
char *EXPORT_FUNC(grub_strcat) (char *dest, const char *src);
char *EXPORT_FUNC(grub_strncat) (char *dest, const char *src, int c); static inline char *
grub_strcat (char *dest, const char *src)
{
char *p = dest;
while (*p)
p++;
while ((*p = *src) != '\0')
{
p++;
src++;
}
return dest;
}
static inline char *
grub_strncat (char *dest, const char *src, int c)
{
char *p = dest;
while (*p)
p++;
while ((*p = *src) != '\0' && c--)
{
p++;
src++;
}
*p = '\0';
return dest;
}
/* Prototypes for aliases. */ /* Prototypes for aliases. */
#if !defined (GRUB_UTIL) || !defined (APPLE_CC) #if !defined (GRUB_UTIL) || !defined (APPLE_CC)
@ -49,19 +83,41 @@ void *EXPORT_FUNC(memcpy) (void *dest, const void *src, grub_size_t n);
int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n); int EXPORT_FUNC(grub_memcmp) (const void *s1, const void *s2, grub_size_t n);
int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2); int EXPORT_FUNC(grub_strcmp) (const char *s1, const char *s2);
int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n); int EXPORT_FUNC(grub_strncmp) (const char *s1, const char *s2, grub_size_t n);
int EXPORT_FUNC(grub_strcasecmp) (const char *s1, const char *s2);
int EXPORT_FUNC(grub_strncasecmp) (const char *s1, const char *s2, grub_size_t n);
char *EXPORT_FUNC(grub_strchr) (const char *s, int c); char *EXPORT_FUNC(grub_strchr) (const char *s, int c);
char *EXPORT_FUNC(grub_strrchr) (const char *s, int c); char *EXPORT_FUNC(grub_strrchr) (const char *s, int c);
int EXPORT_FUNC(grub_strword) (const char *s, const char *w); int EXPORT_FUNC(grub_strword) (const char *s, const char *w);
char *EXPORT_FUNC(grub_strstr) (const char *haystack, const char *needle); char *EXPORT_FUNC(grub_strstr) (const char *haystack, const char *needle);
int EXPORT_FUNC(grub_iswordseparator) (int c);
int EXPORT_FUNC(grub_isspace) (int c); int EXPORT_FUNC(grub_isspace) (int c);
int EXPORT_FUNC(grub_isprint) (int c); int EXPORT_FUNC(grub_isprint) (int c);
int EXPORT_FUNC(grub_isalpha) (int c);
int EXPORT_FUNC(grub_isgraph) (int c); static inline int
int EXPORT_FUNC(grub_isdigit) (int c); grub_isalpha (int c)
int EXPORT_FUNC(grub_tolower) (int c); {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
static inline int
grub_isgraph (int c)
{
return (c >= '!' && c <= '~');
}
static inline int
grub_isdigit (int c)
{
return (c >= '0' && c <= '9');
}
static inline int
grub_tolower (int c)
{
if (c >= 'A' && c <= 'Z')
return c - 'A' + 'a';
return c;
}
static inline int static inline int
grub_toupper (int c) grub_toupper (int c)
{ {
@ -71,6 +127,40 @@ grub_toupper (int c)
return c; return c;
} }
static inline int
grub_strcasecmp (const char *s1, const char *s2)
{
while (*s1 && *s2)
{
if (grub_tolower (*s1) != grub_tolower (*s2))
break;
s1++;
s2++;
}
return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
}
static inline int
grub_strncasecmp (const char *s1, const char *s2, grub_size_t n)
{
if (n == 0)
return 0;
while (*s1 && *s2 && --n)
{
if (grub_tolower (*s1) != grub_tolower (*s2))
break;
s1++;
s2++;
}
return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
}
unsigned long EXPORT_FUNC(grub_strtoul) (const char *str, char **end, int base); unsigned long EXPORT_FUNC(grub_strtoul) (const char *str, char **end, int base);
unsigned long long EXPORT_FUNC(grub_strtoull) (const char *str, char **end, int base); unsigned long long EXPORT_FUNC(grub_strtoull) (const char *str, char **end, int base);
char *EXPORT_FUNC(grub_strdup) (const char *s); char *EXPORT_FUNC(grub_strdup) (const char *s);

View file

@ -99,7 +99,7 @@
#define GRUB_PC_PARTITION_OPENBSD_TYPE_RAID 19 #define GRUB_PC_PARTITION_OPENBSD_TYPE_RAID 19
/* The BSD partition entry. */ /* The BSD partition entry. */
struct grub_pc_partition_bsd_entry struct grub_msdos_partition_bsd_entry
{ {
grub_uint32_t size; grub_uint32_t size;
grub_uint32_t offset; grub_uint32_t offset;
@ -110,7 +110,7 @@ struct grub_pc_partition_bsd_entry
} __attribute__ ((packed)); } __attribute__ ((packed));
/* The BSD disk label. Only define members useful for GRUB. */ /* The BSD disk label. Only define members useful for GRUB. */
struct grub_pc_partition_disk_label struct grub_msdos_partition_disk_label
{ {
grub_uint32_t magic; grub_uint32_t magic;
grub_uint8_t padding[128]; grub_uint8_t padding[128];
@ -119,11 +119,11 @@ struct grub_pc_partition_disk_label
grub_uint16_t num_partitions; grub_uint16_t num_partitions;
grub_uint32_t boot_size; grub_uint32_t boot_size;
grub_uint32_t superblock_size; grub_uint32_t superblock_size;
struct grub_pc_partition_bsd_entry entries[GRUB_PC_PARTITION_BSD_MAX_ENTRIES]; struct grub_msdos_partition_bsd_entry entries[GRUB_PC_PARTITION_BSD_MAX_ENTRIES];
} __attribute__ ((packed)); } __attribute__ ((packed));
/* The partition entry. */ /* The partition entry. */
struct grub_pc_partition_entry struct grub_msdos_partition_entry
{ {
/* If active, 0x80, otherwise, 0x00. */ /* If active, 0x80, otherwise, 0x00. */
grub_uint8_t flag; grub_uint8_t flag;
@ -155,20 +155,20 @@ struct grub_pc_partition_entry
} __attribute__ ((packed)); } __attribute__ ((packed));
/* The structure of MBR. */ /* The structure of MBR. */
struct grub_pc_partition_mbr struct grub_msdos_partition_mbr
{ {
/* The code area (actually, including BPB). */ /* The code area (actually, including BPB). */
grub_uint8_t code[446]; grub_uint8_t code[446];
/* Four partition entries. */ /* Four partition entries. */
struct grub_pc_partition_entry entries[4]; struct grub_msdos_partition_entry entries[4];
/* The signature 0xaa55. */ /* The signature 0xaa55. */
grub_uint16_t signature; grub_uint16_t signature;
} __attribute__ ((packed)); } __attribute__ ((packed));
struct grub_pc_partition struct grub_msdos_partition
{ {
/* The DOS partition number. */ /* The DOS partition number. */
int dos_part; int dos_part;
@ -187,13 +187,13 @@ struct grub_pc_partition
}; };
static inline int static inline int
grub_pc_partition_is_empty (int type) grub_msdos_partition_is_empty (int type)
{ {
return (type == GRUB_PC_PARTITION_TYPE_NONE); return (type == GRUB_PC_PARTITION_TYPE_NONE);
} }
static inline int static inline int
grub_pc_partition_is_extended (int type) grub_msdos_partition_is_extended (int type)
{ {
return (type == GRUB_PC_PARTITION_TYPE_EXTENDED return (type == GRUB_PC_PARTITION_TYPE_EXTENDED
|| type == GRUB_PC_PARTITION_TYPE_WIN95_EXTENDED || type == GRUB_PC_PARTITION_TYPE_WIN95_EXTENDED
@ -201,7 +201,7 @@ grub_pc_partition_is_extended (int type)
} }
static inline int static inline int
grub_pc_partition_is_bsd (int type) grub_msdos_partition_is_bsd (int type)
{ {
return (type == GRUB_PC_PARTITION_TYPE_FREEBSD return (type == GRUB_PC_PARTITION_TYPE_FREEBSD
|| type == GRUB_PC_PARTITION_TYPE_OPENBSD || type == GRUB_PC_PARTITION_TYPE_OPENBSD

View file

@ -56,7 +56,7 @@ void grub_cmdline_run (int nested);
/* Defined in `cmdline.c'. */ /* Defined in `cmdline.c'. */
int grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len, int grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
int echo_char, int readline); int echo_char, int readline, int history);
grub_err_t grub_set_history (int newsize); grub_err_t grub_set_history (int newsize);
/* Defined in `completion.c'. */ /* Defined in `completion.c'. */

View file

@ -133,7 +133,7 @@ struct grub_fshelp_node
{ {
struct grub_ntfs_data *data; struct grub_ntfs_data *data;
char *buf; char *buf;
grub_uint32_t size; grub_uint64_t size;
grub_uint32_t ino; grub_uint32_t ino;
int inode_read; int inode_read;
struct grub_ntfs_attr attr; struct grub_ntfs_attr attr;

View file

@ -84,8 +84,8 @@ void EXPORT_FUNC(grub_partition_map_register) (grub_partition_map_t partmap);
void EXPORT_FUNC(grub_partition_map_unregister) (grub_partition_map_t partmap); void EXPORT_FUNC(grub_partition_map_unregister) (grub_partition_map_t partmap);
#ifdef GRUB_UTIL #ifdef GRUB_UTIL
void grub_pc_partition_map_init (void); void grub_msdos_partition_map_init (void);
void grub_pc_partition_map_fini (void); void grub_msdos_partition_map_fini (void);
void grub_amiga_partition_map_init (void); void grub_amiga_partition_map_init (void);
void grub_amiga_partition_map_fini (void); void grub_amiga_partition_map_fini (void);
void grub_apple_partition_map_init (void); void grub_apple_partition_map_init (void);

View file

@ -1,6 +1,6 @@
/* /*
* GRUB -- GRand Unified Bootloader * GRUB -- GRand Unified Bootloader
* Copyright (C) 2002,2003,2005,2007,2008 Free Software Foundation, Inc. * Copyright (C) 2002,2003,2005,2007,2008,2009 Free Software Foundation, Inc.
* *
* GRUB is free software: you can redistribute it and/or modify * GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -72,6 +72,12 @@ grub_term_color_state;
#define GRUB_TERM_NEED_INIT (1 << 16) #define GRUB_TERM_NEED_INIT (1 << 16)
/* Bitmasks for modifier keys returned by grub_getkeystatus. */
#define GRUB_TERM_STATUS_SHIFT (1 << 0)
#define GRUB_TERM_STATUS_CTRL (1 << 1)
#define GRUB_TERM_STATUS_ALT (1 << 2)
/* Unicode characters for fancy graphics. */ /* Unicode characters for fancy graphics. */
#define GRUB_TERM_DISP_LEFT 0x2190 #define GRUB_TERM_DISP_LEFT 0x2190
#define GRUB_TERM_DISP_UP 0x2191 #define GRUB_TERM_DISP_UP 0x2191
@ -157,6 +163,9 @@ struct grub_term_input
/* Get a character. */ /* Get a character. */
int (*getkey) (void); int (*getkey) (void);
/* Get keyboard modifier status. */
int (*getkeystatus) (void);
}; };
typedef struct grub_term_input *grub_term_input_t; typedef struct grub_term_input *grub_term_input_t;
@ -275,6 +284,7 @@ void EXPORT_FUNC(grub_putcode) (grub_uint32_t code);
grub_ssize_t EXPORT_FUNC(grub_getcharwidth) (grub_uint32_t code); grub_ssize_t EXPORT_FUNC(grub_getcharwidth) (grub_uint32_t code);
int EXPORT_FUNC(grub_getkey) (void); int EXPORT_FUNC(grub_getkey) (void);
int EXPORT_FUNC(grub_checkkey) (void); int EXPORT_FUNC(grub_checkkey) (void);
int EXPORT_FUNC(grub_getkeystatus) (void);
grub_uint16_t EXPORT_FUNC(grub_getwh) (void); grub_uint16_t EXPORT_FUNC(grub_getwh) (void);
grub_uint16_t EXPORT_FUNC(grub_getxy) (void); grub_uint16_t EXPORT_FUNC(grub_getxy) (void);
void EXPORT_FUNC(grub_gotoxy) (grub_uint8_t x, grub_uint8_t y); void EXPORT_FUNC(grub_gotoxy) (grub_uint8_t x, grub_uint8_t y);

View file

@ -112,6 +112,13 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
{ {
grub_ssize_t res; grub_ssize_t res;
if (file->offset > file->size)
{
grub_error (GRUB_ERR_OUT_OF_RANGE,
"Attempt to read past the end of file.");
return -1;
}
if (len == 0 || len > file->size - file->offset) if (len == 0 || len > file->size - file->offset)
len = file->size - file->offset; len = file->size - file->offset;

View file

@ -37,7 +37,7 @@
* Note: GRUB is compiled with the options -mrtd and -mregparm=3. * Note: GRUB is compiled with the options -mrtd and -mregparm=3.
* So the first three arguments are passed in %eax, %edx, and %ecx, * So the first three arguments are passed in %eax, %edx, and %ecx,
* respectively, and if a function has a fixed number of arguments * respectively, and if a function has a fixed number of arguments
* and the number if greater than three, the function must return * and the number is greater than three, the function must return
* with "ret $N" where N is ((the number of arguments) - 3) * 4. * with "ret $N" where N is ((the number of arguments) - 3) * 4.
*/ */
@ -1761,18 +1761,18 @@ FUNCTION(grub_vbe_bios_getset_dac_palette_width)
movw $0x4f08, %ax movw $0x4f08, %ax
int $0x10 int $0x10
movw %ax, %dx /* real_to_prot destroys %eax. */ movw %ax, %cx /* real_to_prot destroys %eax. */
DATA32 call real_to_prot DATA32 call real_to_prot
.code32 .code32
/* Move result back to *dac_mask_size. */ /* Move result back to *dac_mask_size. */
xorl %eax, %eax
movb %bh, %al movb %bh, %al
movl %eax, (%edx) movl %eax, (%edx)
/* Return value in %eax. */ /* Return value in %eax. */
xorl %eax, %eax movw %cx, %ax
movw %dx, %ax
popl %ebx popl %ebx
popl %ebp popl %ebp

View file

@ -24,6 +24,12 @@
#include <grub/term.h> #include <grub/term.h>
#include <grub/env.h> #include <grub/env.h>
static int
grub_iswordseparator (int c)
{
return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&');
}
void * void *
grub_memmove (void *dest, const void *src, grub_size_t n) grub_memmove (void *dest, const void *src, grub_size_t n)
{ {
@ -97,42 +103,6 @@ grub_stpcpy (char *dest, const char *src)
return d - 1; return d - 1;
} }
char *
grub_strcat (char *dest, const char *src)
{
char *p = dest;
while (*p)
p++;
while ((*p = *src) != '\0')
{
p++;
src++;
}
return dest;
}
char *
grub_strncat (char *dest, const char *src, int c)
{
char *p = dest;
while (*p)
p++;
while ((*p = *src) != '\0' && c--)
{
p++;
src++;
}
*p = '\0';
return dest;
}
int int
grub_printf (const char *fmt, ...) grub_printf (const char *fmt, ...)
{ {
@ -250,39 +220,6 @@ grub_strncmp (const char *s1, const char *s2, grub_size_t n)
return (int) *s1 - (int) *s2; return (int) *s1 - (int) *s2;
} }
int
grub_strcasecmp (const char *s1, const char *s2)
{
while (*s1 && *s2)
{
if (grub_tolower (*s1) != grub_tolower (*s2))
break;
s1++;
s2++;
}
return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
}
int
grub_strncasecmp (const char *s1, const char *s2, grub_size_t n)
{
if (n == 0)
return 0;
while (*s1 && *s2 && --n)
{
if (grub_tolower (*s1) != grub_tolower (*s2))
break;
s1++;
s2++;
}
return (int) grub_tolower (*s1) - (int) grub_tolower (*s2);
}
char * char *
grub_strchr (const char *s, int c) grub_strchr (const char *s, int c)
{ {
@ -394,12 +331,6 @@ grub_strword (const char *haystack, const char *needle)
return 0; return 0;
} }
int
grub_iswordseparator (int c)
{
return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&');
}
int int
grub_isspace (int c) grub_isspace (int c)
{ {
@ -412,33 +343,6 @@ grub_isprint (int c)
return (c >= ' ' && c <= '~'); return (c >= ' ' && c <= '~');
} }
int
grub_isalpha (int c)
{
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
int
grub_isdigit (int c)
{
return (c >= '0' && c <= '9');
}
int
grub_isgraph (int c)
{
return (c >= '!' && c <= '~');
}
int
grub_tolower (int c)
{
if (c >= 'A' && c <= 'Z')
return c - 'A' + 'a';
return c;
}
unsigned long unsigned long
grub_strtoul (const char *str, char **end, int base) grub_strtoul (const char *str, char **end, int base)

View file

@ -61,7 +61,8 @@ grub_rescue_parse_line (char *line, grub_reader_getline_t getline)
else else
{ {
grub_printf ("Unknown command `%s'\n", name); grub_printf ("Unknown command `%s'\n", name);
grub_printf ("Try `help' for usage\n"); if (grub_command_find ("help"))
grub_printf ("Try `help' for usage\n");
} }
quit: quit:

View file

@ -140,6 +140,15 @@ grub_checkkey (void)
return (grub_cur_term_input->checkkey) (); return (grub_cur_term_input->checkkey) ();
} }
int
grub_getkeystatus (void)
{
if (grub_cur_term_input->getkeystatus)
return (grub_cur_term_input->getkeystatus) ();
else
return 0;
}
grub_uint16_t grub_uint16_t
grub_getxy (void) grub_getxy (void)
{ {

View file

@ -33,12 +33,14 @@
#include <grub/gzio.h> #include <grub/gzio.h>
#include <grub/aout.h> #include <grub/aout.h>
#include <grub/command.h> #include <grub/command.h>
#include <grub/extcmd.h>
#ifdef GRUB_MACHINE_PCBIOS #ifdef GRUB_MACHINE_PCBIOS
#include <grub/machine/biosnum.h> #include <grub/machine/biosnum.h>
#endif
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/device.h> #include <grub/device.h>
#include <grub/partition.h> #include <grub/partition.h>
#endif
#define ALIGN_DWORD(a) ALIGN_UP (a, 4) #define ALIGN_DWORD(a) ALIGN_UP (a, 4)
#define ALIGN_QWORD(a) ALIGN_UP (a, 8) #define ALIGN_QWORD(a) ALIGN_UP (a, 8)
@ -54,33 +56,80 @@ static grub_uint32_t bootflags;
static char *mod_buf; static char *mod_buf;
static grub_uint32_t mod_buf_len, mod_buf_max, kern_end_mdofs; static grub_uint32_t mod_buf_len, mod_buf_max, kern_end_mdofs;
static int is_elf_kernel, is_64bit; static int is_elf_kernel, is_64bit;
static char *netbsd_root = NULL;
static const struct grub_arg_option freebsd_opts[] =
{
{"dual", 'D', 0, "Display output on all consoles.", 0, 0},
{"serial", 'h', 0, "Use serial console.", 0, 0},
{"askname", 'a', 0, "Ask for file name to reboot from.", 0, 0},
{"cdrom", 'C', 0, "Use cdrom as root.", 0, 0},
{"config", 'c', 0, "Invoke user configuration routing.", 0, 0},
{"kdb", 'd', 0, "Enter in KDB on boot.", 0, 0},
{"gdb", 'g', 0, "Use GDB remote debugger instead of DDB.", 0, 0},
{"mute", 'm', 0, "Disable all boot output.", 0, 0},
{"nointr", 'n', 0, "", 0, 0},
{"pause", 'p', 0, "Wait for keypress after every line of output.", 0, 0},
{"quiet", 'q', 0, "", 0, 0},
{"dfltroot", 'r', 0, "Use compiled-in rootdev.", 0, 0},
{"single", 's', 0, "Boot into single mode.", 0, 0},
{"verbose", 'v', 0, "Boot with verbose messages.", 0, 0},
{0, 0, 0, 0, 0, 0}
};
static const char freebsd_opts[] = "DhaCcdgmnpqrsv";
static const grub_uint32_t freebsd_flags[] = static const grub_uint32_t freebsd_flags[] =
{ {
FREEBSD_RB_DUAL, FREEBSD_RB_SERIAL, FREEBSD_RB_ASKNAME, FREEBSD_RB_DUAL, FREEBSD_RB_SERIAL, FREEBSD_RB_ASKNAME,
FREEBSD_RB_CDROM, FREEBSD_RB_CONFIG, FREEBSD_RB_KDB, FREEBSD_RB_CDROM, FREEBSD_RB_CONFIG, FREEBSD_RB_KDB,
FREEBSD_RB_GDB, FREEBSD_RB_MUTE, FREEBSD_RB_NOINTR, FREEBSD_RB_GDB, FREEBSD_RB_MUTE, FREEBSD_RB_NOINTR,
FREEBSD_RB_PAUSE, FREEBSD_RB_QUIET, FREEBSD_RB_DFLTROOT, FREEBSD_RB_PAUSE, FREEBSD_RB_QUIET, FREEBSD_RB_DFLTROOT,
FREEBSD_RB_SINGLE, FREEBSD_RB_VERBOSE FREEBSD_RB_SINGLE, FREEBSD_RB_VERBOSE, 0
}; };
static const char openbsd_opts[] = "abcsd"; static const struct grub_arg_option openbsd_opts[] =
{
{"askname", 'a', 0, "Ask for file name to reboot from.", 0, 0},
{"halt", 'b', 0, "Don't reboot, just halt.", 0, 0},
{"config", 'c', 0, "Change configured devices.", 0, 0},
{"single", 's', 0, "Boot into single mode.", 0, 0},
{"kdb", 'd', 0, "Enter in KDB on boot.", 0, 0},
{0, 0, 0, 0, 0, 0}
};
static const grub_uint32_t openbsd_flags[] = static const grub_uint32_t openbsd_flags[] =
{ {
OPENBSD_RB_ASKNAME, OPENBSD_RB_HALT, OPENBSD_RB_CONFIG, OPENBSD_RB_ASKNAME, OPENBSD_RB_HALT, OPENBSD_RB_CONFIG,
OPENBSD_RB_SINGLE, OPENBSD_RB_KDB OPENBSD_RB_SINGLE, OPENBSD_RB_KDB, 0
}; };
static const char netbsd_opts[] = "abcdmqsvxz"; static const struct grub_arg_option netbsd_opts[] =
{
{"no-smp", '1', 0, "Disable SMP.", 0, 0},
{"no-acpi", '2', 0, "Disable ACPI.", 0, 0},
{"askname", 'a', 0, "Ask for file name to reboot from.", 0, 0},
{"halt", 'b', 0, "Don't reboot, just halt.", 0, 0},
{"config", 'c', 0, "Change configured devices.", 0, 0},
{"kdb", 'd', 0, "Enter in KDB on boot.", 0, 0},
{"miniroot", 'm', 0, "", 0, 0},
{"quiet", 'q', 0, "Don't display boot diagnostic messages.", 0, 0},
{"single", 's', 0, "Boot into single mode.", 0, 0},
{"verbose", 'v', 0, "Boot with verbose messages.", 0, 0},
{"debug", 'x', 0, "Boot with debug messages.", 0, 0},
{"silent", 'z', 0, "Supress normal output (warnings remain).", 0, 0},
{"root", 'r', 0, "Set root device.", "DEVICE", ARG_TYPE_STRING},
{0, 0, 0, 0, 0, 0}
};
static const grub_uint32_t netbsd_flags[] = static const grub_uint32_t netbsd_flags[] =
{ {
NETBSD_RB_ASKNAME, NETBSD_RB_HALT, NETBSD_RB_USERCONFIG, NETBSD_AB_NOSMP, NETBSD_AB_NOACPI, NETBSD_RB_ASKNAME,
NETBSD_RB_KDB, NETBSD_RB_MINIROOT, NETBSD_AB_QUIET, NETBSD_RB_HALT, NETBSD_RB_USERCONFIG, NETBSD_RB_KDB,
NETBSD_RB_SINGLE, NETBSD_AB_VERBOSE, NETBSD_AB_DEBUG, NETBSD_RB_MINIROOT, NETBSD_AB_QUIET, NETBSD_RB_SINGLE,
NETBSD_AB_SILENT NETBSD_AB_VERBOSE, NETBSD_AB_DEBUG, NETBSD_AB_SILENT, 0
}; };
#define NETBSD_ROOT_ARG (ARRAY_SIZE (netbsd_flags) - 1)
static void static void
grub_bsd_get_device (grub_uint32_t * biosdev, grub_bsd_get_device (grub_uint32_t * biosdev,
grub_uint32_t * unit, grub_uint32_t * unit,
@ -89,7 +138,11 @@ grub_bsd_get_device (grub_uint32_t * biosdev,
char *p; char *p;
grub_device_t dev; grub_device_t dev;
#ifdef GRUB_MACHINE_PCBIOS
*biosdev = grub_get_root_biosnumber () & 0xff; *biosdev = grub_get_root_biosnumber () & 0xff;
#else
*biosdev = 0xff;
#endif
*unit = (*biosdev & 0x7f); *unit = (*biosdev & 0x7f);
*slice = 0xff; *slice = 0xff;
*part = 0xff; *part = 0xff;
@ -525,6 +578,14 @@ grub_openbsd_boot (void)
pm->type = OPENBSD_MMAP_AVAILABLE; pm->type = OPENBSD_MMAP_AVAILABLE;
break; break;
case GRUB_MACHINE_MEMORY_ACPI:
pm->type = OPENBSD_MMAP_ACPI;
break;
case GRUB_MACHINE_MEMORY_NVS:
pm->type = OPENBSD_MMAP_NVS;
break;
default: default:
pm->type = OPENBSD_MMAP_RESERVED; pm->type = OPENBSD_MMAP_RESERVED;
break; break;
@ -540,6 +601,12 @@ grub_openbsd_boot (void)
pm = (struct grub_openbsd_bios_mmap *) (pa + 1); pm = (struct grub_openbsd_bios_mmap *) (pa + 1);
grub_mmap_iterate (hook); grub_mmap_iterate (hook);
/* Memory map terminator. */
pm->addr = 0;
pm->len = 0;
pm->type = 0;
pm++;
pa->ba_size = (char *) pm - (char *) pa; pa->ba_size = (char *) pm - (char *) pa;
pa->ba_next = (struct grub_openbsd_bootargs *) pm; pa->ba_next = (struct grub_openbsd_bootargs *) pm;
pa = pa->ba_next; pa = pa->ba_next;
@ -551,8 +618,8 @@ grub_openbsd_boot (void)
(part << OPENBSD_B_PARTSHIFT)); (part << OPENBSD_B_PARTSHIFT));
grub_unix_real_boot (entry, bootflags, bootdev, OPENBSD_BOOTARG_APIVER, grub_unix_real_boot (entry, bootflags, bootdev, OPENBSD_BOOTARG_APIVER,
0, grub_mmap_get_upper () >> 10, 0, (grub_uint32_t) (grub_mmap_get_upper () >> 10),
grub_mmap_get_lower () >> 10, (grub_uint32_t) (grub_mmap_get_lower () >> 10),
(char *) pa - buf, buf); (char *) pa - buf, buf);
/* Not reached. */ /* Not reached. */
@ -562,26 +629,93 @@ grub_openbsd_boot (void)
static grub_err_t static grub_err_t
grub_netbsd_boot (void) grub_netbsd_boot (void)
{ {
struct grub_netbsd_btinfo_rootdevice *rootdev;
struct grub_netbsd_bootinfo *bootinfo; struct grub_netbsd_bootinfo *bootinfo;
grub_uint32_t biosdev, unit, slice, part; int count = 0;
struct grub_netbsd_btinfo_mmap_header *mmap;
struct grub_netbsd_btinfo_mmap_entry *pm;
void *curarg;
grub_bsd_get_device (&biosdev, &unit, &slice, &part); auto int NESTED_FUNC_ATTR count_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t);
int NESTED_FUNC_ATTR count_hook (grub_uint64_t addr __attribute__ ((unused)),
grub_uint64_t size __attribute__ ((unused)),
grub_uint32_t type __attribute__ ((unused)))
{
count++;
return 0;
}
rootdev = (struct grub_netbsd_btinfo_rootdevice *) GRUB_BSD_TEMP_BUFFER; auto int NESTED_FUNC_ATTR fill_hook (grub_uint64_t, grub_uint64_t, grub_uint32_t);
int NESTED_FUNC_ATTR fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type)
{
pm->addr = addr;
pm->len = size;
rootdev->common.len = sizeof (struct grub_netbsd_btinfo_rootdevice); switch (type)
rootdev->common.type = NETBSD_BTINFO_ROOTDEVICE; {
grub_sprintf (rootdev->devname, "%cd%d%c", (biosdev & 0x80) ? 'w' : 'f', case GRUB_MACHINE_MEMORY_AVAILABLE:
unit, 'a' + part); pm->type = NETBSD_MMAP_AVAILABLE;
break;
bootinfo = (struct grub_netbsd_bootinfo *) (rootdev + 1); case GRUB_MACHINE_MEMORY_ACPI:
bootinfo->bi_count = 1; pm->type = NETBSD_MMAP_ACPI;
bootinfo->bi_data[0] = rootdev; break;
case GRUB_MACHINE_MEMORY_NVS:
pm->type = NETBSD_MMAP_NVS;
break;
default:
pm->type = NETBSD_MMAP_RESERVED;
break;
}
pm++;
return 0;
}
grub_mmap_iterate (count_hook);
if (kern_end + sizeof (struct grub_netbsd_btinfo_rootdevice)
+ sizeof (struct grub_netbsd_bootinfo)
+ sizeof (struct grub_netbsd_btinfo_mmap_header)
+ count * sizeof (struct grub_netbsd_btinfo_mmap_entry)
> grub_os_area_addr + grub_os_area_size)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "No memory for boot info.");
curarg = mmap = (struct grub_netbsd_btinfo_mmap_header *) kern_end;
pm = (struct grub_netbsd_btinfo_mmap_entry *) (mmap + 1);
grub_mmap_iterate (fill_hook);
mmap->common.type = NETBSD_BTINFO_MEMMAP;
mmap->common.len = (char *) pm - (char *) mmap;
mmap->count = count;
curarg = pm;
if (netbsd_root)
{
struct grub_netbsd_btinfo_rootdevice *rootdev;
rootdev = (struct grub_netbsd_btinfo_rootdevice *) curarg;
rootdev->common.len = sizeof (struct grub_netbsd_btinfo_rootdevice);
rootdev->common.type = NETBSD_BTINFO_ROOTDEVICE;
grub_strncpy (rootdev->devname, netbsd_root, sizeof (rootdev->devname));
bootinfo = (struct grub_netbsd_bootinfo *) (rootdev + 1);
bootinfo->bi_count = 2;
bootinfo->bi_data[0] = mmap;
bootinfo->bi_data[1] = rootdev;
}
else
{
bootinfo = (struct grub_netbsd_bootinfo *) curarg;
bootinfo->bi_count = 1;
bootinfo->bi_data[0] = mmap;
}
grub_unix_real_boot (entry, bootflags, 0, bootinfo, grub_unix_real_boot (entry, bootflags, 0, bootinfo,
0, grub_mmap_get_upper () >> 10, 0, (grub_uint32_t) (grub_mmap_get_upper () >> 10),
grub_mmap_get_lower () >> 10); (grub_uint32_t) (grub_mmap_get_lower () >> 10));
/* Not reached. */ /* Not reached. */
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
@ -600,6 +734,9 @@ grub_bsd_unload (void)
kernel_type = KERNEL_TYPE_NONE; kernel_type = KERNEL_TYPE_NONE;
grub_dl_unref (my_mod); grub_dl_unref (my_mod);
grub_free (netbsd_root);
netbsd_root = NULL;
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
@ -733,8 +870,18 @@ grub_bsd_load_elf (grub_elf_t elf)
else if (grub_elf_is_elf64 (elf)) else if (grub_elf_is_elf64 (elf))
{ {
is_64bit = 1; is_64bit = 1;
entry = elf->ehdr.ehdr64.e_entry & 0xffffffff;
entry_hi = (elf->ehdr.ehdr64.e_entry >> 32) & 0xffffffff; /* FreeBSD has 64-bit entry point. */
if (kernel_type == KERNEL_TYPE_FREEBSD)
{
entry = elf->ehdr.ehdr64.e_entry & 0xffffffff;
entry_hi = (elf->ehdr.ehdr64.e_entry >> 32) & 0xffffffff;
}
else
{
entry = elf->ehdr.ehdr64.e_entry & 0x0fffffff;
entry_hi = 0;
}
return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0); return grub_elf64_load (elf, grub_bsd_elf64_hook, 0, 0);
} }
else else
@ -785,41 +932,24 @@ fail:
} }
static grub_uint32_t static grub_uint32_t
grub_bsd_parse_flags (char *str, const char *opts, grub_bsd_parse_flags (const struct grub_arg_list *state,
const grub_uint32_t * flags) const grub_uint32_t * flags)
{ {
grub_uint32_t result = 0; grub_uint32_t result = 0;
unsigned i;
while (*str) for (i = 0; flags[i]; i++)
{ if (state[i].set)
const char *po; result |= flags[i];
const grub_uint32_t *pf;
po = opts;
pf = flags;
while (*po)
{
if (*str == *po)
{
result |= *pf;
break;
}
po++;
pf++;
}
str++;
}
return result; return result;
} }
static grub_err_t static grub_err_t
grub_cmd_freebsd (grub_command_t cmd __attribute__ ((unused)), grub_cmd_freebsd (grub_extcmd_t cmd, int argc, char *argv[])
int argc, char *argv[])
{ {
kernel_type = KERNEL_TYPE_FREEBSD; kernel_type = KERNEL_TYPE_FREEBSD;
bootflags = ((argc <= 1) ? 0 : bootflags = grub_bsd_parse_flags (cmd->state, freebsd_flags);
grub_bsd_parse_flags (argv[1], freebsd_opts, freebsd_flags));
if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE)
{ {
@ -879,12 +1009,10 @@ grub_cmd_freebsd (grub_command_t cmd __attribute__ ((unused)),
} }
static grub_err_t static grub_err_t
grub_cmd_openbsd (grub_command_t cmd __attribute__ ((unused)), grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[])
int argc, char *argv[])
{ {
kernel_type = KERNEL_TYPE_OPENBSD; kernel_type = KERNEL_TYPE_OPENBSD;
bootflags = ((argc <= 1) ? 0 : bootflags = grub_bsd_parse_flags (cmd->state, openbsd_flags);
grub_bsd_parse_flags (argv[1], openbsd_opts, openbsd_flags));
if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE)
grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1); grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1);
@ -893,15 +1021,17 @@ grub_cmd_openbsd (grub_command_t cmd __attribute__ ((unused)),
} }
static grub_err_t static grub_err_t
grub_cmd_netbsd (grub_command_t cmd __attribute__ ((unused)), grub_cmd_netbsd (grub_extcmd_t cmd, int argc, char *argv[])
int argc, char *argv[])
{ {
kernel_type = KERNEL_TYPE_NETBSD; kernel_type = KERNEL_TYPE_NETBSD;
bootflags = ((argc <= 1) ? 0 : bootflags = grub_bsd_parse_flags (cmd->state, netbsd_flags);
grub_bsd_parse_flags (argv[1], netbsd_opts, netbsd_flags));
if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE) if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE)
grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 1); {
grub_loader_set (grub_netbsd_boot, grub_bsd_unload, 1);
if (cmd->state[NETBSD_ROOT_ARG].set)
netbsd_root = grub_strdup (cmd->state[NETBSD_ROOT_ARG].arg);
}
return grub_errno; return grub_errno;
} }
@ -1112,21 +1242,24 @@ grub_cmd_freebsd_module_elf (grub_command_t cmd __attribute__ ((unused)),
} }
static grub_command_t cmd_freebsd, cmd_openbsd, cmd_netbsd; static grub_extcmd_t cmd_freebsd, cmd_openbsd, cmd_netbsd;
static grub_command_t cmd_freebsd_loadenv, cmd_freebsd_module; static grub_command_t cmd_freebsd_loadenv, cmd_freebsd_module;
static grub_command_t cmd_freebsd_module_elf; static grub_command_t cmd_freebsd_module_elf;
GRUB_MOD_INIT (bsd) GRUB_MOD_INIT (bsd)
{ {
cmd_freebsd = cmd_freebsd = grub_register_extcmd ("freebsd", grub_cmd_freebsd,
grub_register_command ("freebsd", grub_cmd_freebsd, GRUB_COMMAND_FLAG_BOTH,
0, "load kernel of FreeBSD"); "freebsd FILE", "Load kernel of FreeBSD.",
cmd_openbsd = freebsd_opts);
grub_register_command ("openbsd", grub_cmd_openbsd, cmd_openbsd = grub_register_extcmd ("openbsd", grub_cmd_openbsd,
0, "load kernel of OpenBSD"); GRUB_COMMAND_FLAG_BOTH,
cmd_netbsd = "openbsd FILE", "Load kernel of OpenBSD.",
grub_register_command ("netbsd", grub_cmd_netbsd, openbsd_opts);
0, "load kernel of NetBSD"); cmd_netbsd = grub_register_extcmd ("netbsd", grub_cmd_netbsd,
GRUB_COMMAND_FLAG_BOTH,
"netbsd FILE", "Load kernel of NetBSD.",
netbsd_opts);
cmd_freebsd_loadenv = cmd_freebsd_loadenv =
grub_register_command ("freebsd_loadenv", grub_cmd_freebsd_loadenv, grub_register_command ("freebsd_loadenv", grub_cmd_freebsd_loadenv,
0, "load FreeBSD env"); 0, "load FreeBSD env");
@ -1142,9 +1275,9 @@ GRUB_MOD_INIT (bsd)
GRUB_MOD_FINI (bsd) GRUB_MOD_FINI (bsd)
{ {
grub_unregister_command (cmd_freebsd); grub_unregister_extcmd (cmd_freebsd);
grub_unregister_command (cmd_openbsd); grub_unregister_extcmd (cmd_openbsd);
grub_unregister_command (cmd_netbsd); grub_unregister_extcmd (cmd_netbsd);
grub_unregister_command (cmd_freebsd_loadenv); grub_unregister_command (cmd_freebsd_loadenv);
grub_unregister_command (cmd_freebsd_module); grub_unregister_command (cmd_freebsd_module);

View file

@ -197,15 +197,15 @@ SUFFIX (grub_freebsd_load_elfmodule) (grub_file_t file, int argc, char *argv[],
if (curload < module + sizeof (e)) if (curload < module + sizeof (e))
curload = module + sizeof (e); curload = module + sizeof (e);
load (file, UINT_TO_PTR (module + e.e_shoff), e.e_shoff, load (file, UINT_TO_PTR (curload), e.e_shoff,
e.e_shnum * e.e_shentsize); e.e_shnum * e.e_shentsize);
if (curload < module + e.e_shoff + e.e_shnum * e.e_shentsize) e.e_shoff = curload - module;
curload = module + e.e_shoff + e.e_shnum * e.e_shentsize; curload += e.e_shnum * e.e_shentsize;
load (file, UINT_TO_PTR (module + e.e_phoff), e.e_phoff, load (file, UINT_TO_PTR (curload), e.e_phoff,
e.e_phnum * e.e_phentsize); e.e_phnum * e.e_phentsize);
if (curload < module + e.e_phoff + e.e_phnum * e.e_phentsize) e.e_phoff = curload - module;
curload = module + e.e_phoff + e.e_phnum * e.e_phentsize; curload += e.e_phnum * e.e_phentsize;
*kern_end = curload; *kern_end = curload;

View file

@ -33,6 +33,7 @@
#include <grub/video.h> #include <grub/video.h>
#include <grub/video_fb.h> #include <grub/video_fb.h>
#include <grub/command.h> #include <grub/command.h>
#include <grub/i386/pc/vbe.h>
#define GRUB_LINUX_CL_OFFSET 0x1000 #define GRUB_LINUX_CL_OFFSET 0x1000
#define GRUB_LINUX_CL_END_OFFSET 0x2000 #define GRUB_LINUX_CL_END_OFFSET 0x2000
@ -416,6 +417,33 @@ grub_linux_setup_video (struct linux_kernel_params *params)
params->reserved_mask_size = mode_info.reserved_mask_size; params->reserved_mask_size = mode_info.reserved_mask_size;
params->reserved_field_pos = mode_info.reserved_field_pos; params->reserved_field_pos = mode_info.reserved_field_pos;
#ifdef GRUB_MACHINE_PCBIOS
/* VESA packed modes may come with zeroed mask sizes, which need
to be set here according to DAC Palette width. If we don't,
this results in Linux displaying a black screen. */
if (mode_info.bpp <= 8)
{
struct grub_vbe_info_block controller_info;
int status;
int width = 8;
status = grub_vbe_bios_get_controller_info (&controller_info);
if (status == GRUB_VBE_STATUS_OK &&
(controller_info.capabilities & GRUB_VBE_CAPABILITY_DACWIDTH))
status = grub_vbe_bios_set_dac_palette_width (&width);
if (status != GRUB_VBE_STATUS_OK)
/* 6 is default after mode reset. */
width = 6;
params->red_mask_size = params->green_mask_size
= params->blue_mask_size = width;
params->reserved_mask_size = 0;
}
#endif
return 0; return 0;
} }

View file

@ -247,7 +247,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = (SYSTEM_TABLE_SIZEOF (firmware_revision)); curval->datasize = (SYSTEM_TABLE_SIZEOF (firmware_revision));
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't create device tree"); return grub_errno;
grub_memcpy (curval->data, (SYSTEM_TABLE_VAR(firmware_revision)), grub_memcpy (curval->data, (SYSTEM_TABLE_VAR(firmware_revision)),
curval->datasize); curval->datasize);
@ -258,7 +258,7 @@ grub_cpu_xnu_fill_devicetree (void)
2 * (utf16_strlen (SYSTEM_TABLE_PTR (firmware_vendor)) + 1); 2 * (utf16_strlen (SYSTEM_TABLE_PTR (firmware_vendor)) + 1);
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't create device tree"); return grub_errno;
grub_memcpy (curval->data, SYSTEM_TABLE_PTR (firmware_vendor), grub_memcpy (curval->data, SYSTEM_TABLE_PTR (firmware_vendor),
curval->datasize); curval->datasize);
@ -268,7 +268,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = sizeof ("EFI32"); curval->datasize = sizeof ("EFI32");
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't create device tree"); return grub_errno;
if (SIZEOF_OF_UINTN == 4) if (SIZEOF_OF_UINTN == 4)
grub_memcpy (curval->data, "EFI32", curval->datasize); grub_memcpy (curval->data, "EFI32", curval->datasize);
else else
@ -287,7 +287,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = sizeof (grub_uint64_t); curval->datasize = sizeof (grub_uint64_t);
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (!curval->data) if (!curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't create device tree"); return grub_errno;
/* First see if user supplies the value. */ /* First see if user supplies the value. */
char *fsbvar = grub_env_get ("fsb"); char *fsbvar = grub_env_get ("fsb");
@ -362,8 +362,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = sizeof (guid); curval->datasize = sizeof (guid);
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, return grub_errno;
"couldn't create device tree");
grub_memcpy (curval->data, &guid, curval->datasize); grub_memcpy (curval->data, &guid, curval->datasize);
/* The value "table". */ /* The value "table". */
@ -373,8 +372,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = SIZEOF_OF_UINTN; curval->datasize = SIZEOF_OF_UINTN;
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, return grub_errno;
"couldn't create device tree");
if (SIZEOF_OF_UINTN == 4) if (SIZEOF_OF_UINTN == 4)
*((grub_uint32_t *)curval->data) = PTR_TO_UINT32 (ptr); *((grub_uint32_t *)curval->data) = PTR_TO_UINT32 (ptr);
else else
@ -392,8 +390,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = grub_strlen (table_aliases[j].name) + 1; curval->datasize = grub_strlen (table_aliases[j].name) + 1;
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (!curval->data) if (!curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, return grub_errno;
"couldn't create device tree");
grub_memcpy (curval->data, table_aliases[j].name, curval->datasize); grub_memcpy (curval->data, table_aliases[j].name, curval->datasize);
} }
} }
@ -409,8 +406,7 @@ grub_cpu_xnu_fill_devicetree (void)
curval->datasize = SIZEOF_OF_UINTN; curval->datasize = SIZEOF_OF_UINTN;
curval->data = grub_malloc (curval->datasize); curval->data = grub_malloc (curval->datasize);
if (! curval->data) if (! curval->data)
return grub_error (GRUB_ERR_OUT_OF_MEMORY, return grub_errno;
"couldn't create device tree");
if (SIZEOF_OF_UINTN == 4) if (SIZEOF_OF_UINTN == 4)
*((grub_uint32_t *) curval->data) *((grub_uint32_t *) curval->data)
= PTR_TO_UINT32 (SYSTEM_TABLE_PTR (runtime_services)); = PTR_TO_UINT32 (SYSTEM_TABLE_PTR (runtime_services));

View file

@ -368,8 +368,8 @@ grub_cmd_badram (grub_command_t cmd __attribute__ ((unused)),
iterator++) iterator++)
{ {
grub_dprintf ("badram", "%llx (size %llx) is a badram range\n", grub_dprintf ("badram", "%llx (size %llx) is a badram range\n",
(long long) cur, (long long) (1ULL << tail) - 1); (unsigned long long) cur, (1ULL << tail));
grub_mmap_register (cur, (1ULL << tail) - 1, GRUB_MACHINE_MEMORY_HOLE); grub_mmap_register (cur, (1ULL << tail), GRUB_MACHINE_MEMORY_HOLE);
} }
return 0; return 0;
} }

256
normal/auth.c Normal file
View file

@ -0,0 +1,256 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2009 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 <http://www.gnu.org/licenses/>.
*/
#include <grub/auth.h>
#include <grub/list.h>
#include <grub/mm.h>
#include <grub/misc.h>
#include <grub/env.h>
#include <grub/normal.h>
struct grub_auth_user
{
struct grub_auth_user *next;
char *name;
grub_auth_callback_t callback;
void *arg;
int authenticated;
};
struct grub_auth_user *users = NULL;
int
grub_auth_strcmp (const char *user_input, const char *template)
{
int ok = 1;
const char *ptr1, *ptr2;
for (ptr1 = user_input, ptr2 = template; *ptr1; ptr1++)
if (*ptr1 == (ptr2 ? *ptr2 : ptr1[1]) && ok && ptr2 != NULL)
ptr2++;
else
ok = 0;
return !ok;
}
static int
grub_iswordseparator (int c)
{
return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&');
}
int
grub_auth_strword (const char *haystack, const char *needle)
{
const char *n_pos = needle;
int found = 0;
while (grub_iswordseparator (*haystack))
haystack++;
while (*haystack)
{
int ok = 1;
/* Crawl both the needle and the haystack word we're on. */
while(*haystack && !grub_iswordseparator (*haystack))
{
if (*haystack == *n_pos && ok)
n_pos++;
else
ok = 0;
haystack++;
}
if (ok)
found = 1;
}
return found;
}
grub_err_t
grub_auth_register_authentication (const char *user,
grub_auth_callback_t callback,
void *arg)
{
struct grub_auth_user *cur;
cur = grub_named_list_find (GRUB_AS_NAMED_LIST (users), user);
if (!cur)
cur = grub_zalloc (sizeof (*cur));
if (!cur)
return grub_errno;
cur->callback = callback;
cur->arg = arg;
if (! cur->name)
{
cur->name = grub_strdup (user);
if (!cur->name)
{
grub_free (cur);
return grub_errno;
}
grub_list_push (GRUB_AS_LIST_P (&users), GRUB_AS_LIST (cur));
}
return GRUB_ERR_NONE;
}
grub_err_t
grub_auth_unregister_authentication (const char *user)
{
struct grub_auth_user *cur;
cur = grub_named_list_find (GRUB_AS_NAMED_LIST (users), user);
if (!cur)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "user '%s' not found", user);
if (!cur->authenticated)
{
grub_free (cur->name);
grub_list_remove (GRUB_AS_LIST_P (&users), GRUB_AS_LIST (cur));
grub_free (cur);
}
else
{
cur->callback = NULL;
cur->arg = NULL;
}
return GRUB_ERR_NONE;
}
grub_err_t
grub_auth_authenticate (const char *user)
{
struct grub_auth_user *cur;
cur = grub_named_list_find (GRUB_AS_NAMED_LIST (users), user);
if (!cur)
cur = grub_zalloc (sizeof (*cur));
if (!cur)
return grub_errno;
cur->authenticated = 1;
if (! cur->name)
{
cur->name = grub_strdup (user);
if (!cur->name)
{
grub_free (cur);
return grub_errno;
}
grub_list_push (GRUB_AS_LIST_P (&users), GRUB_AS_LIST (cur));
}
return GRUB_ERR_NONE;
}
grub_err_t
grub_auth_deauthenticate (const char *user)
{
struct grub_auth_user *cur;
cur = grub_named_list_find (GRUB_AS_NAMED_LIST (users), user);
if (!cur)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "user '%s' not found", user);
if (!cur->callback)
{
grub_free (cur->name);
grub_list_remove (GRUB_AS_LIST_P (&users), GRUB_AS_LIST (cur));
grub_free (cur);
}
else
cur->authenticated = 0;
return GRUB_ERR_NONE;
}
static int
is_authenticated (const char *userlist)
{
const char *superusers;
auto int hook (grub_list_t item);
int hook (grub_list_t item)
{
const char *name;
if (!((struct grub_auth_user *) item)->authenticated)
return 0;
name = ((struct grub_auth_user *) item)->name;
return (userlist && grub_auth_strword (userlist, name))
|| grub_auth_strword (superusers, name);
}
superusers = grub_env_get ("superusers");
if (!superusers)
return 1;
return grub_list_iterate (GRUB_AS_LIST (users), hook);
}
grub_err_t
grub_auth_check_authentication (const char *userlist)
{
char login[1024];
struct grub_auth_user *cur = NULL;
grub_err_t err;
auto int hook (grub_list_t item);
int hook (grub_list_t item)
{
if (grub_auth_strcmp (login, ((struct grub_auth_user *) item)->name) == 0)
cur = (struct grub_auth_user *) item;
return 0;
}
auto int hook_any (grub_list_t item);
int hook_any (grub_list_t item)
{
if (((struct grub_auth_user *) item)->callback)
cur = (struct grub_auth_user *) item;
return 0;
}
grub_memset (login, 0, sizeof (login));
if (is_authenticated (userlist))
return GRUB_ERR_NONE;
if (!grub_cmdline_get ("Enter username: ", login, sizeof (login) - 1,
0, 0, 0))
return GRUB_ACCESS_DENIED;
grub_list_iterate (GRUB_AS_LIST (users), hook);
if (!cur || ! cur->callback)
{
grub_list_iterate (GRUB_AS_LIST (users), hook_any);
/* No users present at all. */
if (!cur)
return GRUB_ACCESS_DENIED;
/* Display any of available authentication schemes. */
err = cur->callback (login, 0);
return GRUB_ACCESS_DENIED;
}
err = cur->callback (login, cur->arg);
if (is_authenticated (userlist))
return GRUB_ERR_NONE;
return GRUB_ACCESS_DENIED;
}

View file

@ -181,7 +181,7 @@ print_completion (const char *item, grub_completion_type_t type, int count)
/* FIXME: The dumb interface is not supported yet. */ /* FIXME: The dumb interface is not supported yet. */
int int
grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len, grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
int echo_char, int readline) int echo_char, int readline, int history)
{ {
unsigned xpos, ypos, ystart; unsigned xpos, ypos, ystart;
grub_size_t lpos, llen; grub_size_t lpos, llen;
@ -273,14 +273,14 @@ grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
if ((grub_getxy () >> 8) != 0) if ((grub_getxy () >> 8) != 0)
grub_putchar ('\n'); grub_putchar ('\n');
grub_printf (prompt); grub_printf ("%s", prompt);
xpos = plen; xpos = plen;
ystart = ypos = (grub_getxy () & 0xFF); ystart = ypos = (grub_getxy () & 0xFF);
cl_insert (cmdline); cl_insert (cmdline);
if (hist_used == 0) if (history && hist_used == 0)
grub_history_add (buf); grub_history_add (buf);
while ((key = GRUB_TERM_ASCII_CHAR (grub_getkey ())) != '\n' && key != '\r') while ((key = GRUB_TERM_ASCII_CHAR (grub_getkey ())) != '\n' && key != '\r')
@ -468,11 +468,14 @@ grub_cmdline_get (const char *prompt, char cmdline[], unsigned max_len,
while (buf[lpos] == ' ') while (buf[lpos] == ' ')
lpos++; lpos++;
histpos = 0; if (history)
if (grub_strlen (buf) > 0)
{ {
grub_history_replace (histpos, buf); histpos = 0;
grub_history_add (""); if (grub_strlen (buf) > 0)
{
grub_history_replace (histpos, buf);
grub_history_add ("");
}
} }
grub_memcpy (cmdline, buf + lpos, llen - lpos + 1); grub_memcpy (cmdline, buf + lpos, llen - lpos + 1);

View file

@ -28,6 +28,7 @@
#include <grub/parser.h> #include <grub/parser.h>
#include <grub/reader.h> #include <grub/reader.h>
#include <grub/menu_viewer.h> #include <grub/menu_viewer.h>
#include <grub/auth.h>
#define GRUB_DEFAULT_HISTORY_SIZE 50 #define GRUB_DEFAULT_HISTORY_SIZE 50
@ -164,6 +165,7 @@ grub_normal_add_menu_entry (int argc, const char **args,
int i; int i;
struct grub_menu_entry_class *classes_head; /* Dummy head node for list. */ struct grub_menu_entry_class *classes_head; /* Dummy head node for list. */
struct grub_menu_entry_class *classes_tail; struct grub_menu_entry_class *classes_tail;
char *users = NULL;
/* Allocate dummy head node for class list. */ /* Allocate dummy head node for class list. */
classes_head = grub_zalloc (sizeof (struct grub_menu_entry_class)); classes_head = grub_zalloc (sizeof (struct grub_menu_entry_class));
@ -218,6 +220,18 @@ grub_normal_add_menu_entry (int argc, const char **args,
classes_tail = new_class; classes_tail = new_class;
continue; continue;
} }
else if (grub_strcmp(arg, "users") == 0)
{
i++;
users = grub_strdup (args[i]);
if (! users)
{
failed = 1;
break;
}
continue;
}
else else
{ {
/* Handle invalid argument. */ /* Handle invalid argument. */
@ -275,6 +289,9 @@ grub_normal_add_menu_entry (int argc, const char **args,
(*last)->title = menutitle; (*last)->title = menutitle;
(*last)->classes = classes_head; (*last)->classes = classes_head;
if (users)
(*last)->restricted = 1;
(*last)->users = users;
(*last)->sourcecode = menusourcecode; (*last)->sourcecode = menusourcecode;
menu->size++; menu->size++;
@ -465,7 +482,19 @@ quit:
void void
grub_cmdline_run (int nested) grub_cmdline_run (int nested)
{ {
grub_reader_t reader = grub_reader_get_current (); grub_reader_t reader;
grub_err_t err = GRUB_ERR_NONE;
err = grub_auth_check_authentication (NULL);
if (err)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
return;
}
reader = grub_reader_get_current ();
reader_nested = nested; reader_nested = nested;
if (reader->init) if (reader->init)
@ -501,7 +530,7 @@ grub_normal_read_line (char **line, int cont)
while (1) while (1)
{ {
cmdline[0] = 0; cmdline[0] = 0;
if (grub_cmdline_get (prompt, cmdline, sizeof (cmdline), 0, 1)) if (grub_cmdline_get (prompt, cmdline, sizeof (cmdline), 0, 1, 1))
break; break;
if ((reader_nested) || (cont)) if ((reader_nested) || (cont))

View file

@ -26,6 +26,7 @@
#include <grub/menu_viewer.h> #include <grub/menu_viewer.h>
#include <grub/command.h> #include <grub/command.h>
#include <grub/parser.h> #include <grub/parser.h>
#include <grub/auth.h>
/* Get a menu entry by its index in the entry list. */ /* Get a menu entry by its index in the entry list. */
grub_menu_entry_t grub_menu_entry_t
@ -124,6 +125,18 @@ get_and_remove_first_entry_number (const char *name)
void void
grub_menu_execute_entry(grub_menu_entry_t entry) grub_menu_execute_entry(grub_menu_entry_t entry)
{ {
grub_err_t err = GRUB_ERR_NONE;
if (entry->restricted)
err = grub_auth_check_authentication (entry->users);
if (err)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
return;
}
grub_parser_execute ((char *) entry->sourcecode); grub_parser_execute ((char *) entry->sourcecode);
if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ()) if (grub_errno == GRUB_ERR_NONE && grub_loader_is_loaded ())

View file

@ -23,6 +23,7 @@
#include <grub/loader.h> #include <grub/loader.h>
#include <grub/command.h> #include <grub/command.h>
#include <grub/parser.h> #include <grub/parser.h>
#include <grub/auth.h>
enum update_mode enum update_mode
{ {
@ -1026,6 +1027,16 @@ grub_menu_entry_run (grub_menu_entry_t entry)
{ {
struct screen *screen; struct screen *screen;
int prev_c; int prev_c;
grub_err_t err = GRUB_ERR_NONE;
err = grub_auth_check_authentication (NULL);
if (err)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
return;
}
screen = make_screen (entry); screen = make_screen (entry);
if (! screen) if (! screen)

View file

@ -21,6 +21,7 @@
#include <grub/env.h> #include <grub/env.h>
#include <grub/menu_viewer.h> #include <grub/menu_viewer.h>
#include <grub/menu.h> #include <grub/menu.h>
#include <grub/auth.h>
/* The list of menu viewers. */ /* The list of menu viewers. */
static grub_menu_viewer_t menu_viewer_list; static grub_menu_viewer_t menu_viewer_list;
@ -55,9 +56,26 @@ grub_err_t
grub_menu_viewer_show_menu (grub_menu_t menu, int nested) grub_menu_viewer_show_menu (grub_menu_t menu, int nested)
{ {
grub_menu_viewer_t cur = get_current_menu_viewer (); grub_menu_viewer_t cur = get_current_menu_viewer ();
grub_err_t err1, err2;
if (!cur) if (!cur)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "No menu viewer available."); return grub_error (GRUB_ERR_BAD_ARGUMENT, "No menu viewer available.");
return cur->show_menu (menu, nested); while (1)
{
err1 = cur->show_menu (menu, nested);
grub_print_error ();
err2 = grub_auth_check_authentication (NULL);
if (err2)
{
grub_print_error ();
grub_errno = GRUB_ERR_NONE;
continue;
}
break;
}
return err1;
} }

View file

@ -189,7 +189,7 @@ acorn_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_acorn_partition_map = static struct grub_partition_map grub_acorn_partition_map =
{ {
.name = "Linux/ADFS partition map", .name = "part_acorn",
.iterate = acorn_partition_map_iterate, .iterate = acorn_partition_map_iterate,
.probe = acorn_partition_map_probe, .probe = acorn_partition_map_probe,
.get_name = acorn_partition_map_get_name .get_name = acorn_partition_map_get_name

View file

@ -198,7 +198,7 @@ amiga_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_amiga_partition_map = static struct grub_partition_map grub_amiga_partition_map =
{ {
.name = "amiga_partition_map", .name = "part_amiga",
.iterate = amiga_partition_map_iterate, .iterate = amiga_partition_map_iterate,
.probe = amiga_partition_map_probe, .probe = amiga_partition_map_probe,
.get_name = amiga_partition_map_get_name .get_name = amiga_partition_map_get_name

View file

@ -241,7 +241,7 @@ apple_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_apple_partition_map = static struct grub_partition_map grub_apple_partition_map =
{ {
.name = "apple_partition_map", .name = "part_apple",
.iterate = apple_partition_map_iterate, .iterate = apple_partition_map_iterate,
.probe = apple_partition_map_probe, .probe = apple_partition_map_probe,
.get_name = apple_partition_map_get_name .get_name = apple_partition_map_get_name

View file

@ -22,7 +22,7 @@
#include <grub/mm.h> #include <grub/mm.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/dl.h> #include <grub/dl.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/gpt_partition.h> #include <grub/gpt_partition.h>
static grub_uint8_t grub_gpt_magic[8] = static grub_uint8_t grub_gpt_magic[8] =
@ -45,7 +45,7 @@ gpt_partition_map_iterate (grub_disk_t disk,
struct grub_gpt_header gpt; struct grub_gpt_header gpt;
struct grub_gpt_partentry entry; struct grub_gpt_partentry entry;
struct grub_disk raw; struct grub_disk raw;
struct grub_pc_partition_mbr mbr; struct grub_msdos_partition_mbr mbr;
grub_uint64_t entries; grub_uint64_t entries;
unsigned int i; unsigned int i;
int last_offset = 0; int last_offset = 0;
@ -176,7 +176,7 @@ gpt_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_gpt_partition_map = static struct grub_partition_map grub_gpt_partition_map =
{ {
.name = "gpt_partition_map", .name = "part_gpt",
.iterate = gpt_partition_map_iterate, .iterate = gpt_partition_map_iterate,
.probe = gpt_partition_map_probe, .probe = gpt_partition_map_probe,
.get_name = gpt_partition_map_get_name .get_name = gpt_partition_map_get_name

View file

@ -18,13 +18,13 @@
*/ */
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/mm.h> #include <grub/mm.h>
#include <grub/misc.h> #include <grub/misc.h>
#include <grub/dl.h> #include <grub/dl.h>
static struct grub_partition_map grub_pc_partition_map; static struct grub_partition_map grub_msdos_partition_map;
/* Parse the partition representation in STR and return a partition. */ /* Parse the partition representation in STR and return a partition. */
@ -32,7 +32,7 @@ static grub_partition_t
grub_partition_parse (const char *str) grub_partition_parse (const char *str)
{ {
grub_partition_t p; grub_partition_t p;
struct grub_pc_partition *pcdata; struct grub_msdos_partition *pcdata;
char *s = (char *) str; char *s = (char *) str;
@ -40,12 +40,12 @@ grub_partition_parse (const char *str)
if (! p) if (! p)
return 0; return 0;
pcdata = (struct grub_pc_partition *) grub_malloc (sizeof (*pcdata)); pcdata = (struct grub_msdos_partition *) grub_malloc (sizeof (*pcdata));
if (! pcdata) if (! pcdata)
goto fail; goto fail;
p->data = pcdata; p->data = pcdata;
p->partmap = &grub_pc_partition_map; p->partmap = &grub_msdos_partition_map;
/* Initialize some of the fields with invalid values. */ /* Initialize some of the fields with invalid values. */
pcdata->bsd_part = pcdata->dos_type = pcdata->bsd_type = p->index = -1; pcdata->bsd_part = pcdata->dos_type = pcdata->bsd_type = p->index = -1;
@ -93,10 +93,12 @@ pc_partition_map_iterate (grub_disk_t disk,
const grub_partition_t partition)) const grub_partition_t partition))
{ {
struct grub_partition p; struct grub_partition p;
struct grub_pc_partition pcdata; struct grub_msdos_partition pcdata;
struct grub_pc_partition_mbr mbr; struct grub_msdos_partition_mbr mbr;
struct grub_pc_partition_disk_label label; struct grub_msdos_partition_disk_label label;
struct grub_disk raw; struct grub_disk raw;
int labeln = 0;
grub_disk_addr_t lastaddr;
/* Enforce raw disk access. */ /* Enforce raw disk access. */
raw = *disk; raw = *disk;
@ -106,17 +108,33 @@ pc_partition_map_iterate (grub_disk_t disk,
pcdata.ext_offset = 0; pcdata.ext_offset = 0;
pcdata.dos_part = -1; pcdata.dos_part = -1;
p.data = &pcdata; p.data = &pcdata;
p.partmap = &grub_pc_partition_map; p.partmap = &grub_msdos_partition_map;
/* Any value different than `p.offset' will satisfy the check during
first loop. */
lastaddr = !p.offset;
while (1) while (1)
{ {
int i; int i;
struct grub_pc_partition_entry *e; struct grub_msdos_partition_entry *e;
/* Read the MBR. */ /* Read the MBR. */
if (grub_disk_read (&raw, p.offset, 0, sizeof (mbr), &mbr)) if (grub_disk_read (&raw, p.offset, 0, sizeof (mbr), &mbr))
goto finish; goto finish;
/* This is our loop-detection algorithm. It works the following way:
It saves last position which was a power of two. Then it compares the
saved value with a current one. This way it's guaranteed that the loop
will be broken by at most third walk.
*/
if (labeln && lastaddr == p.offset)
return grub_error (GRUB_ERR_BAD_PART_TABLE, "loop detected");
labeln++;
if ((labeln & (labeln - 1)) == 0)
lastaddr = p.offset;
/* Check if it is valid. */ /* Check if it is valid. */
if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE)) if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE))
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature"); return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
@ -147,8 +165,8 @@ pc_partition_map_iterate (grub_disk_t disk,
return grub_error (GRUB_ERR_BAD_PART_TABLE, "dummy mbr"); return grub_error (GRUB_ERR_BAD_PART_TABLE, "dummy mbr");
/* If this partition is a normal one, call the hook. */ /* If this partition is a normal one, call the hook. */
if (! grub_pc_partition_is_empty (e->type) if (! grub_msdos_partition_is_empty (e->type)
&& ! grub_pc_partition_is_extended (e->type)) && ! grub_msdos_partition_is_extended (e->type))
{ {
pcdata.dos_part++; pcdata.dos_part++;
@ -156,7 +174,7 @@ pc_partition_map_iterate (grub_disk_t disk,
return 1; return 1;
/* Check if this is a BSD partition. */ /* Check if this is a BSD partition. */
if (grub_pc_partition_is_bsd (e->type)) if (grub_msdos_partition_is_bsd (e->type))
{ {
/* Check if the BSD label is within the DOS partition. */ /* Check if the BSD label is within the DOS partition. */
if (p.len <= GRUB_PC_PARTITION_BSD_LABEL_SECTOR) if (p.len <= GRUB_PC_PARTITION_BSD_LABEL_SECTOR)
@ -186,7 +204,7 @@ pc_partition_map_iterate (grub_disk_t disk,
pcdata.bsd_part < grub_cpu_to_le16 (label.num_partitions); pcdata.bsd_part < grub_cpu_to_le16 (label.num_partitions);
pcdata.bsd_part++) pcdata.bsd_part++)
{ {
struct grub_pc_partition_bsd_entry *be struct grub_msdos_partition_bsd_entry *be
= label.entries + pcdata.bsd_part; = label.entries + pcdata.bsd_part;
p.start = grub_le_to_cpu32 (be->offset); p.start = grub_le_to_cpu32 (be->offset);
@ -210,7 +228,7 @@ pc_partition_map_iterate (grub_disk_t disk,
{ {
e = mbr.entries + i; e = mbr.entries + i;
if (grub_pc_partition_is_extended (e->type)) if (grub_msdos_partition_is_extended (e->type))
{ {
p.offset = pcdata.ext_offset + grub_le_to_cpu32 (e->start); p.offset = pcdata.ext_offset + grub_le_to_cpu32 (e->start);
if (! pcdata.ext_offset) if (! pcdata.ext_offset)
@ -234,14 +252,14 @@ static grub_partition_t
pc_partition_map_probe (grub_disk_t disk, const char *str) pc_partition_map_probe (grub_disk_t disk, const char *str)
{ {
grub_partition_t p; grub_partition_t p;
struct grub_pc_partition *pcdata; struct grub_msdos_partition *pcdata;
auto int find_func (grub_disk_t d, const grub_partition_t partition); auto int find_func (grub_disk_t d, const grub_partition_t partition);
int find_func (grub_disk_t d __attribute__ ((unused)), int find_func (grub_disk_t d __attribute__ ((unused)),
const grub_partition_t partition) const grub_partition_t partition)
{ {
struct grub_pc_partition *partdata = partition->data; struct grub_msdos_partition *partdata = partition->data;
if ((pcdata->dos_part == partdata->dos_part || pcdata->dos_part == -1) if ((pcdata->dos_part == partdata->dos_part || pcdata->dos_part == -1)
&& pcdata->bsd_part == partdata->bsd_part) && pcdata->bsd_part == partdata->bsd_part)
@ -283,7 +301,7 @@ static char *
pc_partition_map_get_name (const grub_partition_t p) pc_partition_map_get_name (const grub_partition_t p)
{ {
char *name; char *name;
struct grub_pc_partition *pcdata = p->data; struct grub_msdos_partition *pcdata = p->data;
name = grub_malloc (13); name = grub_malloc (13);
if (! name) if (! name)
@ -301,9 +319,9 @@ pc_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_pc_partition_map = static struct grub_partition_map grub_msdos_partition_map =
{ {
.name = "pc_partition_map", .name = "part_msdos",
.iterate = pc_partition_map_iterate, .iterate = pc_partition_map_iterate,
.probe = pc_partition_map_probe, .probe = pc_partition_map_probe,
.get_name = pc_partition_map_get_name .get_name = pc_partition_map_get_name
@ -311,10 +329,10 @@ static struct grub_partition_map grub_pc_partition_map =
GRUB_MOD_INIT(pc_partition_map) GRUB_MOD_INIT(pc_partition_map)
{ {
grub_partition_map_register (&grub_pc_partition_map); grub_partition_map_register (&grub_msdos_partition_map);
} }
GRUB_MOD_FINI(pc_partition_map) GRUB_MOD_FINI(pc_partition_map)
{ {
grub_partition_map_unregister (&grub_pc_partition_map); grub_partition_map_unregister (&grub_msdos_partition_map);
} }

View file

@ -196,7 +196,7 @@ sun_partition_map_get_name (const grub_partition_t p)
/* Partition map type. */ /* Partition map type. */
static struct grub_partition_map grub_sun_partition_map = static struct grub_partition_map grub_sun_partition_map =
{ {
.name = "sun_partition_map", .name = "part_sun",
.iterate = sun_partition_map_iterate, .iterate = sun_partition_map_iterate,
.probe = sun_partition_map_probe, .probe = sun_partition_map_probe,
.get_name = sun_partition_map_get_name .get_name = sun_partition_map_get_name

View file

@ -22,7 +22,7 @@
#include <grub/misc.h> #include <grub/misc.h>
#include <grub/mm.h> #include <grub/mm.h>
#include <grub/err.h> #include <grub/err.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/device.h> #include <grub/device.h>
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/partition.h> #include <grub/partition.h>
@ -42,7 +42,7 @@ static grub_err_t grub_pcpart_boot (const grub_device_t dev,
{ {
int i, index; int i, index;
grub_partition_t part; grub_partition_t part;
struct grub_pc_partition_mbr mbr; struct grub_msdos_partition_mbr mbr;
if (dev->disk->partition->offset) if (dev->disk->partition->offset)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "not a primary partition"); return grub_error (GRUB_ERR_BAD_ARGUMENT, "not a primary partition");
@ -92,7 +92,7 @@ static grub_err_t grub_pcpart_type (const grub_device_t dev,
int index; int index;
grub_uint8_t type; grub_uint8_t type;
grub_partition_t part; grub_partition_t part;
struct grub_pc_partition_mbr mbr; struct grub_msdos_partition_mbr mbr;
index = dev->disk->partition->index; index = dev->disk->partition->index;
part = dev->disk->partition; part = dev->disk->partition;
@ -119,8 +119,8 @@ static grub_err_t grub_pcpart_type (const grub_device_t dev,
type &= ~GRUB_PC_PARTITION_TYPE_HIDDEN_FLAG; type &= ~GRUB_PC_PARTITION_TYPE_HIDDEN_FLAG;
} }
if (grub_pc_partition_is_empty (type) if (grub_msdos_partition_is_empty (type)
|| grub_pc_partition_is_extended (type)) || grub_msdos_partition_is_extended (type))
{ {
dev->disk->partition = part; dev->disk->partition = part;
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid type"); return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid type");
@ -140,10 +140,10 @@ static grub_err_t grub_pcpart_type (const grub_device_t dev,
GRUB_MOD_INIT (pcpart) GRUB_MOD_INIT (pcpart)
{ {
activate_table_handle = grub_parttool_register ("pc_partition_map", activate_table_handle = grub_parttool_register ("part_msdos",
grub_pcpart_boot, grub_pcpart_boot,
grub_pcpart_bootargs); grub_pcpart_bootargs);
type_table_handle = grub_parttool_register ("pc_partition_map", type_table_handle = grub_parttool_register ("part_msdos",
grub_pcpart_type, grub_pcpart_type,
grub_pcpart_typeargs); grub_pcpart_typeargs);

View file

@ -58,7 +58,7 @@
#define setjmp grub_setjmp #define setjmp grub_setjmp
#define longjmp grub_longjmp #define longjmp grub_longjmp
#define fputs(s,f) grub_printf(s) #define fputs(s,f) grub_printf("%s", s)
#define isdigit grub_isdigit #define isdigit grub_isdigit
#define isalpha grub_isalpha #define isalpha grub_isalpha

View file

@ -122,6 +122,10 @@ grub_script_execute_cmdline (struct grub_script_cmd *cmd)
grub_errno = GRUB_ERR_NONE; grub_errno = GRUB_ERR_NONE;
} }
grub_free (assign); grub_free (assign);
grub_sprintf (errnobuf, "%d", grub_errno);
grub_env_set ("?", errnobuf);
return 0; return 0;
} }
} }

View file

@ -99,7 +99,7 @@ grub_script_function_find (char *functionname)
break; break;
if (! func) if (! func)
grub_error (GRUB_ERR_UNKNOWN_COMMAND, "unknown command `%s'", functionname); grub_error (GRUB_ERR_UNKNOWN_COMMAND, "unknown command `%.20s'", functionname);
return func; return func;
} }

View file

@ -134,8 +134,6 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
{ {
grub_parser_state_t newstate; grub_parser_state_t newstate;
char use; char use;
char *buffer;
char *bp;
struct grub_lexer_param *state = parsestate->lexerstate; struct grub_lexer_param *state = parsestate->lexerstate;
int firstrun = 1; int firstrun = 1;
@ -212,6 +210,14 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
/* Check if it is a text. */ /* Check if it is a text. */
if (check_textstate (newstate)) if (check_textstate (newstate))
{ {
char *buffer = NULL;
int bufpos = 0;
/* Buffer is initially large enough to hold most commands
but extends automatically when needed. */
int bufsize = 128;
buffer = grub_malloc (bufsize);
/* In case the string is not quoted, this can be a one char /* In case the string is not quoted, this can be a one char
length symbol. */ length symbol. */
if (newstate == GRUB_PARSER_STATE_TEXT) if (newstate == GRUB_PARSER_STATE_TEXT)
@ -254,16 +260,12 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
} }
} }
if (doexit) if (doexit)
break; {
grub_free (buffer);
break;
}
} }
/* XXX: Use a better size. */
buffer = grub_script_malloc (parsestate, 2048);
if (! buffer)
return 0;
bp = buffer;
/* Read one token, possible quoted. */ /* Read one token, possible quoted. */
while (*state->script) while (*state->script)
{ {
@ -295,32 +297,47 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
} }
if (breakout) if (breakout)
break; break;
if (use)
*(bp++) = use;
} }
else if (use)
*(bp++) = use; if (use)
{
if (bufsize <= bufpos + 1)
{
bufsize <<= 1;
buffer = grub_realloc (buffer, bufsize);
}
buffer[bufpos++] = use;
}
state->state = newstate; state->state = newstate;
nextchar (state); nextchar (state);
} }
/* A string of text was read in. */ /* A string of text was read in. */
*bp = '\0'; if (bufsize <= bufpos + 1)
{
bufsize <<= 1;
buffer = grub_realloc (buffer, bufsize);
}
buffer[bufpos++] = 0;
grub_dprintf ("scripting", "token=`%s'\n", buffer); grub_dprintf ("scripting", "token=`%s'\n", buffer);
yylval->arg = grub_script_arg_add (parsestate, yylval->arg, yylval->arg = grub_script_arg_add (parsestate, yylval->arg,
GRUB_SCRIPT_ARG_TYPE_STR, buffer); GRUB_SCRIPT_ARG_TYPE_STR, buffer);
grub_free (buffer);
} }
else if (newstate == GRUB_PARSER_STATE_VAR else if (newstate == GRUB_PARSER_STATE_VAR
|| newstate == GRUB_PARSER_STATE_QVAR) || newstate == GRUB_PARSER_STATE_QVAR)
{ {
/* XXX: Use a better size. */ char *buffer = NULL;
buffer = grub_script_malloc (parsestate, 2096); int bufpos = 0;
if (! buffer) /* Buffer is initially large enough to hold most commands
return 0; but extends automatically when needed. */
int bufsize = 128;
bp = buffer; buffer = grub_malloc (bufsize);
/* This is a variable, read the variable name. */ /* This is a variable, read the variable name. */
while (*state->script) while (*state->script)
@ -340,16 +357,33 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
} }
if (use) if (use)
*(bp++) = use; {
if (bufsize <= bufpos + 1)
{
bufsize <<= 1;
buffer = grub_realloc (buffer, bufsize);
}
buffer[bufpos++] = use;
}
nextchar (state); nextchar (state);
state->state = newstate; state->state = newstate;
} }
*bp = '\0'; if (bufsize <= bufpos + 1)
{
bufsize <<= 1;
buffer = grub_realloc (buffer, bufsize);
}
buffer[bufpos++] = 0;
state->state = newstate; state->state = newstate;
yylval->arg = grub_script_arg_add (parsestate, yylval->arg, yylval->arg = grub_script_arg_add (parsestate, yylval->arg,
GRUB_SCRIPT_ARG_TYPE_VAR, buffer); GRUB_SCRIPT_ARG_TYPE_VAR, buffer);
grub_dprintf ("scripting", "vartoken=`%s'\n", buffer); grub_dprintf ("scripting", "vartoken=`%s'\n", buffer);
grub_free (buffer);
} }
else else
{ {

View file

@ -110,10 +110,13 @@ grub_script_arg_add (struct grub_parser_param *state, struct grub_script_arg *ar
{ {
struct grub_script_arg *argpart; struct grub_script_arg *argpart;
struct grub_script_arg *ll; struct grub_script_arg *ll;
int len;
argpart = (struct grub_script_arg *) grub_script_malloc (state, sizeof (*arg)); argpart = (struct grub_script_arg *) grub_script_malloc (state, sizeof (*arg));
argpart->type = type; argpart->type = type;
argpart->str = str; len = grub_strlen (str) + 1;
argpart->str = grub_script_malloc (state, len);
grub_memcpy (argpart->str, str, len);
argpart->next = 0; argpart->next = 0;
if (! arg) if (! arg)

View file

@ -1,6 +1,6 @@
/* /*
* GRUB -- GRand Unified Bootloader * GRUB -- GRand Unified Bootloader
* Copyright (C) 2002,2003,2005,2007,2008 Free Software Foundation, Inc. * Copyright (C) 2002,2003,2005,2007,2008,2009 Free Software Foundation, Inc.
* *
* GRUB is free software: you can redistribute it and/or modify * GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,15 +16,41 @@
* along with GRUB. If not, see <http://www.gnu.org/licenses/>. * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <grub/machine/memory.h>
#include <grub/machine/console.h> #include <grub/machine/console.h>
#include <grub/term.h> #include <grub/term.h>
#include <grub/types.h> #include <grub/types.h>
static const struct grub_machine_bios_data_area *bios_data_area =
(struct grub_machine_bios_data_area *) GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR;
#define KEYBOARD_LEFT_SHIFT (1 << 0)
#define KEYBOARD_RIGHT_SHIFT (1 << 1)
#define KEYBOARD_CTRL (1 << 2)
#define KEYBOARD_ALT (1 << 3)
static int
grub_console_getkeystatus (void)
{
grub_uint8_t status = bios_data_area->keyboard_flag_lower;
int mods = 0;
if (status & (KEYBOARD_LEFT_SHIFT | KEYBOARD_RIGHT_SHIFT))
mods |= GRUB_TERM_STATUS_SHIFT;
if (status & KEYBOARD_CTRL)
mods |= GRUB_TERM_STATUS_CTRL;
if (status & KEYBOARD_ALT)
mods |= GRUB_TERM_STATUS_ALT;
return mods;
}
static struct grub_term_input grub_console_term_input = static struct grub_term_input grub_console_term_input =
{ {
.name = "console", .name = "console",
.checkkey = grub_console_checkkey, .checkkey = grub_console_checkkey,
.getkey = grub_console_getkey, .getkey = grub_console_getkey,
.getkeystatus = grub_console_getkeystatus,
}; };
static struct grub_term_output grub_console_term_output = static struct grub_term_output grub_console_term_output =

View file

@ -1,6 +1,6 @@
/* /*
* GRUB -- GRand Unified Bootloader * GRUB -- GRand Unified Bootloader
* Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008 Free Software Foundation, Inc. * Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009 Free Software Foundation, Inc.
* *
* GRUB is free software: you can redistribute it and/or modify * GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -17,6 +17,7 @@
*/ */
#include <grub/machine/machine.h> #include <grub/machine/machine.h>
#include <grub/machine/memory.h>
#include <grub/machine/serial.h> #include <grub/machine/serial.h>
#include <grub/machine/console.h> #include <grub/machine/console.h>
#include <grub/term.h> #include <grub/term.h>
@ -64,12 +65,11 @@ struct serial_port
static struct serial_port serial_settings; static struct serial_port serial_settings;
#ifdef GRUB_MACHINE_PCBIOS #ifdef GRUB_MACHINE_PCBIOS
/* The BIOS data area. */ static const unsigned short *serial_hw_io_addr = (const unsigned short *) GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR;
static const unsigned short *serial_hw_io_addr = (const unsigned short *) 0x0400;
#define GRUB_SERIAL_PORT_NUM 4 #define GRUB_SERIAL_PORT_NUM 4
#else #else
static const unsigned short serial_hw_io_addr[] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 }; static const unsigned short serial_hw_io_addr[] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8 };
#define GRUB_SERIAL_PORT_NUM (sizeof(serial_hw_io_addr)/sizeof(serial_hw_io_addr[0])) #define GRUB_SERIAL_PORT_NUM (ARRAY_SIZE(serial_hw_io_addr))
#endif #endif
/* Return the port number for the UNITth serial device. */ /* Return the port number for the UNITth serial device. */

View file

@ -58,6 +58,19 @@ static char keyboard_map_shift[128] =
static grub_usb_device_t usbdev; static grub_usb_device_t usbdev;
/* Valid values for bmRequestType. See HID definition version 1.11 section
7.2. */
#define USB_HID_HOST_TO_DEVICE 0x21
#define USB_HID_DEVICE_TO_HOST 0x61
/* Valid values for bRequest. See HID definition version 1.11 section 7.2. */
#define USB_HID_GET_REPORT 0x01
#define USB_HID_GET_IDLE 0x02
#define USB_HID_GET_PROTOCOL 0x03
#define USB_HID_SET_REPORT 0x09
#define USB_HID_SET_IDLE 0x0A
#define USB_HID_SET_PROTOCOL 0x0B
static void static void
grub_usb_hid (void) grub_usb_hid (void)
{ {
@ -90,17 +103,19 @@ grub_usb_hid (void)
grub_usb_iterate (usb_iterate); grub_usb_iterate (usb_iterate);
/* Place the device in boot mode. */ /* Place the device in boot mode. */
grub_usb_control_msg (usbdev, 0x21, 0x0B, 0, 0, 0, 0); grub_usb_control_msg (usbdev, USB_HID_HOST_TO_DEVICE, USB_HID_SET_PROTOCOL,
0, 0, 0, 0);
/* Reports every time an event occurs and not more often than that. */ /* Reports every time an event occurs and not more often than that. */
grub_usb_control_msg (usbdev, 0x21, 0x0A, 0<<8, 0, 0, 0); grub_usb_control_msg (usbdev, USB_HID_HOST_TO_DEVICE, USB_HID_SET_IDLE,
0<<8, 0, 0, 0);
} }
static grub_err_t static grub_err_t
grub_usb_keyboard_getreport (grub_usb_device_t dev, unsigned char *report) grub_usb_keyboard_getreport (grub_usb_device_t dev, grub_uint8_t *report)
{ {
return grub_usb_control_msg (dev, (1 << 7) | (1 << 5) | 1, 0x01, 0, 0, return grub_usb_control_msg (dev, USB_HID_DEVICE_TO_HOST, USB_HID_GET_REPORT,
8, (char *) report); 0, 0, 8, (char *) report);
} }
@ -108,20 +123,24 @@ grub_usb_keyboard_getreport (grub_usb_device_t dev, unsigned char *report)
static int static int
grub_usb_keyboard_checkkey (void) grub_usb_keyboard_checkkey (void)
{ {
unsigned char data[8]; grub_uint8_t data[8];
int key; int key;
int i;
grub_err_t err; grub_err_t err;
grub_uint64_t currtime;
int timeout = 50;
data[2] = 0; data[2] = 0;
for (i = 0; i < 50; i++) currtime = grub_get_time_ms ();
do
{ {
/* Get_Report. */ /* Get_Report. */
err = grub_usb_keyboard_getreport (usbdev, data); err = grub_usb_keyboard_getreport (usbdev, data);
if (! err && data[2]) /* Implement a timeout. */
if (grub_get_time_ms () > currtime + timeout)
break; break;
} }
while (err || !data[2]);
if (err || !data[2]) if (err || !data[2])
return -1; return -1;
@ -147,7 +166,8 @@ grub_usb_keyboard_checkkey (void)
/* Wait until the key is released. */ /* Wait until the key is released. */
while (!err && data[2]) while (!err && data[2])
{ {
err = grub_usb_control_msg (usbdev, (1 << 7) | (1 << 5) | 1, 0x01, 0, 0, err = grub_usb_control_msg (usbdev, USB_HID_DEVICE_TO_HOST,
USB_HID_GET_REPORT, 0, 0,
sizeof (data), (char *) data); sizeof (data), (char *) data);
grub_dprintf ("usb_keyboard", grub_dprintf ("usb_keyboard",
"report2: 0x%02x 0x%02x 0x%02x 0x%02x" "report2: 0x%02x 0x%02x 0x%02x 0x%02x"
@ -174,7 +194,7 @@ grub_usb_keyboard_getkey (void)
{ {
int key; int key;
grub_err_t err; grub_err_t err;
unsigned char data[8]; grub_uint8_t data[8];
grub_uint64_t currtime; grub_uint64_t currtime;
int timeout; int timeout;
static grub_usb_keyboard_repeat_t repeat = GRUB_HIDBOOT_REPEAT_NONE; static grub_usb_keyboard_repeat_t repeat = GRUB_HIDBOOT_REPEAT_NONE;
@ -234,11 +254,67 @@ grub_usb_keyboard_getkey (void)
return key; return key;
} }
static int
grub_usb_keyboard_getkeystatus (void)
{
grub_uint8_t data[8];
int mods = 0;
grub_err_t err;
grub_uint64_t currtime;
int timeout = 50;
/* Set idle time to the minimum offered by the spec (4 milliseconds) so
that we can find out the current state. */
grub_usb_control_msg (usbdev, USB_HID_HOST_TO_DEVICE, USB_HID_SET_IDLE,
0<<8, 0, 0, 0);
currtime = grub_get_time_ms ();
do
{
/* Get_Report. */
err = grub_usb_keyboard_getreport (usbdev, data);
/* Implement a timeout. */
if (grub_get_time_ms () > currtime + timeout)
break;
}
while (err || !data[0]);
/* Go back to reporting every time an event occurs and not more often than
that. */
grub_usb_control_msg (usbdev, USB_HID_HOST_TO_DEVICE, USB_HID_SET_IDLE,
0<<8, 0, 0, 0);
/* We allowed a while for modifiers to show up in the report, but it is
not an error if they never did. */
if (err)
return -1;
grub_dprintf ("usb_keyboard",
"report: 0x%02x 0x%02x 0x%02x 0x%02x"
" 0x%02x 0x%02x 0x%02x 0x%02x\n",
data[0], data[1], data[2], data[3],
data[4], data[5], data[6], data[7]);
/* Check Shift, Control, and Alt status. */
if (data[0] & 0x02 || data[0] & 0x20)
mods |= GRUB_TERM_STATUS_SHIFT;
if (data[0] & 0x01 || data[0] & 0x10)
mods |= GRUB_TERM_STATUS_CTRL;
if (data[0] & 0x04 || data[0] & 0x40)
mods |= GRUB_TERM_STATUS_ALT;
grub_errno = GRUB_ERR_NONE;
return mods;
}
static struct grub_term_input grub_usb_keyboard_term = static struct grub_term_input grub_usb_keyboard_term =
{ {
.name = "usb_keyboard", .name = "usb_keyboard",
.checkkey = grub_usb_keyboard_checkkey, .checkkey = grub_usb_keyboard_checkkey,
.getkey = grub_usb_keyboard_getkey, .getkey = grub_usb_keyboard_getkey,
.getkeystatus = grub_usb_keyboard_getkeystatus,
.next = 0 .next = 0
}; };

View file

@ -141,7 +141,24 @@ if [ "x${GRUB_TERMINAL}" != "x" ] ; then
fi fi
case x${GRUB_TERMINAL_OUTPUT} in case x${GRUB_TERMINAL_OUTPUT} in
x | xconsole | xserial | xofconsole | xgfxterm) ;; x | xgfxterm)
# If this platform supports gfxterm, try to use it.
if test -e ${grub_prefix}/gfxterm.mod ; then
GRUB_VIDEO_BACKEND=
for i in vbe ; do
if test -e ${grub_prefix}/$i.mod ; then
GRUB_VIDEO_BACKEND=$i
break
fi
done
if [ -n "${GRUB_VIDEO_BACKEND}" ] ; then
GRUB_TERMINAL_OUTPUT=gfxterm
elif [ "${GRUB_TERMINAL_OUTPUT}" = "gfxterm" ] ; then
echo "No suitable backend could be found for gfxterm." >&2 ; exit 1
fi
fi
;;
xconsole | xserial | xofconsole) ;;
*) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;; *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;;
esac esac
@ -190,7 +207,8 @@ export GRUB_DEVICE \
GRUB_DEVICE_BOOT_UUID \ GRUB_DEVICE_BOOT_UUID \
GRUB_FS \ GRUB_FS \
GRUB_FONT_PATH \ GRUB_FONT_PATH \
GRUB_PRELOAD_MODULES GRUB_PRELOAD_MODULES \
GRUB_VIDEO_BACKEND
# These are optional, user-defined variables. # These are optional, user-defined variables.
export GRUB_DEFAULT \ export GRUB_DEFAULT \
@ -205,7 +223,8 @@ export GRUB_DEFAULT \
GRUB_SERIAL_COMMAND \ GRUB_SERIAL_COMMAND \
GRUB_DISABLE_LINUX_UUID \ GRUB_DISABLE_LINUX_UUID \
GRUB_DISABLE_LINUX_RECOVERY \ GRUB_DISABLE_LINUX_RECOVERY \
GRUB_GFXMODE GRUB_GFXMODE \
GRUB_DISABLE_OS_PROBER
if test "x${grub_cfg}" != "x"; then if test "x${grub_cfg}" != "x"; then
rm -f ${grub_cfg}.new rm -f ${grub_cfg}.new
@ -213,7 +232,8 @@ if test "x${grub_cfg}" != "x"; then
# Allow this to fail, since /boot/grub/ might need to be fatfs to support some # Allow this to fail, since /boot/grub/ might need to be fatfs to support some
# firmware implementations (e.g. OFW or EFI). # firmware implementations (e.g. OFW or EFI).
chmod 444 ${grub_cfg}.new || true chmod 400 ${grub_cfg}.new || grub_warn "Could not make ${grub_cfg}.new readable by only root.\
This means that if the generated config contains a password it is readable by everyone"
fi fi
echo "Generating grub.cfg ..." >&2 echo "Generating grub.cfg ..." >&2

View file

@ -140,6 +140,11 @@ prepare_grub_to_access_device ()
echo "insmod ${module}" echo "insmod ${module}"
done done
fs="`${grub_probe} --device ${device} --target=fs`"
for module in ${fs} ; do
echo "insmod ${module}"
done
# If there's a filesystem UUID that GRUB is capable of identifying, use it; # If there's a filesystem UUID that GRUB is capable of identifying, use it;
# otherwise set root as per value in device.map. # otherwise set root as per value in device.map.
echo "set root=`${grub_probe} --device ${device} --target=drive`" echo "set root=`${grub_probe} --device ${device} --target=drive`"

View file

@ -25,7 +25,7 @@
#include <grub/file.h> #include <grub/file.h>
#include <grub/fs.h> #include <grub/fs.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/util/hostdisk.h> #include <grub/util/hostdisk.h>
#include <grub/util/getroot.h> #include <grub/util/getroot.h>
#include <grub/term.h> #include <grub/term.h>
@ -79,26 +79,13 @@ grub_refresh (void)
static void static void
probe_partmap (grub_disk_t disk) probe_partmap (grub_disk_t disk)
{ {
char *name;
char *underscore;
if (disk->partition == NULL) if (disk->partition == NULL)
{ {
grub_util_info ("No partition map found for %s", disk->name); grub_util_info ("No partition map found for %s", disk->name);
return; return;
} }
name = strdup (disk->partition->partmap->name); printf ("%s\n", disk->partition->partmap->name);
if (! name)
grub_util_error ("Not enough memory");
underscore = strchr (name, '_');
if (! underscore)
grub_util_error ("Invalid partition map %s", name);
*underscore = '\0';
printf ("%s\n", name);
free (name);
} }
static int static int
@ -248,11 +235,14 @@ probe (const char *path, char *device_name)
if (print == PRINT_FS) if (print == PRINT_FS)
{ {
/* FIXME: `path' can't be used to read a file via GRUB facilities,
because it's not relative to its root. */
#if 0
struct stat st; struct stat st;
stat (path, &st); stat (path, &st);
if (st.st_mode == S_IFREG) if (S_ISREG (st.st_mode))
{ {
/* Regular file. Verify that we can read it properly. */ /* Regular file. Verify that we can read it properly. */
@ -271,6 +261,8 @@ probe (const char *path, char *device_name)
if (memcmp (filebuf_via_grub, filebuf_via_sys, file->size)) if (memcmp (filebuf_via_grub, filebuf_via_sys, file->size))
grub_util_error ("files differ"); grub_util_error ("files differ");
} }
#endif
printf ("%s\n", fs->name); printf ("%s\n", fs->name);
} }

View file

@ -73,23 +73,11 @@ case x${GRUB_TERMINAL_OUTPUT} in
# Make the font accessible # Make the font accessible
prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_FONT_PATH}` prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_FONT_PATH}`
# Pick a video backend
video_backend=
for i in vbe ; do
if test -e ${grub_prefix}/$i.mod ; then
video_backend=$i
break
fi
done
if ! [ "${video_backend}" ] ; then
echo "No suitable backend could be found for gfxterm." >&2 ; exit 1
fi
cat << EOF cat << EOF
if loadfont `make_system_path_relative_to_its_root ${GRUB_FONT_PATH}` ; then if loadfont `make_system_path_relative_to_its_root ${GRUB_FONT_PATH}` ; then
set gfxmode=${GRUB_GFXMODE} set gfxmode=${GRUB_GFXMODE}
insmod gfxterm insmod gfxterm
insmod ${video_backend} insmod ${GRUB_VIDEO_BACKEND}
if terminal_output gfxterm ; then true ; else if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don't # For backward compatibility with versions of terminal.mod that don't
# understand terminal_output # understand terminal_output

View file

@ -50,8 +50,10 @@ if [ "x$kfreebsd" != "x" ] ; then
devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname` devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname`
fi fi
# For "ufs" it's the same. Do we care about the others? case ${GRUB_FS} in
kfreebsd_fs=${GRUB_FS} ufs1 | ufs2) kfreebsd_fs=ufs ;;
*) kfreebsd_fs=${GRUB_FS} ;;
esac
cat << EOF cat << EOF
menuentry "${OS}" { menuentry "${OS}" {

View file

@ -22,6 +22,10 @@ libdir=@libdir@
. ${libdir}/grub/grub-mkconfig_lib . ${libdir}/grub/grub-mkconfig_lib
if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
exit 0
fi
if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
# missing os-prober and/or linux-boot-prober # missing os-prober and/or linux-boot-prober
exit 0 exit 0
@ -53,11 +57,16 @@ menuentry "${LONGNAME} (on ${DEVICE})" {
EOF EOF
prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/" prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
if [ "${LONGNAME}" != "Windows Vista (loader)" ] ; then case ${LONGNAME} in
cat << EOF Windows\ Vista*|Windows\ 7*)
;;
*)
cat << EOF
drivemap -s (hd0) \${root} drivemap -s (hd0) \${root}
EOF EOF
fi ;;
esac
cat <<EOF cat <<EOF
chainloader +1 chainloader +1
} }

View file

@ -1,3 +1,5 @@
#!/bin/sh #!/bin/sh
exec tail -n +3 $0 exec tail -n +3 $0
# This file is an example on how to add custom entries # This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.

View file

@ -19,7 +19,7 @@
#include <grub/disk.h> #include <grub/disk.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/types.h> #include <grub/types.h>
#include <grub/err.h> #include <grub/err.h>
#include <grub/util/misc.h> #include <grub/util/misc.h>
@ -947,9 +947,9 @@ grub_util_biosdisk_get_grub_dev (const char *os_dev)
int find_partition (grub_disk_t disk __attribute__ ((unused)), int find_partition (grub_disk_t disk __attribute__ ((unused)),
const grub_partition_t partition) const grub_partition_t partition)
{ {
struct grub_pc_partition *pcdata = NULL; struct grub_msdos_partition *pcdata = NULL;
if (strcmp (partition->partmap->name, "pc_partition_map") == 0) if (strcmp (partition->partmap->name, "part_msdos") == 0)
pcdata = partition->data; pcdata = partition->data;
if (pcdata) if (pcdata)

View file

@ -25,7 +25,7 @@
#include <grub/file.h> #include <grub/file.h>
#include <grub/fs.h> #include <grub/fs.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/gpt_partition.h> #include <grub/gpt_partition.h>
#include <grub/env.h> #include <grub/env.h>
#include <grub/util/hostdisk.h> #include <grub/util/hostdisk.h>
@ -121,14 +121,14 @@ setup (const char *dir,
int NESTED_FUNC_ATTR find_usable_region_msdos (grub_disk_t disk __attribute__ ((unused)), int NESTED_FUNC_ATTR find_usable_region_msdos (grub_disk_t disk __attribute__ ((unused)),
const grub_partition_t p) const grub_partition_t p)
{ {
struct grub_pc_partition *pcdata = p->data; struct grub_msdos_partition *pcdata = p->data;
/* There's always an embed region, and it starts right after the MBR. */ /* There's always an embed region, and it starts right after the MBR. */
embed_region.start = 1; embed_region.start = 1;
/* For its end offset, include as many dummy partitions as we can. */ /* For its end offset, include as many dummy partitions as we can. */
if (! grub_pc_partition_is_empty (pcdata->dos_type) if (! grub_msdos_partition_is_empty (pcdata->dos_type)
&& ! grub_pc_partition_is_bsd (pcdata->dos_type) && ! grub_msdos_partition_is_bsd (pcdata->dos_type)
&& embed_region.end > p->start) && embed_region.end > p->start)
embed_region.end = p->start; embed_region.end = p->start;
@ -279,15 +279,15 @@ setup (const char *dir,
if (root_dev->disk->partition) if (root_dev->disk->partition)
{ {
if (strcmp (root_dev->disk->partition->partmap->name, if (strcmp (root_dev->disk->partition->partmap->name,
"pc_partition_map") == 0) "part_msdos") == 0)
{ {
struct grub_pc_partition *pcdata = struct grub_msdos_partition *pcdata =
root_dev->disk->partition->data; root_dev->disk->partition->data;
dos_part = pcdata->dos_part; dos_part = pcdata->dos_part;
bsd_part = pcdata->bsd_part; bsd_part = pcdata->bsd_part;
} }
else if (strcmp (root_dev->disk->partition->partmap->name, else if (strcmp (root_dev->disk->partition->partmap->name,
"gpt_partition_map") == 0) "part_gpt") == 0)
{ {
dos_part = root_dev->disk->partition->index; dos_part = root_dev->disk->partition->index;
bsd_part = -1; bsd_part = -1;
@ -338,12 +338,12 @@ setup (const char *dir,
goto unable_to_embed; goto unable_to_embed;
} }
grub_partition_iterate (dest_dev->disk, (strcmp (dest_partmap, "pc_partition_map") ? grub_partition_iterate (dest_dev->disk, (strcmp (dest_partmap, "part_msdos") ?
find_usable_region_gpt : find_usable_region_msdos)); find_usable_region_gpt : find_usable_region_msdos));
if (embed_region.end == embed_region.start) if (embed_region.end == embed_region.start)
{ {
if (! strcmp (dest_partmap, "pc_partition_map")) if (! strcmp (dest_partmap, "part_msdos"))
grub_util_warn ("This msdos-style partition label has no post-MBR gap; embedding won't be possible!"); grub_util_warn ("This msdos-style partition label has no post-MBR gap; embedding won't be possible!");
else else
grub_util_warn ("This GPT partition label has no BIOS Boot Partition; embedding won't be possible!"); grub_util_warn ("This GPT partition label has no BIOS Boot Partition; embedding won't be possible!");

View file

@ -25,7 +25,7 @@
#include <grub/file.h> #include <grub/file.h>
#include <grub/fs.h> #include <grub/fs.h>
#include <grub/partition.h> #include <grub/partition.h>
#include <grub/pc_partition.h> #include <grub/msdos_partition.h>
#include <grub/gpt_partition.h> #include <grub/gpt_partition.h>
#include <grub/env.h> #include <grub/env.h>
#include <grub/util/hostdisk.h> #include <grub/util/hostdisk.h>

View file

@ -90,6 +90,302 @@ grub_video_fbblit_replace_directN (struct grub_video_fbblit_info *dst,
} }
} }
/* Optimized replacing blitter for 1-bit to 32bit. */
void
grub_video_fbblit_replace_32bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint32_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
*(grub_uint32_t *) dstptr = fgcolor;
else
*(grub_uint32_t *) dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 4;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized replacing blitter for 1-bit to 24-bit. */
void
grub_video_fbblit_replace_24bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint32_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width - 1; i++)
{
if (*srcptr & srcmask)
*(grub_uint32_t *) dstptr = fgcolor;
else
*(grub_uint32_t *) dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 3;
}
if (*srcptr & srcmask)
{
*dstptr++ = fgcolor & 0xff;
*dstptr++ = (fgcolor & 0xff00) >> 8;
*dstptr++ = (fgcolor & 0xff0000) >> 16;
}
else
{
*dstptr++ = bgcolor & 0xff;
*dstptr++ = (bgcolor & 0xff00) >> 8;
*dstptr++ = (bgcolor & 0xff0000) >> 16;
}
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized replacing blitter for 1-bit to 16-bit. */
void
grub_video_fbblit_replace_16bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint16_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
*(grub_uint16_t *) dstptr = fgcolor;
else
*(grub_uint16_t *) dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 2;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized replacing blitter for 1-bit to 8-bit. */
void
grub_video_fbblit_replace_8bit_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint8_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
if (*srcptr & srcmask)
*(grub_uint8_t *) dstptr = fgcolor;
else
*(grub_uint8_t *) dstptr = bgcolor;
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr++;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized replacing blitter for RGBX8888 to BGRX8888. */ /* Optimized replacing blitter for RGBX8888 to BGRX8888. */
void void
grub_video_fbblit_replace_BGRX8888_RGBX8888 (struct grub_video_fbblit_info *dst, grub_video_fbblit_replace_BGRX8888_RGBX8888 (struct grub_video_fbblit_info *dst,
@ -826,3 +1122,294 @@ grub_video_fbblit_blend_index_RGBA8888 (struct grub_video_fbblit_info *dst,
} }
} }
} }
/* Optimized blending blitter for 1-bit to XXXA8888. */
void
grub_video_fbblit_blend_XXXA8888_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint32_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
grub_uint32_t color;
grub_uint8_t a;
if (*srcptr & srcmask)
color = fgcolor;
else
color = bgcolor;
a = (color >> 24) & 0xff;
if (a == 255)
*(grub_uint32_t *) dstptr = color;
else if (a != 0)
{
grub_uint8_t s1 = (color >> 0) & 0xFF;
grub_uint8_t s2 = (color >> 8) & 0xFF;
grub_uint8_t s3 = (color >> 16) & 0xFF;
grub_uint8_t d1 = (*(grub_uint32_t *) dstptr >> 0) & 0xFF;
grub_uint8_t d2 = (*(grub_uint32_t *) dstptr >> 8) & 0xFF;
grub_uint8_t d3 = (*(grub_uint32_t *) dstptr >> 16) & 0xFF;
d1 = (d1 * (255 - a) + s1 * a) / 255;
d2 = (d2 * (255 - a) + s2 * a) / 255;
d3 = (d3 * (255 - a) + s3 * a) / 255;
*(grub_uint32_t *) dstptr = (a << 24) | (d3 << 16) | (d2 << 8)
| d1;
}
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 4;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized blending blitter for 1-bit to XXX888. */
void
grub_video_fbblit_blend_XXX888_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint32_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
grub_uint32_t color;
grub_uint8_t a;
if (*srcptr & srcmask)
{
color = fgcolor;
a = src->mode_info->fg_alpha;
}
else
{
color = bgcolor;
a = src->mode_info->bg_alpha;
}
if (a == 255)
{
((grub_uint8_t *) dstptr)[0] = color & 0xff;
((grub_uint8_t *) dstptr)[1] = (color & 0xff00) >> 8;
((grub_uint8_t *) dstptr)[2] = (color & 0xff0000) >> 16;
}
else if (a != 0)
{
grub_uint8_t s1 = (color >> 0) & 0xFF;
grub_uint8_t s2 = (color >> 8) & 0xFF;
grub_uint8_t s3 = (color >> 16) & 0xFF;
grub_uint8_t d1 = (*(grub_uint32_t *) dstptr >> 0) & 0xFF;
grub_uint8_t d2 = (*(grub_uint32_t *) dstptr >> 8) & 0xFF;
grub_uint8_t d3 = (*(grub_uint32_t *) dstptr >> 16) & 0xFF;
((grub_uint8_t *) dstptr)[0] = (d1 * (255 - a) + s1 * a) / 255;
((grub_uint8_t *) dstptr)[1] = (d2 * (255 - a) + s2 * a) / 255;
((grub_uint8_t *) dstptr)[2] = (d3 * (255 - a) + s3 * a) / 255;
}
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 3;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}
/* Optimized blending blitter for 1-bit to XXX888. */
void
grub_video_fbblit_blend_XXX565_1bit (struct grub_video_fbblit_info *dst,
struct grub_video_fbblit_info *src,
int x, int y,
int width, int height,
int offset_x, int offset_y)
{
int i;
int j;
grub_uint8_t *srcptr;
grub_uint8_t *dstptr;
grub_uint8_t srcmask;
unsigned int dstrowskip;
unsigned int srcrowskipbyte, srcrowskipbit;
grub_uint16_t fgcolor, bgcolor;
int bit_index;
/* Calculate the number of bytes to advance from the end of one line
to the beginning of the next line. */
dstrowskip = dst->mode_info->pitch - dst->mode_info->bytes_per_pixel * width;
srcrowskipbyte = (src->mode_info->width - width) >> 3;
srcrowskipbit = (src->mode_info->width - width) & 7;
bit_index = offset_y * src->mode_info->width + offset_x;
srcptr = (grub_uint8_t *) src->data + (bit_index >> 3);
srcmask = 1 << (~bit_index & 7);
dstptr = (grub_uint8_t *) grub_video_fb_get_video_ptr (dst, x, y);
fgcolor = grub_video_fb_map_rgba (src->mode_info->fg_red,
src->mode_info->fg_green,
src->mode_info->fg_blue,
src->mode_info->fg_alpha);
bgcolor = grub_video_fb_map_rgba (src->mode_info->bg_red,
src->mode_info->bg_green,
src->mode_info->bg_blue,
src->mode_info->bg_alpha);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i++)
{
grub_uint32_t color;
grub_uint8_t a;
if (*srcptr & srcmask)
{
color = fgcolor;
a = src->mode_info->fg_alpha;
}
else
{
color = bgcolor;
a = src->mode_info->bg_alpha;
}
if (a == 255)
*(grub_uint16_t *) dstptr = color;
else if (a != 0)
{
grub_uint8_t s1 = (color >> 0) & 0x1F;
grub_uint8_t s2 = (color >> 5) & 0x3F;
grub_uint8_t s3 = (color >> 11) & 0x1F;
grub_uint8_t d1 = (*(grub_uint16_t *) dstptr >> 0) & 0x1F;
grub_uint8_t d2 = (*(grub_uint16_t *) dstptr >> 5) & 0x3F;
grub_uint8_t d3 = (*(grub_uint16_t *) dstptr >> 11) & 0x1F;
d1 = (d1 * (255 - a) + s1 * a) / 255;
d2 = (d2 * (255 - a) + s2 * a) / 255;
d3 = (d3 * (255 - a) + s3 * a) / 255;
*(grub_uint16_t *) dstptr = (d1 & 0x1f) | ((d2 & 0x3f) << 5)
| ((d3 & 0x1f) << 11);
}
srcmask >>= 1;
if (!srcmask)
{
srcptr++;
srcmask = 0x80;
}
dstptr += 2;
}
srcptr += srcrowskipbyte;
if (srcmask >> srcrowskipbit)
srcmask >>= srcrowskipbit;
else
{
srcptr++;
srcmask <<= 8 - srcrowskipbit;
}
dstptr += dstrowskip;
}
}

View file

@ -587,6 +587,37 @@ common_blitter (struct grub_video_fbblit_info *target,
return; return;
} }
} }
else if (source->mode_info->blit_format == GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED)
{
if (target->mode_info->bpp == 32)
{
grub_video_fbblit_replace_32bit_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
else if (target->mode_info->bpp == 24)
{
grub_video_fbblit_replace_24bit_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
else if (target->mode_info->bpp == 16)
{
grub_video_fbblit_replace_16bit_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
else if (target->mode_info->bpp == 8)
{
grub_video_fbblit_replace_8bit_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
}
/* No optimized replace operator found, use default (slow) blitter. */ /* No optimized replace operator found, use default (slow) blitter. */
grub_video_fbblit_replace (target, source, x, y, width, height, grub_video_fbblit_replace (target, source, x, y, width, height,
@ -674,6 +705,41 @@ common_blitter (struct grub_video_fbblit_info *target,
return; return;
} }
} }
else if (source->mode_info->blit_format == GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED)
{
if (target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_BGRA_8888
|| target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_RGBA_8888)
{
grub_video_fbblit_blend_XXXA8888_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
else if (target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_BGR_888
|| target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_RGB_888)
{
grub_video_fbblit_blend_XXX888_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
else if (target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_BGR_565
|| target->mode_info->blit_format
== GRUB_VIDEO_BLIT_FORMAT_RGB_565)
{
grub_video_fbblit_blend_XXX565_1bit (target, source,
x, y, width, height,
offset_x, offset_y);
return;
}
}
/* No optimized blend operation found, use default (slow) blitter. */ /* No optimized blend operation found, use default (slow) blitter. */
grub_video_fbblit_blend (target, source, x, y, width, height, grub_video_fbblit_blend (target, source, x, y, width, height,

View file

@ -286,24 +286,6 @@ grub_vbe_get_video_mode_info (grub_uint32_t mode,
/* Make copy of mode info block. */ /* Make copy of mode info block. */
grub_memcpy (mode_info, mi_tmp, sizeof (*mode_info)); grub_memcpy (mode_info, mi_tmp, sizeof (*mode_info));
/* Packed mode. Query DAC Palette width for color sizes. */
if (mode_info->bits_per_pixel <= 8)
{
int width = 8;
status = 0;
if (controller_info.capabilities & GRUB_VBE_CAPABILITY_DACWIDTH)
status = grub_vbe_bios_set_dac_palette_width (& width);
if (status != GRUB_VBE_STATUS_OK)
/* 6 is default after mode reset. */
width = 6;
mode_info->red_mask_size = mode_info->green_mask_size
= mode_info->blue_mask_size = width;
mode_info->rsvd_mask_size = 0;
}
} }
else else
/* Just clear mode info block if it isn't a VESA mode. */ /* Just clear mode info block if it isn't a VESA mode. */

View file

@ -181,6 +181,8 @@ grub_video_get_blit_format (struct grub_video_mode_info *mode_info)
return GRUB_VIDEO_BLIT_FORMAT_RGB_565; return GRUB_VIDEO_BLIT_FORMAT_RGB_565;
} }
} }
else if (mode_info->bpp == 1)
return GRUB_VIDEO_BLIT_FORMAT_1BIT_PACKED;
/* Backup route. Unknown format. */ /* Backup route. Unknown format. */