diff --git a/commands/handler.c b/commands/handler.c
deleted file mode 100644
index 2bfa67415..000000000
--- a/commands/handler.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* handler.c - commands to list or select handlers */
-/*
- * 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 .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-static grub_err_t
-grub_cmd_handler (struct grub_command *cmd __attribute__ ((unused)),
- int argc, char **args)
-{
- void *curr_item = 0;
- grub_handler_class_t head;
-
- head = grub_handler_class_list;
- if (argc == 0)
- {
- grub_handler_class_t item;
- FOR_LIST_ELEMENTS(item, head)
- {
- if (item == curr_item)
- grub_putchar ('*');
-
- grub_printf ("%s\n", item->name);
- }
- }
- else
- {
- char *class_name;
- grub_handler_class_t class;
-
- class_name = args[0];
- argc--;
- args++;
-
- class = grub_named_list_find (GRUB_AS_NAMED_LIST (head), class_name);
- if (! class)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "class not found");
-
- if (argc == 0)
- {
- grub_handler_class_t item;
- curr_item = class->cur_handler;
- FOR_LIST_ELEMENTS(item, head)
- {
- if (item == curr_item)
- grub_putchar ('*');
-
- grub_printf ("%s\n", item->name);
- }
- }
- else
- {
- grub_handler_t handler;
-
- handler =
- grub_named_list_find (GRUB_AS_NAMED_LIST (class->handler_list),
- args[0]);
-
- if (! handler)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "handler not found");
-
- grub_handler_set_current (class, handler);
- }
- }
-
- return 0;
-}
-
-static grub_command_t cmd_handler;
-
-GRUB_MOD_INIT(handler)
-{
- cmd_handler =
- grub_register_command ("handler", grub_cmd_handler,
- N_("[class [handler]]"),
- N_("List or select a handler."));
-}
-
-GRUB_MOD_FINI(handler)
-{
- grub_unregister_command (cmd_handler);
-}
diff --git a/conf/any-emu.rmk b/conf/any-emu.rmk
index 758a8d720..3a2c47bf5 100644
--- a/conf/any-emu.rmk
+++ b/conf/any-emu.rmk
@@ -7,7 +7,7 @@ util/grub-emu.c_DEPENDENCIES = grub_emu_init.h
kernel_img_RELOCATABLE = yes
pkglib_PROGRAMS = kernel.img
kernel_img_SOURCES = kern/device.c kern/disk.c kern/dl.c kern/env.c \
- kern/err.c kern/list.c kern/handler.c kern/command.c \
+ kern/err.c kern/list.c kern/command.c \
kern/corecmd.c kern/file.c kern/fs.c kern/main.c kern/misc.c \
kern/parser.c kern/partition.c kern/term.c \
kern/rescue_reader.c kern/rescue_parser.c \
diff --git a/conf/common.rmk b/conf/common.rmk
index f55bbfe0c..6300af3aa 100644
--- a/conf/common.rmk
+++ b/conf/common.rmk
@@ -27,7 +27,7 @@ util/grub-probe.c_DEPENDENCIES = grub_probe_init.h
grub_probe_SOURCES = gnulib/progname.c util/grub-probe.c \
util/hostdisk.c util/misc.c util/getroot.c \
kern/device.c kern/disk.c kern/err.c kern/misc.c \
- kern/parser.c kern/partition.c kern/file.c kern/list.c \
+ kern/partition.c kern/file.c kern/list.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 \
@@ -104,12 +104,11 @@ DISTCLEANFILES += grub_script.yy.c grub_script.yy.h
# For grub-script-check.
bin_UTILITIES += grub-script-check
-util/grub-script-check.c_DEPENDENCIES = grub_script_check_init.h
grub_script_check_SOURCES = gnulib/progname.c gnulib/getdelim.c gnulib/getline.c \
util/grub-script-check.c util/misc.c \
script/main.c script/script.c script/function.c script/lexer.c \
- kern/handler.c kern/err.c kern/parser.c kern/list.c \
- kern/misc.c kern/env.c grub_script_check_init.c grub_script.tab.c \
+ kern/err.c kern/list.c \
+ kern/misc.c kern/env.c grub_script.tab.c \
grub_script.yy.c
MOSTLYCLEANFILES += symlist.c kernel_syms.lst
@@ -119,7 +118,7 @@ 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 \
partition.h msdos_partition.h reader.h symbol.h term.h time.h types.h \
machine/memory.h machine/loader.h machine/kernel.h \
- list.h handler.h command.h i18n.h env_private.h
+ list.h command.h i18n.h env_private.h
symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh
/bin/sh gensymlist.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1)
@@ -132,19 +131,6 @@ grub_script.tab.c grub_script.tab.h: script/parser.y
$(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
-# For grub-script-check.
-grub_script_check_init.lst: geninit.sh $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES))
- rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
-DISTCLEANFILES += grub_script_check_init.lst
-
-grub_script_check_init.h: grub_script_check_init.lst $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES)) geninitheader.sh
- rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
-DISTCLEANFILES += grub_script_check_init.h
-
-grub_script_check_init.c: grub_script_check_init.lst $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES)) geninit.sh
- rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
-DISTCLEANFILES += grub_script_check_init.c
-
# For grub-probe.
grub_probe_init.lst: geninit.sh $(filter-out grub_probe_init.c,$(grub_probe_SOURCES))
rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
@@ -455,12 +441,12 @@ scsi_mod_CFLAGS = $(COMMON_CFLAGS)
scsi_mod_LDFLAGS = $(COMMON_LDFLAGS)
# Commands.
-pkglib_MODULES += minicmd.mod extcmd.mod hello.mod handler.mod \
+pkglib_MODULES += minicmd.mod extcmd.mod hello.mod \
ls.mod cmp.mod cat.mod help.mod search.mod loopback.mod \
configfile.mod echo.mod \
terminfo.mod test.mod blocklist.mod hexdump.mod \
read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
- msdospart.mod memrw.mod normal.mod sh.mod \
+ msdospart.mod memrw.mod normal.mod \
gptsync.mod true.mod probe.mod password.mod \
keystatus.mod
@@ -521,11 +507,6 @@ msdospart_mod_SOURCES = parttool/msdospart.c
msdospart_mod_CFLAGS = $(COMMON_CFLAGS)
msdospart_mod_LDFLAGS = $(COMMON_LDFLAGS)
-# For handler.mod.
-handler_mod_SOURCES = commands/handler.c
-handler_mod_CFLAGS = $(COMMON_CFLAGS)
-handler_mod_LDFLAGS = $(COMMON_LDFLAGS)
-
# For ls.mod.
ls_mod_SOURCES = commands/ls.c
ls_mod_CFLAGS = $(COMMON_CFLAGS)
@@ -645,19 +626,15 @@ keystatus_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For normal.mod.
normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \
- normal/auth.c normal/autofs.c normal/handler.c \
+ normal/auth.c normal/autofs.c \
normal/color.c normal/completion.c normal/datetime.c normal/menu.c \
normal/menu_entry.c normal/menu_text.c \
- normal/misc.c normal/crypto.c normal/term.c normal/context.c
+ normal/misc.c normal/crypto.c normal/term.c normal/context.c \
+ script/main.c script/script.c script/execute.c \
+ script/function.c script/lexer.c grub_script.tab.c grub_script.yy.c
normal_mod_CFLAGS = $(COMMON_CFLAGS)
normal_mod_LDFLAGS = $(COMMON_LDFLAGS)
-# For sh.mod.
-sh_mod_SOURCES = script/main.c script/script.c script/execute.c \
- script/function.c script/lexer.c grub_script.tab.c grub_script.yy.c
-sh_mod_CFLAGS = $(COMMON_CFLAGS)
-sh_mod_LDFLAGS = $(COMMON_LDFLAGS)
-
ifneq (, $(FONT_SOURCE))
font/font.c_DEPENDENCIES = ascii.h
endif
diff --git a/conf/i386-coreboot.rmk b/conf/i386-coreboot.rmk
index 3cef9313f..0979f03ee 100644
--- a/conf/i386-coreboot.rmk
+++ b/conf/i386-coreboot.rmk
@@ -16,7 +16,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/time.c kern/list.c kern/command.c kern/corecmd.c \
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
kern/i386/tsc.c kern/i386/pit.c \
kern/generic/rtc_get_time_ms.c \
diff --git a/conf/i386-ieee1275.rmk b/conf/i386-ieee1275.rmk
index d4a459b3e..f8921df9b 100644
--- a/conf/i386-ieee1275.rmk
+++ b/conf/i386-ieee1275.rmk
@@ -18,7 +18,7 @@ kernel_img_SOURCES = kern/i386/ieee1275/startup.S \
kern/rescue_parser.c kern/rescue_reader.c \
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
kern/env.c \
- kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/time.c kern/list.c kern/command.c kern/corecmd.c \
kern/generic/millisleep.c \
kern/ieee1275/ieee1275.c \
term/ieee1275/ofconsole.c \
diff --git a/conf/i386-pc.rmk b/conf/i386-pc.rmk
index ece88446b..7b624837b 100644
--- a/conf/i386-pc.rmk
+++ b/conf/i386-pc.rmk
@@ -45,7 +45,7 @@ kernel_img_SOURCES = kern/i386/pc/startup.S \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/time.c kern/list.c kern/command.c kern/corecmd.c \
kern/$(target_cpu)/dl.c kern/i386/pc/init.c kern/i386/pc/mmap.c \
kern/parser.c kern/partition.c \
kern/i386/tsc.c kern/i386/pit.c \
@@ -76,7 +76,7 @@ util/i386/pc/grub-setup.c_DEPENDENCIES = grub_setup_init.h
grub_setup_SOURCES = gnulib/progname.c \
util/i386/pc/grub-setup.c util/hostdisk.c \
util/misc.c util/getroot.c kern/device.c kern/disk.c \
- kern/err.c kern/misc.c kern/parser.c kern/partition.c \
+ kern/err.c kern/misc.c kern/partition.c \
kern/file.c kern/fs.c kern/env.c kern/list.c \
fs/fshelp.c \
\
diff --git a/conf/i386-qemu.rmk b/conf/i386-qemu.rmk
index 97273e1ce..cbe6d0455 100644
--- a/conf/i386-qemu.rmk
+++ b/conf/i386-qemu.rmk
@@ -29,7 +29,7 @@ kernel_img_SOURCES = kern/i386/qemu/startup.S \
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/time.c kern/list.c kern/command.c kern/corecmd.c \
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
kern/i386/tsc.c kern/i386/pit.c \
kern/generic/rtc_get_time_ms.c \
diff --git a/conf/mips-qemu-mips.rmk b/conf/mips-qemu-mips.rmk
index e06370122..7cddf72ad 100644
--- a/conf/mips-qemu-mips.rmk
+++ b/conf/mips-qemu-mips.rmk
@@ -12,7 +12,7 @@ kernel_img_SOURCES = kern/$(target_cpu)/startup.S \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/list.c kern/command.c kern/corecmd.c \
kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \
kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c kern/time.c \
symlist.c kern/$(target_cpu)/cache.S
diff --git a/conf/mips-yeeloong.rmk b/conf/mips-yeeloong.rmk
index 35cd01b4b..bf39bf668 100644
--- a/conf/mips-yeeloong.rmk
+++ b/conf/mips-yeeloong.rmk
@@ -15,7 +15,7 @@ kernel_img_SOURCES = kern/$(target_cpu)/startup.S \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/list.c kern/command.c kern/corecmd.c \
kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \
kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c kern/time.c \
kern/$(target_cpu)/cache.S \
diff --git a/conf/powerpc-ieee1275.rmk b/conf/powerpc-ieee1275.rmk
index 86f6ddcb3..7b32b24f1 100644
--- a/conf/powerpc-ieee1275.rmk
+++ b/conf/powerpc-ieee1275.rmk
@@ -13,7 +13,7 @@ kernel_img_SOURCES = kern/powerpc/ieee1275/startup.S kern/ieee1275/cmain.c \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/list.c kern/command.c kern/corecmd.c \
kern/ieee1275/init.c \
kern/ieee1275/mmap.c \
term/ieee1275/ofconsole.c \
diff --git a/conf/sparc64-ieee1275.rmk b/conf/sparc64-ieee1275.rmk
index 78e511e31..b4079dd1f 100644
--- a/conf/sparc64-ieee1275.rmk
+++ b/conf/sparc64-ieee1275.rmk
@@ -25,7 +25,7 @@ kernel_img_SOURCES = kern/sparc64/ieee1275/crt0.S kern/ieee1275/cmain.c \
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
kern/misc.c kern/mm.c kern/term.c \
kern/rescue_parser.c kern/rescue_reader.c \
- kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/list.c kern/command.c kern/corecmd.c \
kern/sparc64/ieee1275/ieee1275.c \
kern/sparc64/ieee1275/init.c \
kern/ieee1275/mmap.c \
diff --git a/conf/x86-efi.rmk b/conf/x86-efi.rmk
index 5cb472168..bab68f0f4 100644
--- a/conf/x86-efi.rmk
+++ b/conf/x86-efi.rmk
@@ -30,7 +30,7 @@ kernel_img_SOURCES = kern/$(target_cpu)/efi/startup.S kern/main.c kern/device.c
kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
term/efi/console.c disk/efi/efidisk.c \
- kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
+ kern/time.c kern/list.c kern/command.c kern/corecmd.c \
kern/i386/tsc.c kern/i386/pit.c \
kern/generic/rtc_get_time_ms.c \
kern/generic/millisleep.c
diff --git a/include/grub/handler.h b/include/grub/handler.h
deleted file mode 100644
index 77dd7d9c1..000000000
--- a/include/grub/handler.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* handler.h - header for grub handler */
-/*
- * 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 .
- */
-
-#ifndef GRUB_HANDLER_HEADER
-#define GRUB_HANDLER_HEADER 1
-
-#include
-#include
-
-struct grub_handler
-{
- struct grub_handler *next;
- const char *name;
- grub_err_t (*init) (void);
- grub_err_t (*fini) (void);
-};
-typedef struct grub_handler *grub_handler_t;
-
-struct grub_handler_class
-{
- struct grub_handler_class *next;
- const char *name;
- grub_handler_t handler_list;
- grub_handler_t cur_handler;
-};
-typedef struct grub_handler_class *grub_handler_class_t;
-
-extern grub_handler_class_t EXPORT_VAR(grub_handler_class_list);
-
-void EXPORT_FUNC(grub_handler_register) (grub_handler_class_t class,
- grub_handler_t handler);
-void EXPORT_FUNC(grub_handler_unregister) (grub_handler_class_t class,
- grub_handler_t handler);
-grub_err_t EXPORT_FUNC(grub_handler_set_current) (grub_handler_class_t class,
- grub_handler_t handler);
-
-#define GRUB_AS_HANDLER(ptr) \
- ((GRUB_FIELD_MATCH (ptr, grub_handler_t, next) && \
- GRUB_FIELD_MATCH (ptr, grub_handler_t, name) && \
- GRUB_FIELD_MATCH (ptr, grub_handler_t, init) && \
- GRUB_FIELD_MATCH (ptr, grub_handler_t, fini)) ? \
- (grub_handler_t) ptr : grub_bad_type_cast ())
-
-#endif /* ! GRUB_HANDLER_HEADER */
diff --git a/include/grub/parser.h b/include/grub/parser.h
index 17f0c4303..064f73fcb 100644
--- a/include/grub/parser.h
+++ b/include/grub/parser.h
@@ -22,7 +22,6 @@
#include
#include
-#include
#include
/* All the states for the command line. */
@@ -84,36 +83,9 @@ struct grub_parser
};
typedef struct grub_parser *grub_parser_t;
-extern struct grub_handler_class EXPORT_VAR(grub_parser_class);
grub_err_t EXPORT_FUNC(grub_parser_execute) (char *source);
-static inline void
-grub_parser_register (const char *name __attribute__ ((unused)),
- /* `name' is ignored here, but used by genhandlerlist.sh. */
- grub_parser_t parser)
-{
- grub_handler_register (&grub_parser_class, GRUB_AS_HANDLER (parser));
-}
-
-static inline void
-grub_parser_unregister (grub_parser_t parser)
-{
- grub_handler_unregister (&grub_parser_class, GRUB_AS_HANDLER (parser));
-}
-
-static inline grub_parser_t
-grub_parser_get_current (void)
-{
- return (grub_parser_t) grub_parser_class.cur_handler;
-}
-
-static inline grub_err_t
-grub_parser_set_current (grub_parser_t parser)
-{
- return grub_handler_set_current (&grub_parser_class,
- GRUB_AS_HANDLER (parser));
-}
-
-void grub_register_rescue_parser (void);
+grub_err_t
+grub_rescue_parse_line (char *line, grub_reader_getline_t getline);
#endif /* ! GRUB_PARSER_HEADER */
diff --git a/include/grub/script_sh.h b/include/grub/script_sh.h
index 33c6d2b85..5e85d983e 100644
--- a/include/grub/script_sh.h
+++ b/include/grub/script_sh.h
@@ -324,4 +324,7 @@ int grub_script_function_call (grub_script_function_t func,
char **
grub_script_execute_arglist_to_argv (struct grub_script_arglist *arglist, int *count);
+grub_err_t
+grub_normal_parse_line (char *line, grub_reader_getline_t getline);
+
#endif /* ! GRUB_NORMAL_PARSER_HEADER */
diff --git a/include/grub/term.h b/include/grub/term.h
index 230436388..4a05909da 100644
--- a/include/grub/term.h
+++ b/include/grub/term.h
@@ -38,7 +38,7 @@
#include
#include
#include
-#include
+#include
/* These are used to represent the various color states we use. */
typedef enum
diff --git a/kern/handler.c b/kern/handler.c
deleted file mode 100644
index 2bf85313c..000000000
--- a/kern/handler.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* handler.c - grub handler function */
-/*
- * 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 .
- */
-
-#include
-
-grub_handler_class_t grub_handler_class_list;
-
-void
-grub_handler_register (grub_handler_class_t class, grub_handler_t handler)
-{
- int first_handler = (class->handler_list == 0);
-
- grub_list_push (GRUB_AS_LIST_P (&class->handler_list),
- GRUB_AS_LIST (handler));
-
- if (first_handler)
- {
- grub_list_push (GRUB_AS_LIST_P (&grub_handler_class_list),
- GRUB_AS_LIST (class));
- grub_handler_set_current (class, handler);
- }
-}
-
-void
-grub_handler_unregister (grub_handler_class_t class, grub_handler_t handler)
-{
- grub_list_remove (GRUB_AS_LIST_P (&class->handler_list),
- GRUB_AS_LIST (handler));
-
- if (class->handler_list == 0)
- grub_list_remove (GRUB_AS_LIST_P (&grub_handler_class_list),
- GRUB_AS_LIST (class));
-}
-
-grub_err_t
-grub_handler_set_current (grub_handler_class_t class, grub_handler_t handler)
-{
- if (class->cur_handler && class->cur_handler->fini)
- if ((class->cur_handler->fini) () != GRUB_ERR_NONE)
- return grub_errno;
-
- if (handler->init)
- if ((handler->init) () != GRUB_ERR_NONE)
- return grub_errno;
-
- class->cur_handler = handler;
- return GRUB_ERR_NONE;
-}
diff --git a/kern/main.c b/kern/main.c
index 2f2c951ab..e644ea5b1 100644
--- a/kern/main.c
+++ b/kern/main.c
@@ -191,7 +191,6 @@ grub_main (void)
grub_set_root_dev ();
grub_register_core_commands ();
- grub_register_rescue_parser ();
grub_load_config ();
grub_load_normal_mode ();
diff --git a/kern/parser.c b/kern/parser.c
index 80312b9b4..06e4ed673 100644
--- a/kern/parser.c
+++ b/kern/parser.c
@@ -230,10 +230,6 @@ grub_parser_split_cmdline (const char *cmdline, grub_reader_getline_t getline,
return 0;
}
-struct grub_handler_class grub_parser_class = {
- .name = "parser"
-};
-
grub_err_t
grub_parser_execute (char *source)
{
@@ -262,11 +258,9 @@ grub_parser_execute (char *source)
while (source)
{
char *line;
- grub_parser_t parser;
getline (&line, 0);
- parser = grub_parser_get_current ();
- parser->parse_line (line, getline);
+ grub_rescue_parse_line (line, getline);
grub_free (line);
}
diff --git a/kern/rescue_parser.c b/kern/rescue_parser.c
index d3725e739..9c85ba6bd 100644
--- a/kern/rescue_parser.c
+++ b/kern/rescue_parser.c
@@ -24,7 +24,7 @@
#include
#include
-static grub_err_t
+grub_err_t
grub_rescue_parse_line (char *line, grub_reader_getline_t getline)
{
char *name;
@@ -74,15 +74,3 @@ grub_rescue_parse_line (char *line, grub_reader_getline_t getline)
return grub_errno;
}
-
-static struct grub_parser grub_rescue_parser =
- {
- .name = "rescue",
- .parse_line = grub_rescue_parse_line
- };
-
-void
-grub_register_rescue_parser (void)
-{
- grub_parser_register ("rescue", &grub_rescue_parser);
-}
diff --git a/kern/rescue_reader.c b/kern/rescue_reader.c
index f573cf41f..2f053aaea 100644
--- a/kern/rescue_reader.c
+++ b/kern/rescue_reader.c
@@ -86,7 +86,7 @@ grub_rescue_run (void)
if (! line || line[0] == '\0')
continue;
- grub_parser_get_current ()->parse_line (line, grub_rescue_read_line);
+ grub_rescue_parse_line (line, grub_rescue_read_line);
grub_free (line);
}
}
diff --git a/normal/handler.c b/normal/handler.c
deleted file mode 100644
index 4c8b8f769..000000000
--- a/normal/handler.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/* handler.c - support handler loading */
-/*
- * 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 .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-struct grub_handler_list
-{
- struct grub_handler_list *next;
- char *name;
- grub_command_t cmd;
-};
-
-static struct grub_handler_list *handler_list;
-
-static grub_err_t
-grub_handler_cmd (struct grub_command *cmd,
- int argc __attribute__ ((unused)),
- char **args __attribute__ ((unused)))
-{
- char *p;
- grub_handler_class_t class;
- grub_handler_t handler;
-
- p = grub_strchr (cmd->name, '.');
- if (! p)
- return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid command name");
-
- if (cmd->data)
- {
- if (! grub_dl_get (cmd->data))
- {
- grub_dl_t mod;
-
- mod = grub_dl_load (cmd->data);
- if (mod)
- grub_dl_ref (mod);
- else
- return grub_errno;
- }
- grub_free (cmd->data);
- cmd->data = 0;
- }
-
- *p = 0;
- class = grub_named_list_find (GRUB_AS_NAMED_LIST (grub_handler_class_list),
- cmd->name);
- *p = '.';
-
- if (! class)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "class not found");
-
-
- handler = grub_named_list_find (GRUB_AS_NAMED_LIST (class->handler_list),
- p + 1);
- if (! handler)
- return grub_error (GRUB_ERR_FILE_NOT_FOUND, "handler not found");
-
- grub_handler_set_current (class, handler);
-
- return 0;
-}
-
-static void
-insert_handler (char *name, char *module)
-{
- struct grub_handler_list *item;
- char *data;
-
- if (grub_command_find (name))
- return;
-
- item = grub_malloc (sizeof (*item));
- if (! item)
- return;
-
- item->name = grub_strdup (name);
- if (! item->name)
- {
- grub_free (item);
- return;
- }
-
- if (module)
- {
- data = grub_strdup (module);
- if (! data)
- {
- grub_free (item->name);
- grub_free (item);
- return;
- }
- }
- else
- data = 0;
-
- item->cmd = grub_register_command (item->name, grub_handler_cmd, 0,
- "Set active handler.");
- if (! item->cmd)
- {
- grub_free (data);
- grub_free (item->name);
- grub_free (item);
- return;
- }
-
- item->cmd->data = data;
- grub_list_push (GRUB_AS_LIST_P (&handler_list), GRUB_AS_LIST (item));
-}
-
-/* Read the file handler.lst for auto-loading. */
-void
-read_handler_list (void)
-{
- const char *prefix;
- static int first_time = 1;
- const char *class_name;
-
- /* Make sure that this function does not get executed twice. */
- if (! first_time)
- return;
- first_time = 0;
-
- prefix = grub_env_get ("prefix");
- if (prefix)
- {
- char *filename;
-
- filename = grub_xasprintf ("%s/handler.lst", prefix);
- if (filename)
- {
- grub_file_t file;
-
- file = grub_file_open (filename);
- if (file)
- {
- char *buf = NULL;
- for (;; grub_free (buf))
- {
- char *p;
-
- buf = grub_file_getline (file);
-
- if (! buf)
- break;
-
- if (! grub_isgraph (buf[0]))
- continue;
-
- p = grub_strchr (buf, ':');
- if (! p)
- continue;
-
- *p = '\0';
- while (*++p == ' ')
- ;
-
- insert_handler (buf, p);
- }
- grub_file_close (file);
- }
- grub_free (filename);
- }
- }
-
- grub_handler_class_t class;
- FOR_LIST_ELEMENTS (class, grub_handler_class_list)
- {
- grub_handler_t handler;
- class_name = class->name;
- FOR_LIST_ELEMENTS(handler, class->handler_list)
- {
- char name[grub_strlen (class_name) + grub_strlen (handler->name) + 2];
-
- grub_strcpy (name, class_name);
- grub_strcat (name, ".");
- grub_strcat (name, handler->name);
-
- insert_handler (name, 0);
- }
- }
-
- /* Ignore errors. */
- grub_errno = GRUB_ERR_NONE;
-}
-
-void
-free_handler_list (void)
-{
- struct grub_handler_list *item;
-
- while (handler_list)
- {
- item = handler_list;
- handler_list = handler_list->next;
- grub_free (item->cmd->data);
- grub_unregister_command (item->cmd);
- grub_free (item->name);
- grub_free (item);
- }
-}
diff --git a/normal/main.c b/normal/main.c
index 5a5467485..e16e8ef7d 100644
--- a/normal/main.c
+++ b/normal/main.c
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#define GRUB_DEFAULT_HISTORY_SIZE 50
@@ -308,7 +309,6 @@ static grub_menu_t
read_config_file (const char *config)
{
grub_file_t file;
- grub_parser_t old_parser = 0;
auto grub_err_t getline (char **line, int cont);
grub_err_t getline (char **line, int cont __attribute__ ((unused)))
@@ -322,36 +322,7 @@ read_config_file (const char *config)
return grub_errno;
if (buf[0] == '#')
- {
- if (buf[1] == '!')
- {
- grub_parser_t parser;
- grub_named_list_t list;
-
- buf += 2;
- while (grub_isspace (*buf))
- buf++;
-
- if (! old_parser)
- old_parser = grub_parser_get_current ();
-
- list = GRUB_AS_NAMED_LIST (grub_parser_class.handler_list);
- parser = grub_named_list_find (list, buf);
- if (parser)
- grub_parser_set_current (parser);
- else
- {
- char cmd_name[8 + grub_strlen (buf)];
-
- /* Perhaps it's not loaded yet, try the autoload
- command. */
- grub_strcpy (cmd_name, "parser.");
- grub_strcat (cmd_name, buf);
- grub_command_execute (cmd_name, 0, 0);
- }
- }
- grub_free (*line);
- }
+ grub_free (*line);
else
break;
}
@@ -387,15 +358,12 @@ read_config_file (const char *config)
if ((getline (&line, 0)) || (! line))
break;
- grub_parser_get_current ()->parse_line (line, getline);
+ grub_normal_parse_line (line, getline);
grub_free (line);
}
grub_file_close (file);
- if (old_parser)
- grub_parser_set_current (old_parser);
-
return newmenu;
}
@@ -453,7 +421,6 @@ grub_normal_execute (const char *config, int nested, int batch)
grub_menu_t menu = 0;
read_lists (NULL, NULL);
- read_handler_list ();
grub_register_variable_hook ("prefix", NULL, read_lists);
grub_command_execute ("parser.grub", 0, 0);
@@ -559,17 +526,15 @@ grub_normal_reader_init (int nested)
return 0;
}
-
static grub_err_t
grub_normal_read_line_real (char **line, int cont, int nested)
{
- grub_parser_t parser = grub_parser_get_current ();
- char *prompt;
+ const char *prompt;
if (cont)
- prompt = grub_xasprintf (">");
+ prompt = ">";
else
- prompt = grub_xasprintf ("%s>", parser->name);
+ prompt = "grub>";
if (!prompt)
return grub_errno;
@@ -583,14 +548,11 @@ grub_normal_read_line_real (char **line, int cont, int nested)
if (cont || nested)
{
grub_free (*line);
- grub_free (prompt);
*line = 0;
return grub_errno;
}
}
- grub_free (prompt);
-
return 0;
}
@@ -631,7 +593,7 @@ grub_cmdline_run (int nested)
if (! line)
break;
- grub_parser_get_current ()->parse_line (line, grub_normal_read_line);
+ grub_normal_parse_line (line, grub_normal_read_line);
grub_free (line);
}
}
@@ -679,5 +641,4 @@ GRUB_MOD_FINI(normal)
grub_set_history (0);
grub_register_variable_hook ("pager", 0, 0);
grub_fs_autoload_hook = 0;
- free_handler_list ();
}
diff --git a/normal/menu_entry.c b/normal/menu_entry.c
index 644fe90fd..c23d67d70 100644
--- a/normal/menu_entry.c
+++ b/normal/menu_entry.c
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include
#include
@@ -1189,7 +1190,7 @@ run (struct screen *screen)
while (currline < screen->num_lines)
{
editor_getline (&nextline, 0);
- if (grub_parser_get_current ()->parse_line (nextline, editor_getline))
+ if (grub_normal_parse_line (nextline, editor_getline))
break;
}
diff --git a/script/main.c b/script/main.c
index b5159dc7d..752a8cd8a 100644
--- a/script/main.c
+++ b/script/main.c
@@ -20,7 +20,7 @@
#include
#include
-static grub_err_t
+grub_err_t
grub_normal_parse_line (char *line, grub_reader_getline_t getline)
{
struct grub_script *parsed_script;
@@ -39,19 +39,3 @@ grub_normal_parse_line (char *line, grub_reader_getline_t getline)
return grub_errno;
}
-
-static struct grub_parser grub_sh_parser =
- {
- .name = "grub",
- .parse_line = grub_normal_parse_line
- };
-
-GRUB_MOD_INIT(sh)
-{
- grub_parser_register ("grub", &grub_sh_parser);
-}
-
-GRUB_MOD_FINI(sh)
-{
- grub_parser_unregister (&grub_sh_parser);
-}
diff --git a/util/grub-fstest.c b/util/grub-fstest.c
index c03c43451..f7e1eb2dd 100644
--- a/util/grub-fstest.c
+++ b/util/grub-fstest.c
@@ -55,9 +55,6 @@ grub_getkey (void)
return -1;
}
-struct grub_handler_class grub_term_input_class;
-struct grub_handler_class grub_term_output_class;
-
void
grub_refresh (void)
{
diff --git a/util/grub-probe.c b/util/grub-probe.c
index 948f10dcf..37b92454a 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -70,9 +70,6 @@ grub_getkey (void)
return -1;
}
-struct grub_handler_class grub_term_input_class;
-struct grub_handler_class grub_term_output_class;
-
void
grub_refresh (void)
{
diff --git a/util/grub-script-check.c b/util/grub-script-check.c
index 7dc400dde..722736c81 100644
--- a/util/grub-script-check.c
+++ b/util/grub-script-check.c
@@ -26,8 +26,6 @@
#include
#include
-#include
-
#define _GNU_SOURCE 1
#include
@@ -232,9 +230,6 @@ main (int argc, char *argv[])
}
}
- /* Initialize all modules. */
- grub_init_all ();
-
do
{
input = 0;
@@ -252,8 +247,6 @@ main (int argc, char *argv[])
grub_free (input);
} while (script != 0);
- /* Free resources. */
- grub_fini_all ();
if (file) fclose (file);
return (script == 0);
diff --git a/util/i386/pc/grub-setup.c b/util/i386/pc/grub-setup.c
index 63fa8c328..989b06360 100644
--- a/util/i386/pc/grub-setup.c
+++ b/util/i386/pc/grub-setup.c
@@ -69,9 +69,6 @@ grub_getkey (void)
return -1;
}
-struct grub_handler_class grub_term_input_class;
-struct grub_handler_class grub_term_output_class;
-
void
grub_refresh (void)
{