Vladimir 'phcoder' Serbinenko
796d2fa20e
Remove uselees instruction
2010-01-11 13:42:45 +01:00
Vladimir 'phcoder' Serbinenko
b56495543a
Fix variable name collision
2010-01-11 13:40:59 +01:00
Vladimir 'phcoder' Serbinenko
d2601bb7bc
decrease scope of code_size
2010-01-11 11:32:41 +01:00
Vladimir 'phcoder' Serbinenko
5c8e58b0cb
merge abstractmbi into newreloc
2010-01-11 11:29:52 +01:00
Vladimir 'phcoder' Serbinenko
7e267737b6
Add align to .S files
2010-01-10 18:59:31 +01:00
Vladimir 'phcoder' Serbinenko
cd0514794a
MAnipulate mbi in abstract way
2010-01-10 18:58:18 +01:00
Vladimir 'phcoder' Serbinenko
14e43c6e02
First working newreloc
2010-01-10 15:06:17 +01:00
Robert Millan
f0d0c0b726
2010-01-10 Robert Millan <rmh.grub@aybabtu.com>
...
* loader/i386/ieee1275/linux.c (grub_linux_boot): Rework video position
initialization with similar approach as with other Linux loaders.
2010-01-10 01:43:42 +00:00
Robert Millan
0e60bae74e
2010-01-10 Robert Millan <rmh.grub@aybabtu.com>
...
Fix i386-ieee1275 build.
* loader/i386/ieee1275/linux.c (grub_linux_boot): Use grub_term_width()
and grub_term_height() for video_{width,height} initialization.
2010-01-10 01:10:39 +00:00
Vladimir 'phcoder' Serbinenko
6b60576149
merge mainline into newreloc
2010-01-10 01:56:47 +01:00
Robert Millan
cdec4d3193
2010-01-09 Robert Millan <rmh.grub@aybabtu.com>
...
Fix grub-emu build.
* conf/any-emu.rmk (grub_emu_SOURCES): Remove `kern/reader.c'.
2010-01-10 00:47:19 +00:00
Vladimir 'phcoder' Serbinenko
95c7fc3f55
First compileable newreloc
2010-01-10 00:30:33 +01:00
Robert Millan
cdb3f378d6
Merge multiterm branch
2010-01-09 22:49:18 +00:00
Robert Millan
822873a7da
Eliminate grub_term_register_{input,output}_active. Default terminals are
...
automatically activated because they're the only terminal that has been loaded.
This solution is temporary. In the future, all terminals should auto-enable,
but this is non-trivial due to resource conflict, and it shouldn't prevent
merge in trunk.
2010-01-09 23:42:17 +01:00
Robert Millan
75cc5b682e
Merge from trunk
2010-01-09 23:22:48 +01:00
Robert Millan
1a064917fe
2010-01-09 Robert Millan <rmh.grub@aybabtu.com>
...
Make loader output a bit more user-friendly.
* util/grub.d/10_hurd.in: Print message indicating that GNU Mach
is being loaded. Likewise for the Hurd.
* util/grub.d/10_kfreebsd.in (kfreebsd_entry): Print message indicating
that kernel of FreeBSD ${version} is being loaded.
* loader/i386/linux.c (grub_cmd_linux): Move debug info to
grub_dprintf().
(grub_cmd_initrd): Likewise.
* util/grub.d/10_linux.in (linux_entry): Print message indicating
that Linux ${version} is being loaded. Likewise for initrd.
2010-01-09 22:02:00 +00:00
carles
5ce0a83a15
2010-01-09 Carles Pina i Estany <carles@pina.cat>
...
* gettext/gettext.c (GRUB_MOD_INIT): Gettextizze.
2010-01-09 20:20:27 +00:00
carles
809bbfebfe
2010-01-08 Carles Pina i Estany <carles@pina.cat>
...
* loader/efi/appleloader.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* loader/efi/chainloader.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/efi/linux.c: Include `<grub/i18n.h>'.
(grub_cmd_linux): Capitalise Linux.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/ieee1275/linux.c: Include `<grub/i18n.h>'.
(grub_cmd_linux): Capitalise Linux.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/linux.c: Include `<grub/i18n.h>'.
(grub_cmd_linux): Capitalise Linux.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/pc/chainloader.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/pc/linux.c: Include `<grub/i18n.h>'.
(grub_cmd_linux): Capitalise Linux.
(GRUB_MOD_INIT): Gettextizze.
* loader/i386/xnu.c: Include `<grub/i18n.h>'.
(grub_cpu_xnu_init): Gettextizze.
* loader/multiboot_loader.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* loader/powerpc/ieee1275/linux.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* loader/sparc64/ieee1275/linux.c: Include `<grub/i18n.h>'.
(grub_linux_load64): Capitalise Linux.
(GRUB_MOD_INIT): Gettextizze.
* loader/xnu.c: Include `<grub/i18n.h>'.
(GRUB_MOD_INIT): Gettextizze.
* po/POTFILES: Add `loader/efi/appleloader.c',
`loader/efi/chainloader.c', `loader/i386/efi/linux.c',
`loader/i386/ieee1275/linux.c', `loader/i386/linux.c',
`loader/i386/pc/chainloader.c', `loader/i386/pc/linux.c',
`loader/i386/xnu.c', `loader/multiboot_loader.c',
`loader/powerpc/ieee1275/linux.c', `loader/sparc64/ieee1275/linux.c'
and `loader/xnu.c'.
2010-01-08 21:35:38 +00:00
Robert Millan
b394b2cab8
2010-01-08 Robert Millan <rmh.grub@aybabtu.com>
...
* src/mkisofs.c: Remove `ifdef linux' portability kludge.
2010-01-08 15:22:40 +00:00
Robert Millan
cd943b7587
2010-01-08 Robert Millan <rmh.mkisofs@aybabtu.com>
...
* util/mkisofs/defaults.h (APPID_DEFAULT): Redefine using PACKAGE_NAME.
(SYSTEM_ID_DEFAULT): Set to "GNU" unconditionally.
* util/mkisofs/mkisofs.c (main): Readjust --version output.
2010-01-08 15:19:42 +00:00
Vladimir 'phcoder' Serbinenko
1dcb8d30a9
ChangeLog
2010-01-07 22:22:24 +01:00
Vladimir 'phcoder' Serbinenko
3b88cbbda5
Warning fixes
2010-01-07 22:22:11 +01:00
Vladimir 'phcoder' Serbinenko
fc054c9cb8
Various cleanups
2010-01-07 22:18:59 +01:00
Robert Millan
bc8b32b3ec
2010-01-07 Robert Millan <rmh.grub@aybabtu.com>
...
Reset Multiboot 2 support. New loader implements the draft in
/branches/multiboot2 and shares as much code as possible with the
production Multiboot 1 implementation.
* loader/ieee1275/multiboot2.c: Remove file. Update all users.
* loader/multiboot2.c: Likewise.
* loader/i386/multiboot_helper.S: Likewise.
* include/multiboot2.h: Replace with latest version from the draft
in /branches/multiboot2.
* conf/i386-coreboot.rmk (multiboot_mod_SOURCES): Remove
`loader/i386/multiboot_helper.S', `loader/i386/pc/multiboot2.c'
and `loader/multiboot2.c'.
(pkglib_MODULES): Add `multiboot2.mod'.
(multiboot2_mod_SOURCES): New variable.
(multiboot2_mod_LDFLAGS): Likewise.
(multiboot2_mod_CFLAGS): Likewise. Define `GRUB_USE_MULTIBOOT2'.
* conf/i386-pc.rmk: Likewise.
* conf/powerpc-ieee1275.rmk (pkglib_MODULES): Remove `multiboot.mod'.
(multiboot_mod_SOURCES): Remove variable.
(multiboot_mod_LDFLAGS): Likewise.
(multiboot_mod_CFLAGS): Likewise.
* include/grub/multiboot.h [GRUB_USE_MULTIBOOT2]: Include
`<multiboot2.h>' instead of `<multiboot.h>'.
[GRUB_USE_MULTIBOOT2] (MULTIBOOT_BOOTLOADER_MAGIC)
(MULTIBOOT_HEADER_MAGIC): New macros.
* loader/multiboot_loader.c (module_version_status): Remove variable.
(find_multi_boot2_header): Remove function.
(grub_cmd_multiboot_loader): Remove Multiboot 2 / Multiboot 1 selection
logic. Always check for the Multiboot version we're compiling for.
(grub_cmd_module_loader): Likewise.
[GRUB_USE_MULTIBOOT2] (GRUB_MOD_INIT(multiboot)): Register `multiboot2'
command instead of `multiboot'.
2010-01-07 21:05:25 +00:00
Vladimir 'phcoder' Serbinenko
44fcb2bc59
merge mainline into multiterm
2010-01-07 21:34:43 +01:00
Robert Millan
5d2c52b8ca
2010-01-07 Robert Millan <rmh.grub@aybabtu.com>
...
* include/multiboot.h (MULTIBOOT_UNSUPPORTED): Moved from here ...
* loader/i386/multiboot.c (UNSUPPORTED_FLAGS): ... to here. Update
all users.
2010-01-07 19:55:16 +00:00
Robert Millan
53108d92ba
2010-01-07 Robert Millan <rmh.grub@aybabtu.com>
...
2010-01-07 Vladimir Serbinenko <phcoder@gmail.com>
Fix breakage introduced with previous commit.
* normal/dyncmd.c (read_command_list): Avoid unregistering kernel
commands.
* normal/handler.c (read_handler_list): Revert part of previous commit
affecting this file.
* normal/main.c (read_lists): Move read_handler_list() call back to ...
(grub_normal_execute): ... here.
2010-01-07 16:53:29 +00:00
Robert Millan
5a1ed29ebd
Simplify terminal check in loader/i386/efi/linux.c and loader/i386/linux.c
...
Revert loader/i386/ieee1275/linux.c change
2010-01-07 01:21:32 +00:00
Robert Millan
c1d2f1d81b
Merge from trunk
2010-01-07 00:58:54 +00:00
Robert Millan
e2e936b2f2
2010-01-07 Robert Millan <rmh.grub@aybabtu.com>
...
Merge prefix-redefinition-fix branch.
* normal/autofs.c (read_fs_list): Make function capable of being
run multiple times, gracefuly replacing the previous data
structures.
* normal/dyncmd.c (read_command_list): Likewise.
* normal/handler.c (read_handler_list): Likewise.
* normal/main.c (read_lists): New function. Calls all the
list reading functions.
(grub_normal_execute): Use read_lists() instead of calling all
list reading functions explicitly. Register read_lists() as a
variable hook attached to ${prefix}.
2010-01-07 00:52:56 +00:00
Vladimir 'phcoder' Serbinenko
607a3701db
2010-01-07 Vladimir Serbinenko <phcoder@gmail.com>
...
Merge crypto branch.
* Makefile.in (pkglib_DATA): Add crypto.lst.
(crypto.lst): New target.
* commands/hashsum.c: New file.
* commands/password.c (check_password): Use grub_crypto_memcmp.
* commands/password_pbkdf2.c: New file.
* commands/xnu_uuid.c: Remove MD5. Use GRUB_MD_MD5.
* conf/any-emu.rmk (grub_emu_SOURCES): Add lib/crypto.c,
normal/crypto.c and lib/libgcrypt-grub/cipher/md5.c.
(grub_emu_CFLAGS): Add -Wno-missing-field-initializers -Wno-error
-I$(srcdir)/lib/libgcrypt_wrap.
* conf/common.rmk (normal_mod_SOURCES): Add normal/crypto.c.
(pkglib_MODULES): Add crypto.mod, hashsum.mod, pbkdf2.mod and
password_pbkdf2.mod.
(crypto_mod_SOURCES): New variable.
(crypto_mod_CFLAGS): Likewise.
(crypto_mod_LDFLAGS): Likewise.
(hashsum_mod_SOURCES): New variable.
(hashsum_mod_CFLAGS): Likewise.
(hashsum_mod_LDFLAGS): Likewise.
(pbkdf2_mod_SOURCES): New variable.
(pbkdf2_mod_CFLAGS): Likewise.
(pbkdf2_mod_LDFLAGS): Likewise.
(password_pbkdf2_mod_SOURCES): New variable.
(password_pbkdf2_mod_CFLAGS): Likewise.
(password_pbkdf2_mod_LDFLAGS): Likewise.
(bin_UTILITIES): Add grub-mkpasswd-pbkdf2.
(grub_mkpasswd_pbkdf2_SOURCES): New variable.
(grub_mkpasswd_pbkdf2_CFLAGS): Likewise.
Include conf/gcry.rmk.
* include/grub/auth.h: Rewritten.
* include/grub/crypto.h: New file.
* include/grub/disk.h (grub_disk_dev_id): Add GRUB_DISK_DEVICE_LUKS_ID.
* include/grub/normal.h (read_crypto_list): New prototype.
* lib/crypto.c: New file.
* lib/libgcrypt_wrap/cipher_wrap.h: Likewise.
* lib/pbkdf2.c: Likewise.
* normal/auth.c (grub_auth_strcmp): Removed.
(grub_iswordseparator): Likewise.
(grub_auth_strword): Likewise.
(is_authenticated): Use grub_strword.
(grub_auth_check_authentication): Use grub_strcmp, grub_password_get
and grub_strword. Pass entered password to authentication callback.
* normal/crypto.c: New file.
* normal/main.c: Call read_crypto_list.
* util/grub-mkpasswd-pbkdf2.c: New file.
* util/import_gcry.py: Generate crypto.lst. Add hash blocklen.
2010-01-07 01:13:01 +01:00
Vladimir 'phcoder' Serbinenko
42841caa75
2010-01-06 Vladimir Serbinenko <phcoder@gmail.com>
...
Fix descent and ascent calculation.
* util/grub-mkfont.c (grub_font_info): New fields 'asce' and 'max_y'.
(options): New option "asce".
(usage): Likewise.
(add_char): Ignore invalid glyphs for descent calculation.
Calculate ascent from actual content.
(print_glyphs): Use 'asce'.
(write_font): Likewise. Allow ascent override.
(main): Handle "asce" option.
2010-01-06 23:25:57 +01:00
carles
e7730de786
2010-01-06 Carles Pina i Estany <carles@pina.cat>
...
* kern/err.c: Include `<grub/i18n.h>'.
(grub_print_error): Add full stop. Gettextizze.
* loader/i386/bsd.c (grub_netbsd_boot): Change grub_error description.
(grub_bsd_load_elf): Capitalise ELF.
(grub_cmd_freebsd_loadenv): Add `s' in error string.
(grub_cmd_freebsd_module): Likewise.
(grub_cmd_freebsd_module_elf): Likewise.
* loader/i386/bsdXX.c (SUFFIX): Capitalise ELF.
2010-01-06 22:00:57 +00:00
carles
40e3a41f85
2010-01-06 Carles Pina i Estany <carles@pina.cat>
...
* commands/search.c (GRUB_MOD_INIT): Use HELP_MESSAGE.
* commands/search_file.c (HELP_MESSAGE): New macro.
* commands/search_label.c (HELP_MESSAGE): Likewise.
* commands/search_uuid.c (HELP_MESSAGE): Likewise.
* po/POTFILES: Add `commands/search_file.c',
`commands/search_label.c', `commands_uuid.c'. Remove duplicate
`commands/search.c'.
2010-01-06 21:36:34 +00:00
Robert Millan
83507e68bd
2010-01-05 Robert Millan <rmh.grub@aybabtu.com>
...
* config.rpath: Update from Gnulib.
2010-01-05 22:44:00 +00:00
Yves Blusseau
465c787b50
2010-01-05 Yves Blusseau <blusseau@zetam.org>
...
* commands/acpi.c (grub_acpi_create_ebda): fix incorrect message.
2010-01-05 22:04:15 +01:00
Yves Blusseau
6581dd3a58
2010-01-05 Yves Blusseau <yves.blusseau@zetam.org>
...
* util/sparc64/ieee1275/grub-mkimage.c (main): Typo fix.
2010-01-05 18:24:10 +01:00
Colin Watson
3bff18c5c6
2010-01-05 Colin Watson <cjwatson@ubuntu.com>
...
* util/mkisofs/write.c (padblock_write): Switch size and nmemb
arguments to fread so that we get a return value in bytes, rather
than something that will normally be rounded down to 0.
Adjust error handling to avoid producing garbage when size_t is not
the same size as long long.
2010-01-05 16:09:02 +00:00
Vladimir 'phcoder' Serbinenko
519634516f
Merge mainline into multiterm
2010-01-05 16:27:41 +01:00
Colin Watson
a136811886
2010-01-05 Colin Watson <cjwatson@ubuntu.com>
...
* util/mkisofs/write.c (padblock_write): Check return value of
fread.
2010-01-05 12:40:30 +00:00
Robert Millan
7c30297857
2010-01-05 Robert Millan <rmh.grub@aybabtu.com>
...
Remove grub-mkfloppy. Images produced by grub-mkrescue are valid
floppy images now.
* util/i386/pc/grub-mkfloppy.in: Remove. Update all users.
2010-01-05 00:31:07 +00:00
Robert Millan
e33ace066e
2010-01-04 Robert Millan <rmh.grub@aybabtu.com>
...
* disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Use ALIGN_UP macro
instead of manual alignment.
* kern/disk.c (grub_disk_read): Remove grub_dprintf call (excessively
verbose). Avoid attempts to read past end of the device
(grub_disk_adjust_range() guarantees that we can read `size' bytes,
but GRUB_DISK_CACHE_SIZE may exceed that).
2010-01-04 23:30:27 +00:00
Robert Millan
4b856776a9
forgot to commit ChangeLog...
2010-01-04 22:49:59 +00:00
Robert Millan
732c47f005
2010-01-04 Robert Millan <rmh.grub@aybabtu.com>
...
* commands/crc.c (grub_cmd_crc): Abort on read errors.
* fs/iso9660.c (grub_iso9660_read): Check for read error and pass
it to upper layer.
2010-01-04 22:47:30 +00:00
Vladimir 'phcoder' Serbinenko
52c2d97f26
2010-01-04 Vladimir Serbinenko <phcoder@gmail.com>
...
* include/grub/efi/api.h (GRUB_EFI_PIWG_DEVICE_PATH_SUBTYPE):
New constant.
(grub_efi_piwg_device_path): New structure
(grub_efi_piwg_device_path_t): New type.
* loader/efi/appleloader.c (piwg_full_device_path): New structure.
(devpath_1): Transform to a structure. All users updated.
(devpath_2): Likewise.
(devpath_3): Likewise.
(devpath_4): Likewise.
(devpath_5): Likewise.
2010-01-04 14:59:06 +01:00
Vladimir 'phcoder' Serbinenko
98ff6a54de
2010-01-04 Vladimir Serbinenko <phcoder@gmail.com>
...
* loader/efi/appleloader.c: Restored. Update all users.
2010-01-04 14:53:15 +01:00
Robert Millan
3a73dcb6f5
2010-01-03 Robert Millan <rmh.grub@aybabtu.com>
...
* boot/i386/pc/diskboot.S: Fix inaccurate comment.
* util/i386/pc/grub-setup.c: Include `<assert.h>'.
(struct boot_blocklist): Move from here ...
* include/grub/i386/pc/boot.h [ASM_FILE]
(struct grub_boot_blocklist): ... to here. Update all users.
(setup): Only initialize `start' member of `first_block'
structure. Add assert() calls to verify the other members.
* util/i386/pc/grub-mkimage.c: Include `<assert.h>'.
(generate_image): Fix broken blocklist length initialization.
Add assert() call to verify blocklist `segment' field.
2010-01-03 22:34:03 +00:00
Robert Millan
ab0eeb0c33
2010-01-03 Robert Millan <rmh.grub@aybabtu.com>
...
* loader/efi/appleloader.c: Remove. Update all users.
2010-01-03 22:15:44 +00:00
Robert Millan
58bc8bd5b1
2010-01-03 Robert Millan <rmh.grub@aybabtu.com>
...
* boot/i386/pc/boot.S: Update copyright year.
* boot/i386/pc/cdboot.S: Likewise.
* boot/i386/pc/diskboot.S: Likewise.
* boot/i386/pc/lnxboot.S: Likewise.
* boot/i386/pc/pxeboot.S: Likewise.
* bus/pci.c: Likewise.
* commands/cmp.c: Likewise.
* commands/help.c: Likewise.
* commands/hexdump.c: Likewise.
* commands/i386/pc/halt.c: Likewise.
* commands/i386/pc/play.c: Likewise.
* commands/i386/pc/vbeinfo.c: Likewise.
* commands/ls.c: Likewise.
* commands/test.c: Likewise.
* disk/dmraid_nvidia.c: Likewise.
* disk/i386/pc/biosdisk.c: Likewise.
* disk/ieee1275/nand.c: Likewise.
* disk/ieee1275/ofdisk.c: Likewise.
* disk/lvm.c: Likewise.
* disk/raid.c: Likewise.
* disk/raid6_recover.c: Likewise.
* disk/scsi.c: Likewise.
* fs/affs.c: Likewise.
* fs/cpio.c: Likewise.
* fs/ext2.c: Likewise.
* fs/hfs.c: Likewise.
* fs/iso9660.c: Likewise.
* fs/ntfs.c: Likewise.
* fs/sfs.c: Likewise.
* fs/udf.c: Likewise.
* fs/ufs.c: Likewise.
* fs/xfs.c: Likewise.
* gencmdlist.sh: Likewise.
* genmk.rb: Likewise.
* include/grub/disk.h: Likewise.
* include/grub/efi/api.h: Likewise.
* include/grub/efi/efi.h: Likewise.
* include/grub/efi/pe32.h: Likewise.
* include/grub/elf.h: Likewise.
* include/grub/fs.h: Likewise.
* include/grub/i386/at_keyboard.h: Likewise.
* include/grub/i386/pc/memory.h: Likewise.
* include/grub/i386/pc/vbe.h: Likewise.
* include/grub/i386/pci.h: Likewise.
* include/grub/i386/tsc.h: Likewise.
* include/grub/ieee1275/ieee1275.h: Likewise.
* include/grub/ntfs.h: Likewise.
* include/grub/sparc64/ieee1275/ieee1275.h: Likewise.
* include/grub/sparc64/libgcc.h: Likewise.
* include/grub/symbol.h: Likewise.
* include/grub/types.h: Likewise.
* include/multiboot2.h: Likewise.
* io/gzio.c: Likewise.
* kern/device.c: Likewise.
* kern/disk.c: Likewise.
* kern/efi/efi.c: Likewise.
* kern/efi/mm.c: Likewise.
* kern/elf.c: Likewise.
* kern/file.c: Likewise.
* kern/i386/dl.c: Likewise.
* kern/i386/pc/init.c: Likewise.
* kern/i386/pc/startup.S: Likewise.
* kern/ieee1275/ieee1275.c: Likewise.
* kern/ieee1275/init.c: Likewise.
* kern/main.c: Likewise.
* kern/mm.c: Likewise.
* kern/powerpc/dl.c: Likewise.
* kern/sparc64/dl.c: Likewise.
* kern/x86_64/dl.c: Likewise.
* lib/hexdump.c: Likewise.
* loader/efi/appleloader.c: Likewise.
* loader/i386/ieee1275/linux.c: Likewise.
* loader/i386/pc/chainloader.c: Likewise.
* loader/i386/pc/linux.c: Likewise.
* loader/i386/pc/multiboot2.c: Likewise.
* loader/ieee1275/multiboot2.c: Likewise.
* loader/multiboot2.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* loader/powerpc/ieee1275/linux.c: Likewise.
* normal/completion.c: Likewise.
* normal/menu_entry.c: Likewise.
* partmap/apple.c: Likewise.
* util/grub.d/10_hurd.in: Likewise.
* util/hostfs.c: Likewise.
* video/readers/png.c: Likewise.
2010-01-03 22:05:07 +00:00
Colin Watson
e2d70b5cea
2010-01-03 Colin Watson <cjwatson@ubuntu.com>
...
* include/grub/misc.h (GNUC_PREREQ): New macro.
(ATTRIBUTE_ERROR): New macro.
* include/grub/list.h (grub_bad_type_cast_real): Use
ATTRIBUTE_ERROR.
2010-01-03 21:50:53 +00:00