commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[2112] 2009-04-14 Bean <address@hidden>


From: Bean
Subject: [2112] 2009-04-14 Bean <address@hidden>
Date: Tue, 14 Apr 2009 18:12:15 +0000

Revision: 2112
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2112
Author:   bean
Date:     2009-04-14 18:12:14 +0000 (Tue, 14 Apr 2009)
Log Message:
-----------
2009-04-14  Bean  <address@hidden>

        * Makefile.in (pkglib_DATA): Add handler.lst.
        (handler.lst): New rule.

        * conf/i386-pc.rmk (normal_mod_SOURCES): Add normal/handler.c.
        * conf/i386-coreboot.rmk: Likewise.
        * conf/i386-ieee1275.rmk: Likewise.
        * conf/i386-efi.rmk: Likewise.
        * conf/x86_64-efi.rmk: Likewise.
        * conf/powerpc-ieee1275.rmk: Likewise.
        * conf/sparc64-ieee1275.rmk: Likewise.

        * genhandlerlist.sh: New file.

        * genmk.rb: Add rules to generate handler.lst.

        * include/grub/normal.h (grub_file_getline): New function definition.
        (read_handler_list): Likewise.
        (free_handler_list): Likewise.

        * include/grub/term.h (grub_term_register_input): Add name parameter
        for auto generation of handler.lst.
        (grub_term_register_output): Likewise.

        * normal/handler.c: New file.

        * normal/main.c (get_line): Renamed to grub_file_getline.
        (read_config_file): Use the newly renamed grub_file_getline.
        (read_command_list): Likewise.
        (read_fs_list): Likewise.
        (grub_normal_execute): Call read_handler_list to parse handler.lst.
        (GRUB_MOD_FINI): Call free_handler_list to free handler list.

        * term/efi/console.c (grub_console_init): Add name parameter for auto
        generation of handler.lst.
        * term/gfxterm.c: Likewise.
        * term/i386/pc/at_keyboard.c: Likewise.
        * term/i386/pc/console.c: Likewise.
        * term/i386/pc/serial.c: Likewise.
        * term/i386/pc/vesafb.c: Likewise.
        * term/i386/pc/vga.c: Likewise.
        * term/i386/pc/vga_text.c: Likewise.
        * term/ieee1275/ofconsole.c: Likewise.
        * term/usb_keyboard.c: Likewise.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/Makefile.in
    trunk/grub2/conf/i386-coreboot.rmk
    trunk/grub2/conf/i386-efi.rmk
    trunk/grub2/conf/i386-ieee1275.rmk
    trunk/grub2/conf/i386-pc.rmk
    trunk/grub2/conf/powerpc-ieee1275.rmk
    trunk/grub2/conf/sparc64-ieee1275.rmk
    trunk/grub2/conf/x86_64-efi.rmk
    trunk/grub2/genmk.rb
    trunk/grub2/include/grub/normal.h
    trunk/grub2/include/grub/term.h
    trunk/grub2/normal/main.c
    trunk/grub2/term/efi/console.c
    trunk/grub2/term/gfxterm.c
    trunk/grub2/term/i386/pc/at_keyboard.c
    trunk/grub2/term/i386/pc/console.c
    trunk/grub2/term/i386/pc/serial.c
    trunk/grub2/term/i386/pc/vesafb.c
    trunk/grub2/term/i386/pc/vga.c
    trunk/grub2/term/i386/pc/vga_text.c
    trunk/grub2/term/ieee1275/ofconsole.c
    trunk/grub2/term/usb_keyboard.c
    trunk/grub2/util/console.c

Added Paths:
-----------
    trunk/grub2/genhandlerlist.sh
    trunk/grub2/normal/handler.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/ChangeLog       2009-04-14 18:12:14 UTC (rev 2112)
@@ -1,5 +1,51 @@
 2009-04-14  Bean  <address@hidden>
 
+       * Makefile.in (pkglib_DATA): Add handler.lst.
+       (handler.lst): New rule.
+
+       * conf/i386-pc.rmk (normal_mod_SOURCES): Add normal/handler.c.
+       * conf/i386-coreboot.rmk: Likewise.
+       * conf/i386-ieee1275.rmk: Likewise.
+       * conf/i386-efi.rmk: Likewise.
+       * conf/x86_64-efi.rmk: Likewise.
+       * conf/powerpc-ieee1275.rmk: Likewise.
+       * conf/sparc64-ieee1275.rmk: Likewise.
+
+       * genhandlerlist.sh: New file.
+
+       * genmk.rb: Add rules to generate handler.lst.
+
+       * include/grub/normal.h (grub_file_getline): New function definition.
+       (read_handler_list): Likewise.
+       (free_handler_list): Likewise.
+
+       * include/grub/term.h (grub_term_register_input): Add name parameter
+       for auto generation of handler.lst.
+       (grub_term_register_output): Likewise.
+
+       * normal/handler.c: New file.
+
+       * normal/main.c (get_line): Renamed to grub_file_getline.
+       (read_config_file): Use the newly renamed grub_file_getline.
+       (read_command_list): Likewise.
+       (read_fs_list): Likewise.
+       (grub_normal_execute): Call read_handler_list to parse handler.lst.
+       (GRUB_MOD_FINI): Call free_handler_list to free handler list.
+
+       * term/efi/console.c (grub_console_init): Add name parameter for auto
+       generation of handler.lst.
+       * term/gfxterm.c: Likewise.
+       * term/i386/pc/at_keyboard.c: Likewise.
+       * term/i386/pc/console.c: Likewise.
+       * term/i386/pc/serial.c: Likewise.
+       * term/i386/pc/vesafb.c: Likewise.
+       * term/i386/pc/vga.c: Likewise.
+       * term/i386/pc/vga_text.c: Likewise.
+       * term/ieee1275/ofconsole.c: Likewise.
+       * term/usb_keyboard.c: Likewise.
+
+2009-04-14  Bean  <address@hidden>
+
        * util/grub-pe2elf.c (write_symbol_table): Terminate short name symbol
        properly with null character.
 

Modified: trunk/grub2/Makefile.in
===================================================================
--- trunk/grub2/Makefile.in     2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/Makefile.in     2009-04-14 18:12:14 UTC (rev 2112)
@@ -139,7 +139,7 @@
 ### General targets.
 
 CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA)
-pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst
+pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst handler.lst
 moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk
        cat $(DEFSYMFILES) /dev/null \
          | $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \
@@ -154,6 +154,9 @@
 partmap.lst: $(PARTMAPFILES)
        cat $^ /dev/null | sort > $@
 
+handler.lst: $(HANDLERFILES)
+       cat $^ /dev/null | sort > $@
+
 ifeq (, $(UNIFONT_BDF))
 else
 

Modified: trunk/grub2/conf/i386-coreboot.rmk
===================================================================
--- trunk/grub2/conf/i386-coreboot.rmk  2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/conf/i386-coreboot.rmk  2009-04-14 18:12:14 UTC (rev 2112)
@@ -117,7 +117,7 @@
 # Please put arch dependant part of normal.mod at the end of list to
 # keep it simpler to update to different architectures.
 #
-normal_mod_SOURCES = normal/cmdline.c normal/command.c                 \
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/handler.c        
\
        normal/completion.c normal/datetime.c normal/execute.c          \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \

Modified: trunk/grub2/conf/i386-efi.rmk
===================================================================
--- trunk/grub2/conf/i386-efi.rmk       2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/conf/i386-efi.rmk       2009-04-14 18:12:14 UTC (rev 2112)
@@ -121,7 +121,7 @@
 # Please put arch dependant part of normal.mod at the end of list to
 # keep it simpler to update to different architectures.
 #
-normal_mod_SOURCES = normal/cmdline.c normal/command.c \
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/handler.c        
\
        normal/completion.c normal/datetime.c normal/execute.c          \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \

Modified: trunk/grub2/conf/i386-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/i386-ieee1275.rmk  2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/conf/i386-ieee1275.rmk  2009-04-14 18:12:14 UTC (rev 2112)
@@ -113,7 +113,7 @@
 # Please put arch dependant part of normal.mod at the end of list to
 # keep it simpler to update to different architectures.
 #
-normal_mod_SOURCES = normal/cmdline.c normal/command.c                 \
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/handler.c        
\
        normal/completion.c normal/datetime.c normal/execute.c          \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \

Modified: trunk/grub2/conf/i386-pc.rmk
===================================================================
--- trunk/grub2/conf/i386-pc.rmk        2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/conf/i386-pc.rmk        2009-04-14 18:12:14 UTC (rev 2112)
@@ -212,7 +212,7 @@
 # keep it simpler to update to different architectures.
 #
 normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/datetime.c \
-       normal/completion.c normal/execute.c                            \
+       normal/completion.c normal/execute.c normal/handler.c           \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \
        normal/color.c                                                  \

Modified: trunk/grub2/conf/powerpc-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/powerpc-ieee1275.rmk       2009-04-14 16:56:35 UTC (rev 
2111)
+++ trunk/grub2/conf/powerpc-ieee1275.rmk       2009-04-14 18:12:14 UTC (rev 
2112)
@@ -128,7 +128,7 @@
 # keep it simpler to update to different architectures.
 #
 normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/datetime.c \
-       normal/completion.c normal/execute.c                            \
+       normal/completion.c normal/execute.c normal/handler.c           \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \
        normal/color.c                                                  \

Modified: trunk/grub2/conf/sparc64-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/sparc64-ieee1275.rmk       2009-04-14 16:56:35 UTC (rev 
2111)
+++ trunk/grub2/conf/sparc64-ieee1275.rmk       2009-04-14 18:12:14 UTC (rev 
2112)
@@ -169,7 +169,7 @@
 normal_mod_SOURCES = normal/arg.c normal/cmdline.c normal/command.c    \
        normal/datetime.c normal/completion.c normal/execute.c          \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
-       normal/menu_text.c                                              \
+       normal/handler.c normal/menu_text.c                             \
        normal/color.c                                                  \
        normal/menu_viewer.c normal/menu_entry.c                        \
        normal/misc.c grub_script.tab.c                                 \

Modified: trunk/grub2/conf/x86_64-efi.rmk
===================================================================
--- trunk/grub2/conf/x86_64-efi.rmk     2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/conf/x86_64-efi.rmk     2009-04-14 18:12:14 UTC (rev 2112)
@@ -124,7 +124,7 @@
 # Please put arch dependant part of normal.mod at the end of list to
 # keep it simpler to update to different architectures.
 #
-normal_mod_SOURCES = normal/cmdline.c normal/command.c                 \
+normal_mod_SOURCES = normal/cmdline.c normal/command.c normal/handler.c        
\
        normal/completion.c normal/datetime.c normal/execute.c          \
        normal/function.c normal/lexer.c normal/main.c normal/menu.c    \
        normal/menu_text.c                                              \

Added: trunk/grub2/genhandlerlist.sh
===================================================================
--- trunk/grub2/genhandlerlist.sh                               (rev 0)
+++ trunk/grub2/genhandlerlist.sh       2009-04-14 18:12:14 UTC (rev 2112)
@@ -0,0 +1,23 @@
+#! /bin/sh
+#
+# Copyright (C) 2009  Free Software Foundation, Inc.
+#
+# This script is free software; the author
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Read source code from stdin and detect command names.
+
+module=$1
+
+grep -v "^#" | sed -n \
+ -e "/grub_parser_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/parser.\1: 
$module/;p;}" \
+ -e "/grub_reader_register *( *\"/{s/.*( *\"\([^\"]*\)\".*/reader.\1: 
$module/;p;}" \
+ -e "/grub_term_register_input *( *\"/{s/.*( 
*\"\([^\"]*\)\".*/terminal_input.\1: $module/;p;}" \
+ -e "/grub_term_register_output *( *\"/{s/.*( 
*\"\([^\"]*\)\".*/terminal_output.\1: $module/;p;}" \
+ -e "/grub_menu_viewer_register *( *\"/{s/.*( 
*\"\([^\"]*\)\".*/menu_viewer.\1: $module/;p;}"

Modified: trunk/grub2/genmk.rb
===================================================================
--- trunk/grub2/genmk.rb        2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/genmk.rb        2009-04-14 18:12:14 UTC (rev 2112)
@@ -143,6 +143,7 @@
       command = 'cmd-' + obj.suffix('lst')
       fs = 'fs-' + obj.suffix('lst')
       partmap = 'partmap-' + obj.suffix('lst')
+      handler = 'handler-' + obj.suffix('lst')
       dep = deps[i]
       flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end
       extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end
@@ -152,10 +153,11 @@
        $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) 
#{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -MD -c -o $@ $<
 -include #{dep}
 
-CLEANFILES += #{command} #{fs} #{partmap}
+CLEANFILES += #{command} #{fs} #{partmap} #{handler}
 COMMANDFILES += #{command}
 FSFILES += #{fs}
 PARTMAPFILES += #{partmap}
+HANDLERFILES += #{handler}
 
 #{command}: #{src} $(#{src}_DEPENDENCIES) gencmdlist.sh
        set -e; \
@@ -172,6 +174,10 @@
          $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) 
#{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
          | sh $(srcdir)/genpartmaplist.sh #{symbolic_name} > $@ || (rm -f $@; 
exit 1)
 
+#{handler}: #{src} $(#{src}_DEPENDENCIES) genhandlerlist.sh
+       set -e; \
+         $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) 
#{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \
+         | sh $(srcdir)/genhandlerlist.sh #{symbolic_name} > $@ || (rm -f $@; 
exit 1)
 
 "
     end.join('')

Modified: trunk/grub2/include/grub/normal.h
===================================================================
--- trunk/grub2/include/grub/normal.h   2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/include/grub/normal.h   2009-04-14 18:12:14 UTC (rev 2112)
@@ -26,6 +26,7 @@
 #include <grub/env.h>
 #include <grub/menu.h>
 #include <grub/command.h>
+#include <grub/file.h>
 
 /* The maximum size of a command-line.  */
 #define GRUB_MAX_CMDLINE       1600
@@ -103,6 +104,10 @@
 void grub_parse_color_name_pair (grub_uint8_t *ret, const char *name);
 void grub_wait_after_message (void);
 
+char *grub_file_getline (grub_file_t file);
+void read_handler_list (void);
+void free_handler_list (void);
+
 #ifdef GRUB_UTIL
 void grub_normal_init (void);
 void grub_normal_fini (void);

Modified: trunk/grub2/include/grub/term.h
===================================================================
--- trunk/grub2/include/grub/term.h     2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/include/grub/term.h     2009-04-14 18:12:14 UTC (rev 2112)
@@ -219,13 +219,15 @@
 extern struct grub_handler_class EXPORT_VAR(grub_term_output_class);
 
 static inline void
-grub_term_register_input (grub_term_input_t term)
+grub_term_register_input (const char *name __attribute__ ((unused)),
+                         grub_term_input_t term)
 {
   grub_handler_register (&grub_term_input_class, GRUB_AS_HANDLER (term));
 }
 
 static inline void
-grub_term_register_output (grub_term_output_t term)
+grub_term_register_output (const char *name __attribute__ ((unused)),
+                          grub_term_output_t term)
 {
   grub_handler_register (&grub_term_output_class, GRUB_AS_HANDLER (term));
 }

Added: trunk/grub2/normal/handler.c
===================================================================
--- trunk/grub2/normal/handler.c                                (rev 0)
+++ trunk/grub2/normal/handler.c        2009-04-14 18:12:14 UTC (rev 2112)
@@ -0,0 +1,232 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/dl.h>
+#include <grub/mm.h>
+#include <grub/err.h>
+#include <grub/env.h>
+#include <grub/misc.h>
+#include <grub/command.h>
+#include <grub/handler.h>
+#include <grub/normal.h>
+
+struct grub_handler_list
+{
+  struct grub_handler_list *next;
+  char *name;
+  grub_command_t cmd;
+};
+
+static grub_list_t 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 (&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;
+
+  auto int iterate_handler (grub_handler_t handler);
+  int iterate_handler (grub_handler_t handler)
+    {
+      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);
+
+      return 0;
+    }
+
+  auto int iterate_class (grub_handler_class_t class);
+  int iterate_class (grub_handler_class_t class)
+    {
+      class_name = class->name;
+      grub_list_iterate (GRUB_AS_LIST (class->handler_list),
+                        (grub_list_hook_t) iterate_handler);
+
+      return 0;
+    }
+
+  /* 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_malloc (grub_strlen (prefix) + sizeof ("/handler.lst"));
+      if (filename)
+       {
+         grub_file_t file;
+
+         grub_sprintf (filename, "%s/handler.lst", prefix);
+         file = grub_file_open (filename);
+         if (file)
+           {
+             char *buf = 0;
+             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_list_iterate (GRUB_AS_LIST (grub_handler_class_list),
+                    (grub_list_hook_t) iterate_class);
+
+  /* Ignore errors.  */
+  grub_errno = GRUB_ERR_NONE;
+}
+
+void
+free_handler_list (void)
+{
+  struct grub_handler_list *item;
+
+  while ((item = grub_list_pop (&handler_list)) != 0)
+    {
+      grub_free (item->cmd->data);
+      grub_unregister_command (item->cmd);
+      grub_free (item->name);
+      grub_free (item);
+    }
+}

Modified: trunk/grub2/normal/main.c
===================================================================
--- trunk/grub2/normal/main.c   2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/normal/main.c   2009-04-14 18:12:14 UTC (rev 2112)
@@ -37,8 +37,8 @@
 #define GRUB_DEFAULT_HISTORY_SIZE      50
 
 /* Read a line from the file FILE.  */
-static char *
-get_line (grub_file_t file)
+char *
+grub_file_getline (grub_file_t file)
 {
   char c;
   int pos = 0;
@@ -310,7 +310,7 @@
     {
       currline++;
 
-      *line = get_line (file);
+      *line = grub_file_getline (file);
       if (! *line)
        return grub_errno;
 
@@ -343,7 +343,7 @@
       int startline;
       char *cmdline;
 
-      cmdline = get_line (file);
+      cmdline = grub_file_getline (file);
       if (!cmdline)
        break;
 
@@ -475,7 +475,7 @@
                  grub_command_t cmd;
                  int prio = 0;
 
-                 buf = get_line (file);
+                 buf = grub_file_getline (file);
 
                  if (! buf)
                    break;
@@ -594,7 +594,7 @@
                  char *q;
                  grub_fs_module_list_t fs_mod;
                  
-                 buf = get_line (file);
+                 buf = grub_file_getline (file);
                  if (! buf)
                    break;
 
@@ -650,6 +650,7 @@
 
   read_command_list ();
   read_fs_list ();
+  read_handler_list ();
   
   if (config)
     {
@@ -754,4 +755,5 @@
 {
   grub_set_history (0);
   grub_unregister_command (cmd_normal);
+  free_handler_list ();
 }

Modified: trunk/grub2/term/efi/console.c
===================================================================
--- trunk/grub2/term/efi/console.c      2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/efi/console.c      2009-04-14 18:12:14 UTC (rev 2112)
@@ -366,8 +366,8 @@
       return;
     }
 
-  grub_term_register_input (&grub_console_term_input);
-  grub_term_register_output (&grub_console_term_output);
+  grub_term_register_input ("console", &grub_console_term_input);
+  grub_term_register_output ("console", &grub_console_term_output);
 }
 
 void

Modified: trunk/grub2/term/gfxterm.c
===================================================================
--- trunk/grub2/term/gfxterm.c  2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/gfxterm.c  2009-04-14 18:12:14 UTC (rev 2112)
@@ -1155,7 +1155,7 @@
 GRUB_MOD_INIT(term_gfxterm)
 {
   my_mod = mod;
-  grub_term_register_output (&grub_video_term);
+  grub_term_register_output ("gfxterm", &grub_video_term);
   cmd = grub_register_command ("background_image",
                               grub_gfxterm_background_image_cmd,
                               0, "Load background image for active terminal");

Modified: trunk/grub2/term/i386/pc/at_keyboard.c
===================================================================
--- trunk/grub2/term/i386/pc/at_keyboard.c      2009-04-14 16:56:35 UTC (rev 
2111)
+++ trunk/grub2/term/i386/pc/at_keyboard.c      2009-04-14 18:12:14 UTC (rev 
2112)
@@ -226,7 +226,7 @@
 
 GRUB_MOD_INIT(at_keyboard)
 {
-  grub_term_register_input (&grub_at_keyboard_term);
+  grub_term_register_input ("at_keyboard", &grub_at_keyboard_term);
 }
 
 GRUB_MOD_FINI(at_keyboard)

Modified: trunk/grub2/term/i386/pc/console.c
===================================================================
--- trunk/grub2/term/i386/pc/console.c  2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/i386/pc/console.c  2009-04-14 18:12:14 UTC (rev 2112)
@@ -46,8 +46,8 @@
 void
 grub_console_init (void)
 {
-  grub_term_register_output (&grub_console_term_output);
-  grub_term_register_input (&grub_console_term_input);
+  grub_term_register_output ("console", &grub_console_term_output);
+  grub_term_register_input ("console", &grub_console_term_input);
 }
 
 void

Modified: trunk/grub2/term/i386/pc/serial.c
===================================================================
--- trunk/grub2/term/i386/pc/serial.c   2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/i386/pc/serial.c   2009-04-14 18:12:14 UTC (rev 2112)
@@ -577,8 +577,8 @@
       /* Register terminal if not yet registered.  */
       if (registered == 0)
        {
-         grub_term_register_input (&grub_serial_term_input);
-         grub_term_register_output (&grub_serial_term_output);
+         grub_term_register_input ("serial", &grub_serial_term_input);
+         grub_term_register_output ("serial", &grub_serial_term_output);
          registered = 1;
        }
     }

Modified: trunk/grub2/term/i386/pc/vesafb.c
===================================================================
--- trunk/grub2/term/i386/pc/vesafb.c   2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/i386/pc/vesafb.c   2009-04-14 18:12:14 UTC (rev 2112)
@@ -599,7 +599,7 @@
 GRUB_MOD_INIT(vesafb)
 {
   my_mod = mod;
-  grub_term_register_output (&grub_vesafb_term);
+  grub_term_register_output ("vesafb", &grub_vesafb_term);
 }
 
 GRUB_MOD_FINI(vesafb)

Modified: trunk/grub2/term/i386/pc/vga.c
===================================================================
--- trunk/grub2/term/i386/pc/vga.c      2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/i386/pc/vga.c      2009-04-14 18:12:14 UTC (rev 2112)
@@ -25,7 +25,6 @@
 #include <grub/types.h>
 #include <grub/dl.h>
 #include <grub/misc.h>
-#include <grub/normal.h>
 #include <grub/font.h>
 
 #define DEBUG_VGA      0
@@ -509,7 +508,7 @@
 #ifndef GRUB_UTIL
   my_mod = mod;
 #endif
-  grub_term_register_output (&grub_vga_term);
+  grub_term_register_output ("vga", &grub_vga_term);
 }
 
 GRUB_MOD_FINI(vga)

Modified: trunk/grub2/term/i386/pc/vga_text.c
===================================================================
--- trunk/grub2/term/i386/pc/vga_text.c 2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/i386/pc/vga_text.c 2009-04-14 18:12:14 UTC (rev 2112)
@@ -168,7 +168,7 @@
 
 GRUB_MOD_INIT(vga_text)
 {
-  grub_term_register_output (&grub_vga_text_term);
+  grub_term_register_output ("vga_text", &grub_vga_text_term);
 }
 
 GRUB_MOD_FINI(vga_text)

Modified: trunk/grub2/term/ieee1275/ofconsole.c
===================================================================
--- trunk/grub2/term/ieee1275/ofconsole.c       2009-04-14 16:56:35 UTC (rev 
2111)
+++ trunk/grub2/term/ieee1275/ofconsole.c       2009-04-14 18:12:14 UTC (rev 
2112)
@@ -420,8 +420,8 @@
 void
 grub_console_init (void)
 {
-  grub_term_register_input (&grub_ofconsole_term_input);
-  grub_term_register_output (&grub_ofconsole_term_output);
+  grub_term_register_input ("ofconsole", &grub_ofconsole_term_input);
+  grub_term_register_output ("ofconsole", &grub_ofconsole_term_output);
 }
 
 void

Modified: trunk/grub2/term/usb_keyboard.c
===================================================================
--- trunk/grub2/term/usb_keyboard.c     2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/term/usb_keyboard.c     2009-04-14 18:12:14 UTC (rev 2112)
@@ -247,7 +247,7 @@
   (void) mod;                  /* To stop warning. */
 
   grub_usb_hid ();
-  grub_term_register_input (&grub_usb_keyboard_term);
+  grub_term_register_input ("usb_keyboard", &grub_usb_keyboard_term);
 }
 
 GRUB_MOD_FINI(usb_keyboard)

Modified: trunk/grub2/util/console.c
===================================================================
--- trunk/grub2/util/console.c  2009-04-14 16:56:35 UTC (rev 2111)
+++ trunk/grub2/util/console.c  2009-04-14 18:12:14 UTC (rev 2112)
@@ -374,8 +374,8 @@
 void
 grub_console_init (void)
 {
-  grub_term_register_output (&grub_ncurses_term_output);
-  grub_term_register_input (&grub_ncurses_term_input);
+  grub_term_register_output ("console", &grub_ncurses_term_output);
+  grub_term_register_input ("console", &grub_ncurses_term_input);
   grub_term_set_current_output (&grub_ncurses_term_output);
   grub_term_set_current_input (&grub_ncurses_term_input);
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]